mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-22 15:12:38 +00:00
Compare commits
2 Commits
autoformat
...
autoformat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4a3def2c7f | ||
|
|
45eb22e67d |
@@ -1,6 +1,9 @@
|
||||
repos:
|
||||
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
|
||||
rev: v2.1.0
|
||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
||||
rev: v2.4.1
|
||||
hooks:
|
||||
- id: pretty-format-java
|
||||
args: [--autofix, --google-java-formatter-version=1.11.0, --aosp]
|
||||
- id: prettier
|
||||
types: [java]
|
||||
additional_dependencies:
|
||||
- prettier@2.4.1
|
||||
- prettier-plugin-java@1.4.0
|
||||
|
||||
46
.travis.yml
46
.travis.yml
@@ -34,6 +34,7 @@ env:
|
||||
- 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
|
||||
@@ -48,12 +49,14 @@ 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'
|
||||
@@ -62,6 +65,7 @@ jobs:
|
||||
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'
|
||||
@@ -69,6 +73,7 @@ jobs:
|
||||
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'
|
||||
@@ -77,6 +82,7 @@ jobs:
|
||||
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'
|
||||
@@ -85,6 +91,7 @@ jobs:
|
||||
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'
|
||||
@@ -104,6 +111,7 @@ jobs:
|
||||
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'
|
||||
@@ -112,6 +120,7 @@ jobs:
|
||||
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'
|
||||
@@ -120,6 +129,7 @@ jobs:
|
||||
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'
|
||||
@@ -127,6 +137,7 @@ jobs:
|
||||
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
|
||||
@@ -134,6 +145,7 @@ jobs:
|
||||
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
|
||||
@@ -141,6 +153,7 @@ jobs:
|
||||
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
|
||||
@@ -148,6 +161,7 @@ jobs:
|
||||
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:
|
||||
@@ -156,6 +170,7 @@ jobs:
|
||||
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'
|
||||
@@ -163,6 +178,7 @@ jobs:
|
||||
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:
|
||||
@@ -171,6 +187,7 @@ jobs:
|
||||
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'
|
||||
@@ -178,6 +195,7 @@ jobs:
|
||||
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'
|
||||
@@ -185,6 +203,7 @@ jobs:
|
||||
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'
|
||||
@@ -192,6 +211,7 @@ jobs:
|
||||
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'
|
||||
@@ -199,6 +219,7 @@ jobs:
|
||||
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'
|
||||
@@ -206,6 +227,7 @@ jobs:
|
||||
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:
|
||||
@@ -214,6 +236,7 @@ jobs:
|
||||
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:
|
||||
@@ -222,12 +245,14 @@ jobs:
|
||||
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'
|
||||
@@ -235,6 +260,7 @@ jobs:
|
||||
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'
|
||||
@@ -243,6 +269,7 @@ jobs:
|
||||
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'
|
||||
@@ -251,6 +278,7 @@ jobs:
|
||||
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'
|
||||
@@ -259,6 +287,7 @@ jobs:
|
||||
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'
|
||||
@@ -266,6 +295,7 @@ jobs:
|
||||
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:
|
||||
@@ -274,6 +304,7 @@ jobs:
|
||||
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
|
||||
@@ -281,6 +312,7 @@ jobs:
|
||||
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
|
||||
@@ -288,6 +320,7 @@ jobs:
|
||||
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
|
||||
@@ -295,6 +328,7 @@ jobs:
|
||||
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
|
||||
@@ -302,6 +336,7 @@ jobs:
|
||||
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
|
||||
@@ -309,6 +344,7 @@ jobs:
|
||||
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
|
||||
@@ -316,6 +352,7 @@ jobs:
|
||||
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
|
||||
@@ -323,6 +360,7 @@ jobs:
|
||||
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
|
||||
@@ -330,36 +368,44 @@ jobs:
|
||||
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:
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
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;
|
||||
@@ -40,10 +39,19 @@ import org.springframework.context.annotation.PropertySource;
|
||||
*/
|
||||
@Getter
|
||||
@Configuration
|
||||
@PropertySource(value = {"classpath:default.properties", "classpath:config.properties"})
|
||||
@PropertySource(value = "classpath:module.properties", ignoreResourceNotFound = true)
|
||||
@PropertySource(value = "classpath:local.properties", ignoreResourceNotFound = true)
|
||||
@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;
|
||||
|
||||
|
||||
@@ -27,9 +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;
|
||||
@@ -54,10 +52,14 @@ import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
@Scope(value = "prototype")
|
||||
public class RMRestWrapper {
|
||||
/** The class that wraps the ReST APIs from core. */
|
||||
@Autowired private RestWrapper restWrapper;
|
||||
|
||||
@Autowired @Getter private RMRestProperties rmRestProperties;
|
||||
/** The class that wraps the ReST APIs from core. */
|
||||
@Autowired
|
||||
private RestWrapper restWrapper;
|
||||
|
||||
@Autowired
|
||||
@Getter
|
||||
private RMRestProperties rmRestProperties;
|
||||
|
||||
public GSCoreAPI withGSCoreAPI() {
|
||||
return new GSCoreAPI(this, getRmRestProperties());
|
||||
@@ -103,10 +105,7 @@ public class RMRestWrapper {
|
||||
return restWrapper.getStatusCode();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the status code. This should only be needed when calling APIs without using the TAS
|
||||
* framework.
|
||||
*/
|
||||
/** Set the status code. This should only be needed when calling APIs without using the TAS framework. */
|
||||
public void setStatusCode(String statusCode) {
|
||||
restWrapper.setStatusCode(statusCode);
|
||||
}
|
||||
@@ -137,19 +136,15 @@ public class RMRestWrapper {
|
||||
}
|
||||
|
||||
/**
|
||||
* You can handle the request sent to server by calling this method. If for example you want to
|
||||
* sent multipart form data you can use:
|
||||
*
|
||||
* <pre>
|
||||
* You can handle the request sent to server by calling this method.
|
||||
* If for example you want to sent multipart form data you can use: <pre>
|
||||
* restClient.configureRequestSpec()
|
||||
* .addMultiPart("filedata", Utility.getResourceTestDataFile("restapi-resource"))
|
||||
* .addFormParam("renditions", "doclib")
|
||||
* .addFormParam("autoRename", true);
|
||||
*
|
||||
* restClient.withCoreAPI().usingNode(ContentModel.my()).createNode();
|
||||
* </pre>
|
||||
*
|
||||
* This will create the node using the multipart data defined.
|
||||
* </pre> This will create the node using the multipart data defined.
|
||||
*/
|
||||
public RequestSpecBuilder configureRequestSpec() {
|
||||
return restWrapper.configureRequestSpec();
|
||||
|
||||
@@ -28,9 +28,9 @@ 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;
|
||||
import org.alfresco.rest.requests.coreAPI.RestCoreAPI;
|
||||
import org.alfresco.rest.requests.search.SearchAPI;
|
||||
@@ -54,8 +54,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* REST API Factory which provides access to the APIs
|
||||
*
|
||||
@@ -65,6 +63,7 @@ import javax.annotation.Resource;
|
||||
@Service
|
||||
@Scope(value = "prototype")
|
||||
public class RestAPIFactory {
|
||||
|
||||
@Autowired
|
||||
@Getter(value = PROTECTED)
|
||||
private DataUserAIS dataUser;
|
||||
@@ -76,23 +75,31 @@ public class RestAPIFactory {
|
||||
|
||||
private GSCoreAPI getGSCoreAPI(UserModel userModel) {
|
||||
getRmRestWrapper()
|
||||
.authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser());
|
||||
.authenticateUser(
|
||||
userModel != null ? userModel : getDataUser().getAdminUser()
|
||||
);
|
||||
return getRmRestWrapper().withGSCoreAPI();
|
||||
}
|
||||
|
||||
private RestCoreAPI getCoreAPI(UserModel userModel) {
|
||||
getRmRestWrapper()
|
||||
.authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser());
|
||||
.authenticateUser(
|
||||
userModel != null ? userModel : getDataUser().getAdminUser()
|
||||
);
|
||||
return getRmRestWrapper().withCoreAPI();
|
||||
}
|
||||
|
||||
public SearchAPI getSearchAPI(UserModel userModel) {
|
||||
getRmRestWrapper()
|
||||
.authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser());
|
||||
.authenticateUser(
|
||||
userModel != null ? userModel : getDataUser().getAdminUser()
|
||||
);
|
||||
return getRmRestWrapper().withSearchAPI();
|
||||
}
|
||||
|
||||
/** When no user is given the default is set to admin */
|
||||
/**
|
||||
* When no user is given the default is set to admin
|
||||
*/
|
||||
public SearchAPI getSearchAPI() {
|
||||
return getSearchAPI(null);
|
||||
}
|
||||
@@ -105,7 +112,8 @@ public class RestAPIFactory {
|
||||
}
|
||||
}
|
||||
|
||||
public Node getNodeAPI(UserModel userModel, RepoTestModel model) throws RuntimeException {
|
||||
public Node getNodeAPI(UserModel userModel, RepoTestModel model)
|
||||
throws RuntimeException {
|
||||
try {
|
||||
return getCoreAPI(userModel).usingNode(model);
|
||||
} catch (Exception e) {
|
||||
@@ -197,7 +205,9 @@ public class RestAPIFactory {
|
||||
return getGSCoreAPI(null).usingUnfiledRecordFolder();
|
||||
}
|
||||
|
||||
public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI(UserModel userModel) {
|
||||
public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI(
|
||||
UserModel userModel
|
||||
) {
|
||||
return getGSCoreAPI(userModel).usingUnfiledRecordFolder();
|
||||
}
|
||||
|
||||
|
||||
@@ -26,23 +26,28 @@
|
||||
*/
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** Builder class for creating a search api request */
|
||||
/**
|
||||
* Builder class for creating a search api request
|
||||
*/
|
||||
public class SearchRequestBuilder extends SearchRequest {
|
||||
/** Constructor for Search API Request */
|
||||
|
||||
/**
|
||||
* Constructor for Search API Request
|
||||
*/
|
||||
public SearchRequestBuilder() {
|
||||
new SearchRequest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the sql statement for the SearchRequest
|
||||
*
|
||||
* @param query sql statement
|
||||
* @return search request
|
||||
* @return search request
|
||||
*/
|
||||
public SearchRequestBuilder setQueryBuilder(RestRequestQueryModel query) {
|
||||
super.setQuery(query);
|
||||
@@ -60,7 +65,9 @@ public class SearchRequestBuilder extends SearchRequest {
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Set the pagination properties */
|
||||
/**
|
||||
* Set the pagination properties
|
||||
*/
|
||||
public Pagination setPagination(Integer maxItems, Integer skipCount) {
|
||||
Pagination pagination = new Pagination();
|
||||
pagination.setMaxItems(maxItems);
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
*/
|
||||
package org.alfresco.rest.core.v0;
|
||||
|
||||
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;
|
||||
@@ -35,14 +41,6 @@ import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* Helper methods for use with REST APIs.
|
||||
*
|
||||
@@ -50,15 +48,16 @@ import javax.json.JsonReader;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class APIUtils {
|
||||
|
||||
/** Logger for this 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();
|
||||
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();
|
||||
|
||||
/** Private constructor for helper class. */
|
||||
private APIUtils() {}
|
||||
@@ -69,12 +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");
|
||||
source =
|
||||
IOUtils.toString(
|
||||
httpResponse.getEntity().getContent(),
|
||||
"UTF-8"
|
||||
);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException("Could not extract JSON from HTTP response.", e);
|
||||
throw new IllegalArgumentException(
|
||||
"Could not extract JSON from HTTP response.",
|
||||
e
|
||||
);
|
||||
}
|
||||
LOGGER.info("Response body:\n{}", source);
|
||||
return new JSONObject(source);
|
||||
@@ -86,7 +94,9 @@ 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 {
|
||||
@@ -94,10 +104,12 @@ public class APIUtils {
|
||||
reader = Json.createReader(responseStream);
|
||||
return reader.readObject().getString("message");
|
||||
} catch (JSONException error) {
|
||||
|
||||
LOGGER.error("Converting message body to JSON failed. Body: {}", httpResponse, 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) {
|
||||
|
||||
@@ -29,6 +29,15 @@ package org.alfresco.rest.core.v0;
|
||||
import static org.testng.AssertJUnit.assertEquals;
|
||||
import static org.testng.AssertJUnit.assertNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.text.MessageFormat;
|
||||
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;
|
||||
@@ -54,16 +63,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* The base API class containing common methods for making v0 API requests
|
||||
*
|
||||
@@ -71,27 +70,34 @@ import java.util.Map;
|
||||
* @since 2.5
|
||||
*/
|
||||
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}";
|
||||
"{0}internal/shared/share/workspace/SpacesStore/{1}";
|
||||
private static final String SLINGSHOT_PREFIX = "alfresco/s/slingshot/";
|
||||
|
||||
@Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
@Autowired
|
||||
private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
|
||||
@Autowired protected ContentService contentService;
|
||||
@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";
|
||||
|
||||
/**
|
||||
@@ -101,7 +107,10 @@ 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 {
|
||||
JSONArray items = result.getJSONArray("items");
|
||||
@@ -124,14 +133,21 @@ public abstract class BaseAPI {
|
||||
* @param propertyName
|
||||
* @return
|
||||
*/
|
||||
protected String getPropertyValue(JSONObject result, String nodeRef, String propertyName) {
|
||||
protected String getPropertyValue(
|
||||
JSONObject result,
|
||||
String nodeRef,
|
||||
String propertyName
|
||||
) {
|
||||
String propertyValue = "";
|
||||
try {
|
||||
JSONArray items = result.getJSONArray("items");
|
||||
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);
|
||||
propertyValue =
|
||||
item
|
||||
.getJSONObject("properties")
|
||||
.getString(propertyName);
|
||||
}
|
||||
}
|
||||
} catch (JSONException error) {
|
||||
@@ -142,16 +158,17 @@ public abstract class BaseAPI {
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to extract property values from request result and put them in map as a list
|
||||
* that corresponds to a unique property value.
|
||||
* Helper method to extract property values from request result and put them in map as a list that corresponds to a unique property value.
|
||||
*
|
||||
* @param requestResult the request response
|
||||
* @return a map containing information about multiple properties values that correspond to a
|
||||
* unique one
|
||||
* @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) {
|
||||
JSONObject requestResult,
|
||||
String uniqueProperty,
|
||||
List<String> otherProperties
|
||||
) {
|
||||
Map<String, List<String>> valuesByUniqueProperty = new HashMap<>();
|
||||
try {
|
||||
JSONArray items = requestResult.getJSONArray("items");
|
||||
@@ -161,10 +178,16 @@ public abstract class BaseAPI {
|
||||
|
||||
for (int j = 0; j < otherProperties.size(); j++) {
|
||||
otherPropertiesValues.add(
|
||||
items.getJSONObject(i).get(otherProperties.get(j)).toString());
|
||||
items
|
||||
.getJSONObject(i)
|
||||
.get(otherProperties.get(j))
|
||||
.toString()
|
||||
);
|
||||
}
|
||||
valuesByUniqueProperty.put(
|
||||
items.getJSONObject(i).getString(uniqueProperty), otherPropertiesValues);
|
||||
items.getJSONObject(i).getString(uniqueProperty),
|
||||
otherPropertiesValues
|
||||
);
|
||||
}
|
||||
} catch (JSONException error) {
|
||||
throw new RuntimeException("Unable to parse result", error);
|
||||
@@ -178,13 +201,21 @@ public abstract class BaseAPI {
|
||||
*
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @param path the path to the container eg. in case of a category it would be the category
|
||||
* name, in case of a folder it would be /categoryName/folderName when trying to get File
|
||||
* Plan, the path would be ""
|
||||
* @param path the path to the container eg. in case of a category it would be the category name,
|
||||
* in case of a folder it would be /categoryName/folderName
|
||||
* 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
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -192,13 +223,20 @@ public abstract class BaseAPI {
|
||||
*
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @param path the object path
|
||||
* @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);
|
||||
object =
|
||||
contentService
|
||||
.getCMISSession(username, password)
|
||||
.getObjectByPath(path);
|
||||
} catch (CmisObjectNotFoundException notFoundError) {
|
||||
return null;
|
||||
}
|
||||
@@ -214,18 +252,24 @@ public abstract class BaseAPI {
|
||||
* @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) {
|
||||
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());
|
||||
requestURL =
|
||||
MessageFormat.format(requestURI, client.getAlfrescoUrl());
|
||||
} else {
|
||||
requestURL =
|
||||
MessageFormat.format(
|
||||
requestURI,
|
||||
client.getAlfrescoUrl(),
|
||||
URLEncodedUtils.format(parameters, "UTF-8"));
|
||||
MessageFormat.format(
|
||||
requestURI,
|
||||
client.getAlfrescoUrl(),
|
||||
URLEncodedUtils.format(parameters, "UTF-8")
|
||||
);
|
||||
}
|
||||
LOGGER.info("On GET {}, received following response: ", requestURL);
|
||||
client.close();
|
||||
@@ -234,24 +278,33 @@ public abstract class BaseAPI {
|
||||
|
||||
/**
|
||||
* Helper method for GET requests
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param urlTemplate request URL template
|
||||
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
|
||||
*/
|
||||
protected JSONObject doGetRequest(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String urlTemplate,
|
||||
String... urlTemplateParams) {
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String urlTemplate,
|
||||
String... urlTemplateParams
|
||||
) {
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String requestUrl =
|
||||
MessageFormat.format(urlTemplate, client.getApiUrl(), urlTemplateParams);
|
||||
String requestUrl = MessageFormat.format(
|
||||
urlTemplate,
|
||||
client.getApiUrl(),
|
||||
urlTemplateParams
|
||||
);
|
||||
client.close();
|
||||
|
||||
try {
|
||||
return doRequest(HttpGet.class, requestUrl, adminUser, adminPassword, null);
|
||||
return doRequest(
|
||||
HttpGet.class,
|
||||
requestUrl,
|
||||
adminUser,
|
||||
adminPassword,
|
||||
null
|
||||
);
|
||||
} catch (InstantiationException | IllegalAccessException error) {
|
||||
throw new IllegalArgumentException("doGetRequest failed", error);
|
||||
}
|
||||
@@ -259,24 +312,33 @@ public abstract class BaseAPI {
|
||||
|
||||
/**
|
||||
* Helper method for Delete requests
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param urlTemplate request URL template
|
||||
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
|
||||
*/
|
||||
protected JSONObject doDeleteRequest(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String urlTemplate,
|
||||
String... urlTemplateParams) {
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String urlTemplate,
|
||||
String... urlTemplateParams
|
||||
) {
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String requestUrl =
|
||||
MessageFormat.format(urlTemplate, client.getApiUrl(), urlTemplateParams);
|
||||
String requestUrl = MessageFormat.format(
|
||||
urlTemplate,
|
||||
client.getApiUrl(),
|
||||
urlTemplateParams
|
||||
);
|
||||
client.close();
|
||||
|
||||
try {
|
||||
return doRequest(HttpDelete.class, requestUrl, adminUser, adminPassword, null);
|
||||
return doRequest(
|
||||
HttpDelete.class,
|
||||
requestUrl,
|
||||
adminUser,
|
||||
adminPassword,
|
||||
null
|
||||
);
|
||||
} catch (InstantiationException | IllegalAccessException error) {
|
||||
throw new IllegalArgumentException("doDeleteRequest failed", error);
|
||||
}
|
||||
@@ -284,7 +346,6 @@ public abstract class BaseAPI {
|
||||
|
||||
/**
|
||||
* Helper method for PUT requests
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param requestParams zero or more endpoint specific request parameters
|
||||
@@ -292,18 +353,28 @@ public abstract class BaseAPI {
|
||||
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
|
||||
*/
|
||||
protected JSONObject doPutRequest(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
JSONObject requestParams,
|
||||
String urlTemplate,
|
||||
String... urlTemplateParams) {
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
JSONObject requestParams,
|
||||
String urlTemplate,
|
||||
String... urlTemplateParams
|
||||
) {
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String requestUrl =
|
||||
MessageFormat.format(urlTemplate, client.getApiUrl(), urlTemplateParams);
|
||||
String requestUrl = MessageFormat.format(
|
||||
urlTemplate,
|
||||
client.getApiUrl(),
|
||||
urlTemplateParams
|
||||
);
|
||||
client.close();
|
||||
|
||||
try {
|
||||
return doRequest(HttpPut.class, requestUrl, adminUser, adminPassword, requestParams);
|
||||
return doRequest(
|
||||
HttpPut.class,
|
||||
requestUrl,
|
||||
adminUser,
|
||||
adminPassword,
|
||||
requestParams
|
||||
);
|
||||
} catch (InstantiationException | IllegalAccessException error) {
|
||||
throw new IllegalArgumentException("doPutRequest failed", error);
|
||||
}
|
||||
@@ -320,21 +391,23 @@ public abstract class BaseAPI {
|
||||
* @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) {
|
||||
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);
|
||||
adminUser,
|
||||
adminPassword,
|
||||
expectedStatusCode,
|
||||
client.getApiUrl(),
|
||||
requestParams,
|
||||
urlTemplate,
|
||||
urlTemplateParams
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -350,22 +423,32 @@ public abstract class BaseAPI {
|
||||
* @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);
|
||||
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);
|
||||
HttpResponse httpResponse = doRequestJson(
|
||||
HttpPut.class,
|
||||
requestUrl,
|
||||
adminUser,
|
||||
adminPassword,
|
||||
requestParams
|
||||
);
|
||||
assertEquals(
|
||||
"PUT request to " + requestUrl + " was not successful.",
|
||||
expectedStatusCode,
|
||||
httpResponse.getStatusLine().getStatusCode());
|
||||
"PUT request to " + requestUrl + " was not successful.",
|
||||
expectedStatusCode,
|
||||
httpResponse.getStatusLine().getStatusCode()
|
||||
);
|
||||
return httpResponse;
|
||||
} catch (InstantiationException | IllegalAccessException error) {
|
||||
throw new IllegalArgumentException("doPutRequest failed", error);
|
||||
@@ -381,17 +464,23 @@ public abstract class BaseAPI {
|
||||
* @return The resultant URL.
|
||||
*/
|
||||
private String formatRequestUrl(
|
||||
String urlStart, String urlTemplate, String[] urlTemplateParams) {
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for POST requests
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param requestParams zero or more endpoint specific request parameters
|
||||
@@ -399,18 +488,28 @@ public abstract class BaseAPI {
|
||||
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
|
||||
*/
|
||||
protected JSONObject doPostRequest(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
JSONObject requestParams,
|
||||
String urlTemplate,
|
||||
String... urlTemplateParams) {
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
JSONObject requestParams,
|
||||
String urlTemplate,
|
||||
String... urlTemplateParams
|
||||
) {
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String requestUrl =
|
||||
MessageFormat.format(urlTemplate, client.getApiUrl(), urlTemplateParams);
|
||||
String requestUrl = MessageFormat.format(
|
||||
urlTemplate,
|
||||
client.getApiUrl(),
|
||||
urlTemplateParams
|
||||
);
|
||||
client.close();
|
||||
|
||||
try {
|
||||
return doRequest(HttpPost.class, requestUrl, adminUser, adminPassword, requestParams);
|
||||
return doRequest(
|
||||
HttpPost.class,
|
||||
requestUrl,
|
||||
adminUser,
|
||||
adminPassword,
|
||||
requestParams
|
||||
);
|
||||
} catch (InstantiationException | IllegalAccessException error) {
|
||||
throw new IllegalArgumentException("doPostRequest failed", error);
|
||||
}
|
||||
@@ -427,21 +526,23 @@ public abstract class BaseAPI {
|
||||
* @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) {
|
||||
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);
|
||||
adminUser,
|
||||
adminPassword,
|
||||
expectedStatusCode,
|
||||
client.getApiUrl(),
|
||||
requestParams,
|
||||
urlTemplate,
|
||||
urlTemplateParams
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -455,21 +556,23 @@ public abstract class BaseAPI {
|
||||
* @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) {
|
||||
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);
|
||||
adminUser,
|
||||
adminPassword,
|
||||
expectedStatusCode,
|
||||
client.getAlfrescoUrl() + SLINGSHOT_PREFIX,
|
||||
requestParams,
|
||||
urlTemplate,
|
||||
urlTemplateParams
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -485,23 +588,29 @@ public abstract class BaseAPI {
|
||||
* @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) {
|
||||
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);
|
||||
HttpResponse httpResponse = doRequestJson(
|
||||
HttpPost.class,
|
||||
requestUrl,
|
||||
adminUser,
|
||||
adminPassword,
|
||||
requestParams
|
||||
);
|
||||
assertEquals(
|
||||
"POST request to " + requestUrl + " was not successful.",
|
||||
expectedStatusCode,
|
||||
httpResponse.getStatusLine().getStatusCode());
|
||||
"POST request to " + requestUrl + " was not successful.",
|
||||
expectedStatusCode,
|
||||
httpResponse.getStatusLine().getStatusCode()
|
||||
);
|
||||
return httpResponse;
|
||||
} catch (InstantiationException | IllegalAccessException error) {
|
||||
throw new IllegalArgumentException("doPostRequest failed", error);
|
||||
@@ -510,7 +619,6 @@ public abstract class BaseAPI {
|
||||
|
||||
/**
|
||||
* Helper method for handling generic HTTP requests
|
||||
*
|
||||
* @param requestType request type (a subclass of {@link HttpRequestBase})
|
||||
* @param requestUrl URL the request is to be sent to
|
||||
* @param adminUser user with administrative privileges
|
||||
@@ -521,12 +629,12 @@ public abstract class BaseAPI {
|
||||
* @throws InstantiationException for invalid <i>requestType</i>
|
||||
*/
|
||||
private <T extends HttpRequestBase> JSONObject doRequest(
|
||||
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();
|
||||
|
||||
@@ -536,20 +644,36 @@ public abstract class BaseAPI {
|
||||
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()));
|
||||
responseBody =
|
||||
new JSONObject(EntityUtils.toString(response.getEntity()));
|
||||
} catch (JSONException error) {
|
||||
LOGGER.error(
|
||||
"Converting message body to JSON failed. Body: {}", responseBody, error);
|
||||
"Converting message body to JSON failed. Body: {}",
|
||||
responseBody,
|
||||
error
|
||||
);
|
||||
} catch (ParseException | IOException error) {
|
||||
LOGGER.error("Parsing message body failed.", error);
|
||||
}
|
||||
@@ -562,27 +686,34 @@ public abstract class BaseAPI {
|
||||
returnValues = responseBody;
|
||||
}
|
||||
break;
|
||||
|
||||
case HttpStatus.SC_INTERNAL_SERVER_ERROR:
|
||||
if (responseBody != null && responseBody.has(EXCEPTION_KEY)) {
|
||||
if (
|
||||
responseBody != null && responseBody.has(EXCEPTION_KEY)
|
||||
) {
|
||||
LOGGER.error(
|
||||
"Request failed with error message: {}",
|
||||
responseBody.getString(MESSAGE_KEY));
|
||||
"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());
|
||||
"Request returned unexpected HTTP status {}",
|
||||
response.getStatusLine().getStatusCode()
|
||||
);
|
||||
break;
|
||||
}
|
||||
} catch (JSONException error) {
|
||||
@@ -600,12 +731,12 @@ 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();
|
||||
|
||||
@@ -613,14 +744,26 @@ public abstract class BaseAPI {
|
||||
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) {
|
||||
@@ -635,7 +778,10 @@ public abstract class BaseAPI {
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Used to set RM items properties including records, categories and folders */
|
||||
/**
|
||||
* Used to set RM items properties
|
||||
* including records, categories and folders
|
||||
*/
|
||||
public enum RMProperty {
|
||||
NAME,
|
||||
TITLE,
|
||||
@@ -650,7 +796,7 @@ public abstract class BaseAPI {
|
||||
FILE,
|
||||
ORIGINATOR,
|
||||
ORIGINATING_ORGANIZATION,
|
||||
PUBLICATION_DATE
|
||||
PUBLICATION_DATE,
|
||||
}
|
||||
|
||||
public enum RETENTION_SCHEDULE {
|
||||
@@ -664,10 +810,12 @@ 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 */
|
||||
/**
|
||||
* Used to execute rm actions on a node
|
||||
*/
|
||||
public enum RM_ACTIONS {
|
||||
EDIT_DISPOSITION_DATE("editDispositionActionAsOfDate"),
|
||||
END_RETENTION("retain"),
|
||||
@@ -677,6 +825,7 @@ public abstract class BaseAPI {
|
||||
COMPLETE_EVENT("completeEvent"),
|
||||
UNDO_EVENT("undoEvent"),
|
||||
DESTROY("destroy");
|
||||
|
||||
String action;
|
||||
|
||||
private RM_ACTIONS(String action) {
|
||||
@@ -699,11 +848,13 @@ public abstract class BaseAPI {
|
||||
* Util to return the property value from a map
|
||||
*
|
||||
* @param properties the map containing properties
|
||||
* @param property to get value for
|
||||
* @param property to get value for
|
||||
* @return the property value
|
||||
*/
|
||||
public <K extends Enum<?>> String getPropertyValue(
|
||||
Map<K, String> properties, Enum<?> property) {
|
||||
Map<K, String> properties,
|
||||
Enum<?> property
|
||||
) {
|
||||
String value = properties.get(property);
|
||||
if (value == null) {
|
||||
return "";
|
||||
@@ -714,19 +865,18 @@ public abstract class BaseAPI {
|
||||
/**
|
||||
* Retrieves the property value and decides if that gets to be added to the request
|
||||
*
|
||||
* @param requestParams the request parameters
|
||||
* @param requestParams the request parameters
|
||||
* @param propertyRequestValue the property name in the request, eg. "prop_cm_name"
|
||||
* @param itemProperties map of item's properties values
|
||||
* @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
|
||||
* @param itemProperties map of item's properties values
|
||||
* @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 {
|
||||
JSONObject requestParams,
|
||||
String propertyRequestValue,
|
||||
Map<K, String> itemProperties,
|
||||
Enum<?> property
|
||||
) throws JSONException {
|
||||
String propertyValue = getPropertyValue(itemProperties, property);
|
||||
|
||||
if (!propertyValue.equals("")) {
|
||||
@@ -740,17 +890,28 @@ public abstract class BaseAPI {
|
||||
*
|
||||
* @param username the username with whom the delete is performed
|
||||
* @param password the user's password
|
||||
* @param itemPath the path to the item eg. in case of a category it would be the "/" + category
|
||||
* name, in case of a folder or subCategory it would be /categoryName/folderName or
|
||||
* /categoryName/subCategoryName/ in case of a record /categoryName/folderName/recordName
|
||||
* @param itemPath the path to the item eg. in case of a category it would be the "/" + category name,
|
||||
* in case of a folder or subCategory it would be /categoryName/folderName or /categoryName/subCategoryName/
|
||||
* 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);
|
||||
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)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,12 +28,15 @@ package org.alfresco.rest.core.v0;
|
||||
|
||||
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) {
|
||||
|
||||
@@ -28,16 +28,13 @@ package org.alfresco.rest.rm.community.model.audit;
|
||||
|
||||
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.NoArgsConstructor;
|
||||
|
||||
import org.alfresco.utility.model.TestModel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for audit entry
|
||||
*
|
||||
@@ -50,6 +47,7 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class AuditEntry extends TestModel {
|
||||
|
||||
@JsonProperty(required = true)
|
||||
private String nodeName;
|
||||
|
||||
@@ -68,7 +66,8 @@ public class AuditEntry extends TestModel {
|
||||
@JsonProperty(required = true)
|
||||
private String fullName;
|
||||
|
||||
@JsonProperty private String createPerson;
|
||||
@JsonProperty
|
||||
private String createPerson;
|
||||
|
||||
@JsonProperty(required = true)
|
||||
private String userName;
|
||||
|
||||
@@ -29,8 +29,9 @@ package org.alfresco.rest.rm.community.model.audit;
|
||||
/**
|
||||
* Enumerates the list of events audited
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @author Rodica Sutu
|
||||
* @since 2.7
|
||||
*
|
||||
*/
|
||||
public enum AuditEvents {
|
||||
CREATE_PERSON("Create Person", "Create User"),
|
||||
|
||||
@@ -27,14 +27,12 @@
|
||||
package org.alfresco.rest.rm.community.model.common;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for id/name pair
|
||||
*
|
||||
@@ -46,6 +44,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class IdNamePair {
|
||||
|
||||
@JsonProperty(required = true)
|
||||
private String id;
|
||||
|
||||
|
||||
@@ -27,11 +27,9 @@
|
||||
package org.alfresco.rest.rm.community.model.common;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import org.alfresco.utility.model.TestModel;
|
||||
|
||||
/**
|
||||
@@ -43,7 +41,7 @@ import org.alfresco.utility.model.TestModel;
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
// @NoArgsConstructor
|
||||
// @AllArgsConstructor
|
||||
//@NoArgsConstructor
|
||||
//@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class Owner extends TestModel {}
|
||||
|
||||
@@ -27,17 +27,14 @@
|
||||
package org.alfresco.rest.rm.community.model.common;
|
||||
|
||||
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.utility.model.TestModel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for path parameter
|
||||
*
|
||||
@@ -50,6 +47,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Path extends TestModel {
|
||||
|
||||
@JsonProperty(required = true)
|
||||
private String name;
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -44,6 +43,7 @@ import lombok.NoArgsConstructor;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ReviewPeriod {
|
||||
|
||||
@JsonProperty(required = true)
|
||||
private String periodType;
|
||||
|
||||
|
||||
@@ -37,10 +37,15 @@ public enum CustomDefinitions {
|
||||
MESSAGE("Message"),
|
||||
NEXT_VERSION("Next Version"),
|
||||
RENDITION("Rendition");
|
||||
/** The name of custom reference. */
|
||||
|
||||
/**
|
||||
* The name of custom reference.
|
||||
*/
|
||||
private String definition;
|
||||
|
||||
/** Private constructor. */
|
||||
/**
|
||||
* Private constructor.
|
||||
*/
|
||||
CustomDefinitions(String definition) {
|
||||
this.definition = definition;
|
||||
}
|
||||
|
||||
@@ -27,19 +27,16 @@
|
||||
package org.alfresco.rest.rm.community.model.fileplan;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for file plan
|
||||
*
|
||||
@@ -53,6 +50,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FilePlan extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -90,7 +88,9 @@ public class FilePlan extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty private Path path;
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
||||
|
||||
@@ -34,13 +34,11 @@ 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 lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import org.alfresco.utility.model.TestModel;
|
||||
|
||||
/**
|
||||
@@ -55,6 +53,7 @@ import org.alfresco.utility.model.TestModel;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FilePlanProperties extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
|
||||
@@ -33,6 +33,7 @@ package org.alfresco.rest.rm.community.model.fileplancomponents;
|
||||
* @since 2.6
|
||||
*/
|
||||
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-";
|
||||
|
||||
@@ -33,6 +33,7 @@ package org.alfresco.rest.rm.community.model.fileplancomponents;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class FilePlanComponentAspects {
|
||||
|
||||
/** Private constructor to prevent instantiation. */
|
||||
private FilePlanComponentAspects() {}
|
||||
|
||||
@@ -40,7 +41,8 @@ public class FilePlanComponentAspects {
|
||||
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";
|
||||
public static final String ASPECTS_VITAL_RECORD_DEFINITION =
|
||||
"rma:vitalRecordDefinition";
|
||||
|
||||
// aspect present on vital records
|
||||
public static final String ASPECTS_VITAL_RECORD = "rma:vitalRecord";
|
||||
|
||||
@@ -33,126 +33,129 @@ package org.alfresco.rest.rm.community.model.fileplancomponents;
|
||||
* @since 2.6
|
||||
*/
|
||||
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";
|
||||
|
||||
/** Common properties for record categories, record folders and records */
|
||||
// Non-electronic record properties
|
||||
public static final String PROPERTIES_TITLE = "cm:title";
|
||||
|
||||
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";
|
||||
|
||||
/** Common properties for record categories and record folders **/
|
||||
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";
|
||||
|
||||
/** Common properties for record folders and records */
|
||||
public static final String PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE =
|
||||
"rma:recordSearchHasDispositionSchedule";
|
||||
|
||||
"rma:recordSearchHasDispositionSchedule";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION =
|
||||
"rma:recordSearchDispositionPeriodExpression";
|
||||
"rma:recordSearchDispositionPeriodExpression";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY =
|
||||
"rma:recordSearchDispositionAuthority";
|
||||
"rma:recordSearchDispositionAuthority";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF =
|
||||
"rma:recordSearchDispositionActionAsOf";
|
||||
"rma:recordSearchDispositionActionAsOf";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD =
|
||||
"rma:recordSearchDispositionPeriod";
|
||||
"rma:recordSearchDispositionPeriod";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME =
|
||||
"rma:recordSearchDispositionActionName";
|
||||
"rma:recordSearchDispositionActionName";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE =
|
||||
"rma:recordSearchDispositionEventsEligible";
|
||||
"rma:recordSearchDispositionEventsEligible";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS =
|
||||
"rma:recordSearchDispositionInstructions";
|
||||
"rma:recordSearchDispositionInstructions";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS =
|
||||
"rma:recordSearchDispositionEvents";
|
||||
"rma:recordSearchDispositionEvents";
|
||||
public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_BY =
|
||||
"rma:declassificationReviewCompletedBy";
|
||||
"rma:declassificationReviewCompletedBy";
|
||||
public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_AT =
|
||||
"rma:declassificationReviewCompletedAt";
|
||||
"rma:declassificationReviewCompletedAt";
|
||||
|
||||
/** File plan properties */
|
||||
public static final String PROPERTIES_COMPONENT_ID = "st:componentId";
|
||||
|
||||
public static final String PROPERTIES_COUNT = "rma:count";
|
||||
|
||||
/** Record category properties */
|
||||
// All fields are shared with record folders
|
||||
|
||||
/** 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_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_LOCATION = "rma:location";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD =
|
||||
"rma:recordSearchVitalRecordReviewPeriod";
|
||||
"rma:recordSearchVitalRecordReviewPeriod";
|
||||
public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION =
|
||||
"rma:recordSearchVitalRecordReviewPeriodExpression";
|
||||
"rma:recordSearchVitalRecordReviewPeriodExpression";
|
||||
|
||||
/** Record properties */
|
||||
/**
|
||||
* Record properties
|
||||
*/
|
||||
public static final String PROPERTIES_CLASSIFICATION = "sc:classification";
|
||||
|
||||
public static final String PROPERTIES_DATE_FILED = "rma:dateFiled";
|
||||
public static final String PROPERTIES_ORIGINAL_NAME = "rma:origionalName";
|
||||
public static final String PROPERTIES_REVIEW_AS_OF = "rma:reviewAsOf";
|
||||
|
||||
/** 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";
|
||||
"rma:recordOriginatingLocation";
|
||||
public static final String PROPERTIES_RECORD_ORIGINATING_USER_ID =
|
||||
"rma:recordOriginatingUserId";
|
||||
"rma:recordOriginatingUserId";
|
||||
public static final String PROPERTIES_RECORD_ORIGINATING_CREATION_DATE =
|
||||
"rma:recordOriginatingCreationDate";
|
||||
"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";
|
||||
|
||||
public static final String INCLUDE = "include";
|
||||
|
||||
/** Include options */
|
||||
public static final String ALLOWABLE_OPERATIONS = "allowableOperations";
|
||||
|
||||
public static final String IS_CLOSED = "isClosed";
|
||||
public static final String IS_COMPLETED = "isCompleted";
|
||||
public static final String CONTENT = "content";
|
||||
@@ -160,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";
|
||||
}
|
||||
|
||||
@@ -33,15 +33,20 @@ package org.alfresco.rest.rm.community.model.fileplancomponents;
|
||||
* @since 2.6
|
||||
*/
|
||||
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";
|
||||
}
|
||||
|
||||
@@ -28,12 +28,10 @@ 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;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import org.alfresco.utility.model.TestModel;
|
||||
|
||||
/**
|
||||
@@ -48,6 +46,7 @@ import org.alfresco.utility.model.TestModel;
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class HoldEntry extends TestModel {
|
||||
|
||||
@JsonProperty(required = true)
|
||||
private String name;
|
||||
|
||||
|
||||
@@ -27,13 +27,12 @@
|
||||
package org.alfresco.rest.rm.community.model.record;
|
||||
|
||||
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;
|
||||
@@ -41,8 +40,6 @@ import org.alfresco.rest.model.RestNodeModel;
|
||||
import org.alfresco.rest.rm.community.model.common.Path;
|
||||
import org.alfresco.utility.model.TestModel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for record
|
||||
*
|
||||
@@ -55,6 +52,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Record extends TestModel implements IRestModel<RestNodeModel> {
|
||||
|
||||
public static final String CONTENT_NODE_TYPE = "cm:content";
|
||||
|
||||
/*************************/
|
||||
@@ -87,17 +85,23 @@ public class Record extends TestModel implements IRestModel<RestNodeModel> {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private RecordContent content;
|
||||
@JsonProperty
|
||||
private RecordContent content;
|
||||
|
||||
@JsonProperty private Boolean isCompleted;
|
||||
@JsonProperty
|
||||
private Boolean isCompleted;
|
||||
|
||||
@JsonProperty private RecordProperties properties;
|
||||
@JsonProperty
|
||||
private RecordProperties properties;
|
||||
|
||||
@JsonProperty private List<String> aspectNames;
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty private Path path;
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
|
||||
@Override
|
||||
public ModelAssertion<RestNodeModel> assertThat() {
|
||||
|
||||
@@ -27,13 +27,11 @@
|
||||
package org.alfresco.rest.rm.community.model.record;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
@@ -48,5 +46,7 @@ import org.alfresco.utility.model.TestModel;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordBodyFile extends TestModel {
|
||||
@JsonProperty private String targetParentId;
|
||||
|
||||
@JsonProperty
|
||||
private String targetParentId;
|
||||
}
|
||||
|
||||
@@ -27,13 +27,11 @@
|
||||
package org.alfresco.rest.rm.community.model.record;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
@@ -49,6 +47,7 @@ import org.alfresco.utility.model.TestModel;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordContent extends TestModel {
|
||||
|
||||
@JsonProperty(required = true)
|
||||
private String mimeType;
|
||||
|
||||
|
||||
@@ -81,19 +81,16 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
|
||||
|
||||
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;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import org.alfresco.rest.rm.community.model.common.Owner;
|
||||
import org.alfresco.utility.model.TestModel;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for record properties
|
||||
*
|
||||
@@ -107,6 +104,7 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class RecordProperties extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -119,7 +117,10 @@ public class RecordProperties extends TestModel {
|
||||
@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)
|
||||
@@ -257,7 +258,9 @@ public class RecordProperties extends TestModel {
|
||||
@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)
|
||||
|
||||
@@ -27,19 +27,16 @@
|
||||
package org.alfresco.rest.rm.community.model.recordcategory;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for record category
|
||||
*
|
||||
@@ -52,6 +49,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordCategory extends TestModel {
|
||||
|
||||
public static final String DEFAULT_FILE_PLAN_ALIAS = "-filePlan-";
|
||||
|
||||
/*************************/
|
||||
@@ -91,9 +89,12 @@ public class RecordCategory extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private Boolean hasRetentionSchedule;
|
||||
@JsonProperty
|
||||
private Boolean hasRetentionSchedule;
|
||||
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty private Path path;
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
||||
|
||||
@@ -27,19 +27,16 @@
|
||||
package org.alfresco.rest.rm.community.model.recordcategory;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for record category child
|
||||
*
|
||||
@@ -52,6 +49,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordCategoryChild extends TestModel {
|
||||
|
||||
public static final String RECORD_FOLDER_NODE_TYPE = "rma:recordFolder";
|
||||
|
||||
/*************************/
|
||||
@@ -84,21 +82,30 @@ public class RecordCategoryChild extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private Boolean isRecordCategory;
|
||||
@JsonProperty
|
||||
private Boolean isRecordCategory;
|
||||
|
||||
@JsonProperty private Boolean isRecordFolder;
|
||||
@JsonProperty
|
||||
private Boolean isRecordFolder;
|
||||
|
||||
@JsonProperty private RecordCategoryChildProperties properties;
|
||||
@JsonProperty
|
||||
private RecordCategoryChildProperties properties;
|
||||
|
||||
@JsonProperty private List<String> aspectNames;
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty private Boolean hasRetentionSchedule;
|
||||
@JsonProperty
|
||||
private Boolean hasRetentionSchedule;
|
||||
|
||||
@JsonProperty private Boolean isClosed;
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty private Path path;
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
|
||||
@JsonProperty private String relativePath;
|
||||
@JsonProperty
|
||||
private String relativePath;
|
||||
}
|
||||
|
||||
@@ -36,4 +36,4 @@ import org.alfresco.rest.core.RestModels;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordCategoryChildCollection
|
||||
extends RestModels<RecordCategoryChildEntry, RecordCategoryChildCollection> {}
|
||||
extends RestModels<RecordCategoryChildEntry, RecordCategoryChildCollection> {}
|
||||
|
||||
@@ -27,10 +27,8 @@
|
||||
package org.alfresco.rest.rm.community.model.recordcategory;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
@@ -41,6 +39,9 @@ import org.alfresco.rest.core.RestModels;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class RecordCategoryChildEntry extends RestModels<RecordCategory, RecordCategoryChildEntry> {
|
||||
@JsonProperty private RecordCategoryChild entry;
|
||||
public class RecordCategoryChildEntry
|
||||
extends RestModels<RecordCategory, RecordCategoryChildEntry> {
|
||||
|
||||
@JsonProperty
|
||||
private RecordCategoryChild entry;
|
||||
}
|
||||
|
||||
@@ -48,21 +48,18 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for record category child properties
|
||||
*
|
||||
@@ -75,6 +72,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordCategoryChildProperties extends TestModel {
|
||||
|
||||
/**************************************************************************/
|
||||
/** Mandatory parameters - Shared by record categories and record folders */
|
||||
/**************************************************************************/
|
||||
|
||||
@@ -36,4 +36,4 @@ import org.alfresco.rest.core.RestModels;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordCategoryCollection
|
||||
extends RestModels<RecordCategoryEntry, RecordCategoryCollection> {}
|
||||
extends RestModels<RecordCategoryEntry, RecordCategoryCollection> {}
|
||||
|
||||
@@ -27,10 +27,8 @@
|
||||
package org.alfresco.rest.rm.community.model.recordcategory;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
import org.alfresco.rest.rm.community.model.fileplan.FilePlan;
|
||||
|
||||
@@ -43,6 +41,9 @@ import org.alfresco.rest.rm.community.model.fileplan.FilePlan;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class RecordCategoryEntry extends RestModels<FilePlan, RecordCategoryEntry> {
|
||||
@JsonProperty private RecordCategory entry;
|
||||
public class RecordCategoryEntry
|
||||
extends RestModels<FilePlan, RecordCategoryEntry> {
|
||||
|
||||
@JsonProperty
|
||||
private RecordCategory entry;
|
||||
}
|
||||
|
||||
@@ -38,20 +38,17 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for record category properties
|
||||
*
|
||||
@@ -65,6 +62,7 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class RecordCategoryProperties extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
|
||||
@@ -26,7 +26,9 @@
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.recordcategory;
|
||||
|
||||
/** The property of the dispositioned item that is used to calculate the "as of" period. */
|
||||
/**
|
||||
* The property of the dispositioned item that is used to calculate the "as of" period.
|
||||
*/
|
||||
public enum RetentionPeriodProperty {
|
||||
/** Item created date. */
|
||||
CREATED_DATE("cm:created"),
|
||||
|
||||
@@ -27,19 +27,16 @@
|
||||
package org.alfresco.rest.rm.community.model.recordfolder;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for record folder
|
||||
*
|
||||
@@ -52,6 +49,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordFolder extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -88,9 +86,12 @@ public class RecordFolder extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private Boolean isClosed;
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty private Path path;
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
||||
|
||||
@@ -35,4 +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> {}
|
||||
|
||||
@@ -27,13 +27,11 @@
|
||||
package org.alfresco.rest.rm.community.model.recordfolder;
|
||||
|
||||
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.record.Record;
|
||||
|
||||
@@ -48,6 +46,9 @@ import org.alfresco.rest.rm.community.model.record.Record;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordFolderEntry extends RestModels<RecordFolder, RecordFolderEntry> {
|
||||
@JsonProperty private Record entry;
|
||||
public class RecordFolderEntry
|
||||
extends RestModels<RecordFolder, RecordFolderEntry> {
|
||||
|
||||
@JsonProperty
|
||||
private Record entry;
|
||||
}
|
||||
|
||||
@@ -46,20 +46,17 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for record folder properties
|
||||
*
|
||||
@@ -73,6 +70,7 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class RecordFolderProperties extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -119,7 +117,9 @@ public class RecordFolderProperties extends TestModel {
|
||||
@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)
|
||||
|
||||
@@ -26,7 +26,9 @@
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.rules;
|
||||
|
||||
/** Action values. */
|
||||
/**
|
||||
* Action values.
|
||||
*/
|
||||
public enum ActionsOnRule {
|
||||
COMPLETE_RECORD("declareRecord"),
|
||||
REOPEN_RECORD("undeclareRecord"),
|
||||
|
||||
@@ -26,11 +26,14 @@
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.rules;
|
||||
|
||||
/** enum used to find the when condition names options by their value */
|
||||
/**
|
||||
* enum used to find the when condition names options by their value
|
||||
*/
|
||||
public enum ConditionsOnRule {
|
||||
UPDATE("update"),
|
||||
ADDED("inbound"),
|
||||
REMOVED("outbound");
|
||||
|
||||
private String whenConditionValue;
|
||||
|
||||
ConditionsOnRule(String value) {
|
||||
|
||||
@@ -28,8 +28,11 @@ package org.alfresco.rest.rm.community.model.rules;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** A class describing the rule */
|
||||
/**
|
||||
* A class describing the rule
|
||||
*/
|
||||
public class RuleDefinition {
|
||||
|
||||
private String id = "";
|
||||
private String title;
|
||||
private String description = "";
|
||||
|
||||
@@ -27,13 +27,11 @@
|
||||
package org.alfresco.rest.rm.community.model.site;
|
||||
|
||||
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.model.RestSiteModel;
|
||||
|
||||
/**
|
||||
@@ -47,12 +45,17 @@ import org.alfresco.rest.model.RestSiteModel;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
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;
|
||||
|
||||
@@ -34,5 +34,5 @@ package org.alfresco.rest.rm.community.model.site;
|
||||
*/
|
||||
public enum RMSiteCompliance {
|
||||
STANDARD,
|
||||
DOD5015
|
||||
DOD5015,
|
||||
}
|
||||
|
||||
@@ -27,16 +27,22 @@
|
||||
package org.alfresco.rest.rm.community.model.site;
|
||||
|
||||
/**
|
||||
* RM Site properties from the RM Model Schema "entry": { "id": "string", "guid": "string", "title":
|
||||
* "string", "description": "string", "visibility": "{@link
|
||||
* org.springframework.social.alfresco.api.entities.Site.Visibility}", "compliance": "{@link
|
||||
* RMSiteCompliance}", "role": "{@link org.alfresco.utility.constants.UserRole}" }
|
||||
*
|
||||
*RM Site properties from the RM Model Schema
|
||||
*"entry": {
|
||||
* "id": "string",
|
||||
* "guid": "string",
|
||||
* "title": "string",
|
||||
* "description": "string",
|
||||
* "visibility": "{@link org.springframework.social.alfresco.api.entities.Site.Visibility}",
|
||||
* "compliance": "{@link RMSiteCompliance}",
|
||||
* "role": "{@link org.alfresco.utility.constants.UserRole}"
|
||||
*}
|
||||
* @author Tuna Aksoy
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RMSiteFields {
|
||||
|
||||
public static final String ID = "id";
|
||||
public static final String COMPLIANCE = "compliance";
|
||||
public static final String TITLE = "title";
|
||||
|
||||
@@ -28,18 +28,15 @@
|
||||
package org.alfresco.rest.rm.community.model.transfer;
|
||||
|
||||
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.utility.model.TestModel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for Transfer
|
||||
*
|
||||
@@ -52,6 +49,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Transfer extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -82,5 +80,6 @@ public class Transfer extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
}
|
||||
|
||||
@@ -28,19 +28,16 @@
|
||||
package org.alfresco.rest.rm.community.model.transfer;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for transfer child
|
||||
*
|
||||
@@ -53,6 +50,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferChild extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -83,19 +81,27 @@ public class TransferChild extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private TransferChildProperties properties;
|
||||
@JsonProperty
|
||||
private TransferChildProperties properties;
|
||||
|
||||
@JsonProperty private Boolean isRecord;
|
||||
@JsonProperty
|
||||
private Boolean isRecord;
|
||||
|
||||
@JsonProperty private Boolean isRecordFolder;
|
||||
@JsonProperty
|
||||
private Boolean isRecordFolder;
|
||||
|
||||
@JsonProperty private List<String> aspectNames;
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty private Boolean isCompleted;
|
||||
@JsonProperty
|
||||
private Boolean isCompleted;
|
||||
|
||||
@JsonProperty private Boolean isClosed;
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty private Path path;
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
||||
|
||||
@@ -31,9 +31,8 @@ import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
* Handle collection of {@link TransferChildEntry}
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
public class TransferChildCollection
|
||||
extends RestModels<TransferChildEntry, TransferChildCollection> {}
|
||||
extends RestModels<TransferChildEntry, TransferChildCollection> {}
|
||||
|
||||
@@ -28,13 +28,11 @@
|
||||
package org.alfresco.rest.rm.community.model.transfer;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
@@ -48,6 +46,9 @@ import org.alfresco.rest.core.RestModels;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferChildEntry extends RestModels<Transfer, TransferChildEntry> {
|
||||
@JsonProperty private TransferChild entry;
|
||||
public class TransferChildEntry
|
||||
extends RestModels<Transfer, TransferChildEntry> {
|
||||
|
||||
@JsonProperty
|
||||
private TransferChild entry;
|
||||
}
|
||||
|
||||
@@ -66,13 +66,11 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
|
||||
|
||||
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;
|
||||
@@ -90,8 +88,9 @@ import org.alfresco.utility.model.TestModel;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferChildProperties extends TestModel {
|
||||
|
||||
/**************************************************************************/
|
||||
/** Mandatory parameters - Shared by record folders and records */
|
||||
/** Mandatory parameters - Shared by record folders and records*/
|
||||
/**************************************************************************/
|
||||
@JsonProperty(PROPERTIES_TITLE)
|
||||
private String title;
|
||||
|
||||
@@ -31,8 +31,8 @@ import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
* Handle collection of {@link TransferEntry}
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
public class TransferCollection extends RestModels<TransferEntry, TransferCollection> {}
|
||||
public class TransferCollection
|
||||
extends RestModels<TransferEntry, TransferCollection> {}
|
||||
|
||||
@@ -28,13 +28,11 @@
|
||||
package org.alfresco.rest.rm.community.model.transfer;
|
||||
|
||||
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;
|
||||
|
||||
@@ -49,6 +47,9 @@ import org.alfresco.rest.rm.community.model.transfercontainer.TransferContainer;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferEntry extends RestModels<TransferContainer, TransferEntry> {
|
||||
@JsonProperty private Transfer entry;
|
||||
public class TransferEntry
|
||||
extends RestModels<TransferContainer, TransferEntry> {
|
||||
|
||||
@JsonProperty
|
||||
private Transfer entry;
|
||||
}
|
||||
|
||||
@@ -35,13 +35,11 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TRANSFER_LOCATION;
|
||||
|
||||
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;
|
||||
|
||||
@@ -57,6 +55,7 @@ import org.alfresco.utility.model.TestModel;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferProperties extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
|
||||
@@ -28,18 +28,15 @@
|
||||
package org.alfresco.rest.rm.community.model.transfercontainer;
|
||||
|
||||
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.utility.model.TestModel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for Transfer Container
|
||||
*
|
||||
@@ -52,6 +49,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferContainer extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -88,5 +86,6 @@ public class TransferContainer extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
}
|
||||
|
||||
@@ -32,13 +32,11 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
@@ -53,6 +51,7 @@ import org.alfresco.utility.model.TestModel;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferContainerProperties extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
|
||||
@@ -27,19 +27,16 @@
|
||||
package org.alfresco.rest.rm.community.model.unfiledcontainer;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for unfiled container
|
||||
*
|
||||
@@ -52,6 +49,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class UnfiledContainer extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -88,7 +86,9 @@ public class UnfiledContainer extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty private Path path;
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
||||
|
||||
@@ -28,20 +28,17 @@ package org.alfresco.rest.rm.community.model.unfiledcontainer;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for record category child
|
||||
*
|
||||
@@ -55,6 +52,7 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class UnfiledContainerChild extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -91,19 +89,27 @@ public class UnfiledContainerChild extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private UnfiledContainerChildProperties properties;
|
||||
@JsonProperty
|
||||
private UnfiledContainerChildProperties properties;
|
||||
|
||||
@JsonProperty private List<String> aspectNames;
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty private Boolean isClosed;
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty private Path path;
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
|
||||
@JsonProperty private String relativePath;
|
||||
@JsonProperty
|
||||
private String relativePath;
|
||||
|
||||
@JsonProperty private RecordContent content;
|
||||
@JsonProperty
|
||||
private RecordContent content;
|
||||
|
||||
@JsonProperty private Boolean isCompleted;
|
||||
@JsonProperty
|
||||
private Boolean isCompleted;
|
||||
}
|
||||
|
||||
@@ -36,4 +36,4 @@ import org.alfresco.rest.core.RestModels;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class UnfiledContainerChildCollection
|
||||
extends RestModels<UnfiledContainerChildEntry, UnfiledContainerChildCollection> {}
|
||||
extends RestModels<UnfiledContainerChildEntry, UnfiledContainerChildCollection> {}
|
||||
|
||||
@@ -27,10 +27,8 @@
|
||||
package org.alfresco.rest.rm.community.model.unfiledcontainer;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
@@ -42,6 +40,8 @@ import org.alfresco.rest.core.RestModels;
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class UnfiledContainerChildEntry
|
||||
extends RestModels<UnfiledContainer, UnfiledContainerChildEntry> {
|
||||
@JsonProperty private UnfiledContainerChild entry;
|
||||
extends RestModels<UnfiledContainer, UnfiledContainerChildEntry> {
|
||||
|
||||
@JsonProperty
|
||||
private UnfiledContainerChild entry;
|
||||
}
|
||||
|
||||
@@ -61,13 +61,11 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
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;
|
||||
|
||||
@@ -85,6 +83,7 @@ import org.alfresco.utility.model.TestModel;
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class UnfiledContainerChildProperties extends TestModel {
|
||||
|
||||
/**************************************************************************/
|
||||
/** Mandatory parameters - Shared by unfiled record folder and records */
|
||||
/**************************************************************************/
|
||||
|
||||
@@ -31,13 +31,11 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
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;
|
||||
|
||||
/**
|
||||
@@ -53,6 +51,7 @@ import org.alfresco.utility.model.TestModel;
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class UnfiledContainerProperties extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
|
||||
@@ -27,20 +27,17 @@
|
||||
package org.alfresco.rest.rm.community.model.unfiledcontainer;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* POJO for unfiled container
|
||||
*
|
||||
@@ -53,6 +50,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class UnfiledRecordFolder extends TestModel {
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@@ -83,21 +81,30 @@ public class UnfiledRecordFolder extends TestModel {
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty private UnfiledContainerChildProperties properties;
|
||||
@JsonProperty
|
||||
private UnfiledContainerChildProperties properties;
|
||||
|
||||
@JsonProperty private List<String> aspectNames;
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty private Boolean hasRetentionSchedule;
|
||||
@JsonProperty
|
||||
private Boolean hasRetentionSchedule;
|
||||
|
||||
@JsonProperty private Boolean isClosed;
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty private List<String> allowableOperations;
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty private Path path;
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
|
||||
@JsonProperty private String relativePath;
|
||||
@JsonProperty
|
||||
private String relativePath;
|
||||
|
||||
@JsonProperty private RecordContent content;
|
||||
@JsonProperty
|
||||
private RecordContent content;
|
||||
|
||||
@JsonProperty private Boolean isCompleted;
|
||||
@JsonProperty
|
||||
private Boolean isCompleted;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,10 @@ public enum UserRoles {
|
||||
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;
|
||||
|
||||
@@ -31,7 +31,6 @@ import static lombok.AccessLevel.PROTECTED;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.requests.ModelRequest;
|
||||
|
||||
@@ -42,11 +41,14 @@ import org.alfresco.rest.requests.ModelRequest;
|
||||
* @since 2.6
|
||||
*/
|
||||
public abstract class RMModelRequest<Request> extends ModelRequest<Request> {
|
||||
|
||||
@Getter(value = PROTECTED)
|
||||
@Setter(value = PRIVATE)
|
||||
private RMRestWrapper rmRestWrapper;
|
||||
|
||||
/** @param rmRestWrapper */
|
||||
/**
|
||||
* @param rmRestWrapper
|
||||
*/
|
||||
public RMModelRequest(RMRestWrapper rmRestWrapper) {
|
||||
super(rmRestWrapper.getRestWrapper());
|
||||
setRmRestWrapper(rmRestWrapper);
|
||||
|
||||
@@ -30,7 +30,6 @@ 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.RMModelRequest;
|
||||
@@ -48,22 +47,31 @@ import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledRecordFolderAPI;
|
||||
|
||||
/**
|
||||
* Defines the entire GS Core API {@link http://host:port/gs-api-explorer} select "GS Core API"
|
||||
* Defines the entire GS Core API
|
||||
* {@link http://host:port/gs-api-explorer} select "GS Core API"
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
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());
|
||||
format(
|
||||
"%s://%s",
|
||||
rmRestProperties.getScheme(),
|
||||
rmRestProperties.getServer()
|
||||
);
|
||||
RestAssured.port = parseInt(rmRestProperties.getPort());
|
||||
RestAssured.basePath = rmRestProperties.getRestRmPath();
|
||||
restWrapper.configureRequestSpec().setBasePath(RestAssured.basePath);
|
||||
|
||||
@@ -27,9 +27,7 @@
|
||||
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;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
@@ -43,7 +41,10 @@ import org.json.JSONObject;
|
||||
* @since 3.1
|
||||
*/
|
||||
public class ActionsExecutionAPI extends RMModelRequest {
|
||||
/** @param rmRestWrapper RM REST Wrapper */
|
||||
|
||||
/**
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public ActionsExecutionAPI(RMRestWrapper rmRestWrapper) {
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
@@ -51,19 +52,22 @@ public class ActionsExecutionAPI extends RMModelRequest {
|
||||
/**
|
||||
* Declares and files a document as record to a record folder using v1 actions api
|
||||
*
|
||||
* @param targetNode the node on which the action is executed
|
||||
* @param targetNode the node on which the action is executed
|
||||
* @param destinationPath the path to the record folder
|
||||
* @throws Exception
|
||||
*/
|
||||
public JSONObject declareAndFile(RepoTestModel targetNode, String destinationPath)
|
||||
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));
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(
|
||||
ActionsOnRule.DECLARE_AS_RECORD.getActionValue(),
|
||||
targetNode,
|
||||
ImmutableMap.of("path", destinationPath)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -72,29 +76,36 @@ public class ActionsExecutionAPI extends RMModelRequest {
|
||||
* @param targetNode the node on which the action is executed
|
||||
* @throws Exception
|
||||
*/
|
||||
public JSONObject declareAsRecord(RepoTestModel targetNode) throws Exception {
|
||||
public JSONObject declareAsRecord(RepoTestModel targetNode)
|
||||
throws Exception {
|
||||
return getRmRestWrapper()
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(ActionsOnRule.DECLARE_AS_RECORD.getActionValue(), targetNode);
|
||||
.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
|
||||
*
|
||||
* @param targetNode the node on which the action is executed
|
||||
* @param targetNode the node on which the action is executed
|
||||
* @param destinationPath the path to the record folder
|
||||
* @throws Exception
|
||||
*/
|
||||
public JSONObject declareAndFileVersionAsRecord(
|
||||
RepoTestModel targetNode, String destinationPath) throws Exception {
|
||||
RepoTestModel targetNode,
|
||||
String destinationPath
|
||||
) throws Exception {
|
||||
return getRmRestWrapper()
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(
|
||||
ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(),
|
||||
targetNode,
|
||||
ImmutableMap.of("path", destinationPath));
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(
|
||||
ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(),
|
||||
targetNode,
|
||||
ImmutableMap.of("path", destinationPath)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,12 +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 {
|
||||
public JSONObject declareVersionAsRecord(RepoTestModel targetNode)
|
||||
throws Exception {
|
||||
return getRmRestWrapper()
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(
|
||||
ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(), targetNode);
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(
|
||||
ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(),
|
||||
targetNode
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -120,26 +134,36 @@ public class ActionsExecutionAPI extends RMModelRequest {
|
||||
@SneakyThrows
|
||||
public JSONObject addWORMLock(RepoTestModel targetNode) {
|
||||
return getRmRestWrapper()
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(ActionsOnRule.WORM_LOCK.getActionValue(), targetNode);
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(
|
||||
ActionsOnRule.WORM_LOCK.getActionValue(),
|
||||
targetNode
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* WORM lock a node for a period of days
|
||||
*
|
||||
* @param targetNode the node on which the action is executed
|
||||
* @param targetNode the node on which the action is executed
|
||||
* @param retentionPeriod the retention period in days for the WORM lock
|
||||
* @throws Exception
|
||||
*/
|
||||
@SneakyThrows
|
||||
public JSONObject addWORMLock(RepoTestModel targetNode, int retentionPeriod) {
|
||||
public JSONObject addWORMLock(
|
||||
RepoTestModel targetNode,
|
||||
int retentionPeriod
|
||||
) {
|
||||
return getRmRestWrapper()
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(
|
||||
ActionsOnRule.WORM_LOCK.getActionValue(),
|
||||
targetNode,
|
||||
ImmutableMap.of("retentionPeriod", String.valueOf(retentionPeriod)));
|
||||
.withCoreAPI()
|
||||
.usingActions()
|
||||
.executeAction(
|
||||
ActionsOnRule.WORM_LOCK.getActionValue(),
|
||||
targetNode,
|
||||
ImmutableMap.of(
|
||||
"retentionPeriod",
|
||||
String.valueOf(retentionPeriod)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class FilePlanAPI extends RMModelRequest {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
@@ -59,7 +60,9 @@ public class FilePlanAPI extends RMModelRequest {
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/** see {@link #getFilePlan(String, String)} */
|
||||
/**
|
||||
* see {@link #getFilePlan(String, String)}
|
||||
*/
|
||||
public FilePlan getFilePlan(String filePlanId) {
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
@@ -73,27 +76,31 @@ public class FilePlanAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link FilePlan} for the given {@code filePlanId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code filePlanId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code filePlanId}
|
||||
* <li>{@code filePlanId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code filePlanId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code filePlanId}</li>
|
||||
* <li>{@code filePlanId} does not exist</li>
|
||||
* </ul>
|
||||
*/
|
||||
public FilePlan getFilePlan(String filePlanId, String parameters) {
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModel(
|
||||
FilePlan.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"/file-plans/{filePlanId}?{parameters}",
|
||||
filePlanId,
|
||||
parameters));
|
||||
.processModel(
|
||||
FilePlan.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"/file-plans/{filePlanId}?{parameters}",
|
||||
filePlanId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #getRootRecordCategories(String, String)} */
|
||||
/**
|
||||
* see {@link #getRootRecordCategories(String, String)}
|
||||
*/
|
||||
public RecordCategoryCollection getRootRecordCategories(String filePlanId) {
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
@@ -107,28 +114,37 @@ public class FilePlanAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link RecordCategoryCollection} for the given {@code filePlanId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code filePlanId}
|
||||
* <li>{@code filePlanId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code filePlanId}</li>
|
||||
* <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));
|
||||
.processModels(
|
||||
RecordCategoryCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"file-plans/{filePlanId}/categories?{parameters}",
|
||||
filePlanId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #createRootRecordCategory(RecordCategory, String, String)} */
|
||||
/**
|
||||
* see {@link #createRootRecordCategory(RecordCategory, String, String)}
|
||||
*/
|
||||
public RecordCategory createRootRecordCategory(
|
||||
RecordCategory recordCategoryModel, String filePlanId) {
|
||||
RecordCategory recordCategoryModel,
|
||||
String filePlanId
|
||||
) {
|
||||
mandatoryObject("recordCategoryModel", recordCategoryModel);
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
@@ -143,29 +159,34 @@ public class FilePlanAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The created {@link RecordCategory}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code filePlanId} is not a valid format or {@code filePlanId} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to add children to {@code filePlanId}
|
||||
* <li>{@code filePlanIds} does not exist
|
||||
* <li>new name clashes with an existing node in the current parent container
|
||||
* <li>model integrity exception, including node name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code filePlanId} is not a valid format or {@code filePlanId} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to add children to {@code filePlanId}</li>
|
||||
* <li>{@code filePlanIds} does not exist</li>
|
||||
* <li>new name clashes with an existing node in the current parent container</li>
|
||||
* <li>model integrity exception, including node name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RecordCategory createRootRecordCategory(
|
||||
RecordCategory recordCategoryModel, String filePlanId, String parameters) {
|
||||
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));
|
||||
.processModel(
|
||||
RecordCategory.class,
|
||||
requestWithBody(
|
||||
POST,
|
||||
toJson(recordCategoryModel),
|
||||
"file-plans/{filePlanId}/categories?{parameters}",
|
||||
filePlanId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -181,31 +202,36 @@ public class FilePlanAPI extends RMModelRequest {
|
||||
/**
|
||||
* Updates a file plan.
|
||||
*
|
||||
* @param filePlanModel The file plan model which holds the information
|
||||
* @param filePlanId The identifier of the file plan
|
||||
* @param parameters The URL parameters to add
|
||||
* @param filePlanModel The file plan model which holds the information
|
||||
* @param filePlanId The identifier of the file plan
|
||||
* @param parameters The URL parameters to add
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code filePlanId} is not a valid format or {@code
|
||||
* filePlanModel} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to update {@code filePlanId}
|
||||
* <li>{@code filePlanId} does not exist
|
||||
* <li>model integrity exception, including file name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code filePlanId} is not a valid format or {@code filePlanModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to update {@code filePlanId}</li>
|
||||
* <li>{@code filePlanId} does not exist</li>
|
||||
* <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));
|
||||
.processModel(
|
||||
FilePlan.class,
|
||||
requestWithBody(
|
||||
PUT,
|
||||
toJson(filePlanModel),
|
||||
"file-plans/{filePlanId}?{parameters}",
|
||||
filePlanId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,9 +41,12 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class FilesAPI extends RMModelRequest<FilesAPI> {
|
||||
|
||||
public static final String PARENT_ID_PARAM = "parentId";
|
||||
|
||||
/** @param rmRestWrapper RM REST Wrapper */
|
||||
/**
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public FilesAPI(RMRestWrapper rmRestWrapper) {
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
@@ -59,12 +62,14 @@ public class FilesAPI extends RMModelRequest<FilesAPI> {
|
||||
mandatoryString("fileId", fileId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModel(
|
||||
Record.class,
|
||||
simpleRequest(
|
||||
POST,
|
||||
"/files/{fileId}/declare?{parameters}",
|
||||
fileId,
|
||||
getRmRestWrapper().getParameters()));
|
||||
.processModel(
|
||||
Record.class,
|
||||
simpleRequest(
|
||||
POST,
|
||||
"/files/{fileId}/declare?{parameters}",
|
||||
fileId,
|
||||
getRmRestWrapper().getParameters()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RMSiteAPI extends RMModelRequest {
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@@ -61,16 +62,16 @@ public class RMSiteAPI extends RMModelRequest {
|
||||
*
|
||||
* @return The {@link RMSite} for the given file plan component id
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: GET request is supported only for the RM
|
||||
* site
|
||||
* <li>Api Response code 401 If authentication failed
|
||||
* <li>Api Response code 409 If RM Site does not exist
|
||||
* <li>Api Response code default Unexpected error
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: GET request is supported only for the RM site</li>
|
||||
* <li>Api Response code 401 If authentication failed</li>
|
||||
* <li>Api Response code 409 If RM Site does not exist</li>
|
||||
* <li>Api Response code default Unexpected error</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RMSite getSite() {
|
||||
return getRmRestWrapper().processModel(RMSite.class, simpleRequest(GET, "gs-sites/rm"));
|
||||
return getRmRestWrapper()
|
||||
.processModel(RMSite.class, simpleRequest(GET, "gs-sites/rm"));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,37 +80,37 @@ public class RMSiteAPI extends RMModelRequest {
|
||||
* @param rmSiteModel The properties of the rm site to be created
|
||||
* @return The {@link RMSite} with the given properties
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: title, or description exceed the maximum
|
||||
* length; or siteBodyCreate invalid
|
||||
* <li>Api Response code 401 If authentication failed</
|
||||
* <li>Api Response code 409 RM Site already exists
|
||||
* <li>Api Response code default Unexpected error
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: title, or description exceed the maximum length; or siteBodyCreate invalid</li>
|
||||
* <li>Api Response code 401 If authentication failed</
|
||||
* <li>Api Response code 409 RM Site already exists</li>
|
||||
* <li>Api Response code default Unexpected error</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RMSite createRMSite(RMSite rmSiteModel) {
|
||||
mandatoryObject("rmSiteModel", rmSiteModel);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModel(RMSite.class, requestWithBody(POST, toJson(rmSiteModel), "gs-sites"));
|
||||
.processModel(
|
||||
RMSite.class,
|
||||
requestWithBody(POST, toJson(rmSiteModel), "gs-sites")
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete RM site
|
||||
*
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: DELETE request is supported only for the
|
||||
* RM site
|
||||
* <li>Api Response code 401 If authentication failed</
|
||||
* <li>Api Response code 403 Current user does not have permission to delete the site that
|
||||
* is visible to them.
|
||||
* <li>Api Response code 404 RM site does not exist
|
||||
* <li>Api Response code default Unexpected error
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: DELETE request is supported only for the RM site</li>
|
||||
* <li>Api Response code 401 If authentication failed</
|
||||
* <li>Api Response code 403 Current user does not have permission to delete the site that is visible to them.</li>
|
||||
* <li>Api Response code 404 RM site does not exist</li>
|
||||
* <li>Api Response code default Unexpected error</li>
|
||||
* </ul>
|
||||
*/
|
||||
public void deleteRMSite() {
|
||||
getRmRestWrapper().processEmptyModel(simpleRequest(DELETE, "gs-sites/rm"));
|
||||
getRmRestWrapper()
|
||||
.processEmptyModel(simpleRequest(DELETE, "gs-sites/rm"));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -118,20 +119,22 @@ public class RMSiteAPI extends RMModelRequest {
|
||||
* @param rmSiteModel The properties to be updated
|
||||
* @return The updated {@link RMSite}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>Api Response code 400 the update request is invalid {@code rmSiteModel} is invalid
|
||||
* <li>Api Response code 401 If authentication fails
|
||||
* <li>Api Response code 403 does not have permission to update {@code RMSite}
|
||||
* <li>Api Response code 404 {@code RMSiteModel} does not exist
|
||||
* <li>Api Response code default Unexpected error,model integrity exception
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>Api Response code 400 the update request is invalid {@code rmSiteModel} is invalid</li>
|
||||
* <li>Api Response code 401 If authentication fails</li>
|
||||
* <li>Api Response code 403 does not have permission to update {@code RMSite}</li>
|
||||
* <li>Api Response code 404 {@code RMSiteModel} does not exist</li>
|
||||
* <li>Api Response code default Unexpected error,model integrity exception</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RMSite updateRMSite(RMSite rmSiteModel) {
|
||||
mandatoryObject("rmSiteProperties", rmSiteModel);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModel(
|
||||
RMSite.class, requestWithBody(PUT, toJson(rmSiteModel), "gs-sites/rm"));
|
||||
.processModel(
|
||||
RMSite.class,
|
||||
requestWithBody(PUT, toJson(rmSiteModel), "gs-sites/rm")
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -139,16 +142,17 @@ public class RMSiteAPI extends RMModelRequest {
|
||||
*
|
||||
* @return <code>true</code> if the RM site exists, <code>false</code> otherwise
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: GET request is supported only for the RM
|
||||
* site
|
||||
* <li>Api Response code 401 If authentication failed
|
||||
* <li>Api Response code 409 If RM Site does not exist
|
||||
* <li>Api Response code default Unexpected error
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: GET request is supported only for the RM site</li>
|
||||
* <li>Api Response code 401 If authentication failed</li>
|
||||
* <li>Api Response code 409 If RM Site does not exist</li>
|
||||
* <li>Api Response code default Unexpected error</li>
|
||||
* </ul>
|
||||
*/
|
||||
public boolean existsRMSite() {
|
||||
getSite();
|
||||
return getRmRestWrapper().getStatusCode().equals(String.valueOf(OK.value()));
|
||||
return getRmRestWrapper()
|
||||
.getStatusCode()
|
||||
.equals(String.valueOf(OK.value()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,17 +28,14 @@ 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 org.alfresco.dataprep.AlfrescoHttpClient;
|
||||
import org.alfresco.dataprep.AlfrescoHttpClientFactory;
|
||||
import org.alfresco.rest.core.RMRestProperties;
|
||||
@@ -55,18 +52,19 @@ import org.alfresco.utility.model.UserModel;
|
||||
* @since 2.6
|
||||
*/
|
||||
// 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
|
||||
// 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 {
|
||||
/** @param rmRestWrapper RM REST Wrapper */
|
||||
|
||||
/**
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public RMUserAPI(RMRestWrapper rmRestWrapper) {
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to obtain {@link AlfrescoHttpClient}
|
||||
*
|
||||
* @return Initialized {@link AlfrescoHttpClient} instance
|
||||
*/
|
||||
private AlfrescoHttpClient getAlfrescoHttpClient() {
|
||||
@@ -94,111 +92,124 @@ public class RMUserAPI extends RMModelRequest {
|
||||
AlfrescoHttpClient client = getAlfrescoHttpClient();
|
||||
|
||||
// override v1 baseURI and basePath
|
||||
RequestSpecification spec =
|
||||
new RequestSpecBuilder().setBaseUri(client.getApiUrl()).setBasePath("/").build();
|
||||
RequestSpecification spec = new RequestSpecBuilder()
|
||||
.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()));
|
||||
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()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to add permission on a component to user
|
||||
*
|
||||
* @param filePlanComponentId The id of the file plan component on which permission should be
|
||||
* given
|
||||
* @param filePlanComponentId The id of the file plan component on which permission should be given
|
||||
* @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) {
|
||||
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();
|
||||
JsonObject bodyJson = buildObject()
|
||||
.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();
|
||||
RequestSpecification spec = new RequestSpecBuilder()
|
||||
.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()));
|
||||
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()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to set permission inheritance on a file plan component
|
||||
*
|
||||
* @param filePlanComponentId The id of the file plan component on which inherited permission
|
||||
* should be set
|
||||
* @param isInherited true if the permission is inherited false if the permission inheritance is
|
||||
* disabled
|
||||
* @param filePlanComponentId The id of the file plan component on which inherited permission should be set
|
||||
* @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();
|
||||
final JsonObject bodyJson = buildObject()
|
||||
.addArray("permissions")
|
||||
.end()
|
||||
.add("isInherited", isInherited)
|
||||
.getJson();
|
||||
|
||||
// override v1 baseURI and basePath
|
||||
RequestSpecification spec =
|
||||
new RequestSpecBuilder().setBaseUri(client.getApiUrl()).setBasePath("/").build();
|
||||
RequestSpecification spec = new RequestSpecBuilder()
|
||||
.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()));
|
||||
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()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -209,31 +220,39 @@ 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();
|
||||
|
||||
JsonObject body =
|
||||
buildObject()
|
||||
.add("userName", userName)
|
||||
.add("firstName", userName)
|
||||
.add("lastName", userName)
|
||||
.add("password", userPassword)
|
||||
.add("email", userEmail)
|
||||
.getJson();
|
||||
JsonObject body = buildObject()
|
||||
.add("userName", userName)
|
||||
.add("firstName", userName)
|
||||
.add("lastName", userName)
|
||||
.add("password", userPassword)
|
||||
.add("email", userEmail)
|
||||
.getJson();
|
||||
|
||||
final RequestSpecification spec =
|
||||
new RequestSpecBuilder()
|
||||
.setBaseUri(client.getApiUrl())
|
||||
.setBasePath("/")
|
||||
.setAuth(basic(adminUser.getUsername(), adminUser.getPassword()))
|
||||
.setContentType(ContentType.JSON)
|
||||
.setBody(body.toString())
|
||||
.build();
|
||||
final RequestSpecification spec = new RequestSpecBuilder()
|
||||
.setBaseUri(client.getApiUrl())
|
||||
.setBasePath("/")
|
||||
.setAuth(basic(adminUser.getUsername(), adminUser.getPassword()))
|
||||
.setContentType(ContentType.JSON)
|
||||
.setBody(body.toString())
|
||||
.build();
|
||||
|
||||
// create POST request to "people" endpoint
|
||||
Response response =
|
||||
given().spec(spec).log().all().when().post("people").prettyPeek().andReturn();
|
||||
Response response = given()
|
||||
.spec(spec)
|
||||
.log()
|
||||
.all()
|
||||
.when()
|
||||
.post("people")
|
||||
.prettyPeek()
|
||||
.andReturn();
|
||||
|
||||
return (response.getStatusCode() == OK.value());
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordCategoryAPI extends RMModelRequest {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
@@ -64,24 +65,30 @@ public class RecordCategoryAPI extends RMModelRequest {
|
||||
*
|
||||
* @param recordCategoryId The identifier of a record category
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code recordCategoryId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to delete {@code recordCategoryId}
|
||||
* <li>{@code recordCategoryId} does not exist
|
||||
* <li>{@code recordCategoryId} is locked and cannot be deleted
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code recordCategoryId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to delete {@code recordCategoryId}</li>
|
||||
* <li>{@code recordCategoryId} does not exist</li>
|
||||
* <li>{@code recordCategoryId} is locked and cannot be deleted</li>
|
||||
* </ul>
|
||||
*/
|
||||
public void deleteRecordCategory(String recordCategoryId) {
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
getRmRestWrapper()
|
||||
.processEmptyModel(
|
||||
simpleRequest(
|
||||
DELETE, "record-categories/{recordCategoryId}", recordCategoryId));
|
||||
.processEmptyModel(
|
||||
simpleRequest(
|
||||
DELETE,
|
||||
"record-categories/{recordCategoryId}",
|
||||
recordCategoryId
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #getRecordCategory(String, String)} */
|
||||
/**
|
||||
* see {@link #getRecordCategory(String, String)}
|
||||
*/
|
||||
public RecordCategory getRecordCategory(String recordCategoryId) {
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
@@ -95,35 +102,46 @@ public class RecordCategoryAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link RecordCategory} for the given {@code recordCategoryId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code recordCategoryId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code recordCategoryId}
|
||||
* <li>{@code recordCategoryId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code recordCategoryId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code recordCategoryId}</li>
|
||||
* <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));
|
||||
.processModel(
|
||||
RecordCategory.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"record-categories/{recordCategoryId}?{parameters}",
|
||||
recordCategoryId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #updateRecordCategory(RecordCategory, String, String)
|
||||
*/
|
||||
public RecordCategory updateRecordCategory(
|
||||
RecordCategory recordCategoryModel, String recordCategoryId) {
|
||||
RecordCategory recordCategoryModel,
|
||||
String recordCategoryId
|
||||
) {
|
||||
mandatoryObject("recordCategoryModel", recordCategoryModel);
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
return updateRecordCategory(recordCategoryModel, recordCategoryId, EMPTY);
|
||||
return updateRecordCategory(
|
||||
recordCategoryModel,
|
||||
recordCategoryId,
|
||||
EMPTY
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -134,35 +152,42 @@ public class RecordCategoryAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @param returns The updated {@link RecordCategory}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code recordCategoryId} is not a valid format or
|
||||
* {@code recordCategoryModel} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to update {@code recordCategoryId}
|
||||
* <li>{@code recordCategoryId} does not exist
|
||||
* <li>the updated name clashes with an existing record category in the current parent
|
||||
* category
|
||||
* <li>model integrity exception, including file name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code recordCategoryId} is not a valid format or {@code recordCategoryModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to update {@code recordCategoryId}</li>
|
||||
* <li>{@code recordCategoryId} does not exist</li>
|
||||
* <li>the updated name clashes with an existing record category in the current parent category</li>
|
||||
* <li>model integrity exception, including file name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RecordCategory updateRecordCategory(
|
||||
RecordCategory recordCategoryModel, String recordCategoryId, String parameters) {
|
||||
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));
|
||||
.processModel(
|
||||
RecordCategory.class,
|
||||
requestWithBody(
|
||||
PUT,
|
||||
toJson(recordCategoryModel),
|
||||
"record-categories/{recordCategoryId}?{parameters}",
|
||||
recordCategoryId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #getRecordCategoryChildren(String, String)} */
|
||||
public RecordCategoryChildCollection getRecordCategoryChildren(String recordCategoryId) {
|
||||
/**
|
||||
* see {@link #getRecordCategoryChildren(String, String)}
|
||||
*/
|
||||
public RecordCategoryChildCollection getRecordCategoryChildren(
|
||||
String recordCategoryId
|
||||
) {
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
return getRecordCategoryChildren(recordCategoryId, EMPTY);
|
||||
@@ -175,33 +200,45 @@ public class RecordCategoryAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link RecordCategoryChildCollection} for the given {@code recordCategoryId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code recordCategoryId}
|
||||
* <li>{@code recordCategoryId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code recordCategoryId}</li>
|
||||
* <li>{@code recordCategoryId} does not exist</li>
|
||||
*</ul>
|
||||
*/
|
||||
public RecordCategoryChildCollection getRecordCategoryChildren(
|
||||
String recordCategoryId, String parameters) {
|
||||
String recordCategoryId,
|
||||
String parameters
|
||||
) {
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModels(
|
||||
RecordCategoryChildCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"record-categories/{recordCategoryId}/children?{parameters}",
|
||||
recordCategoryId,
|
||||
parameters));
|
||||
.processModels(
|
||||
RecordCategoryChildCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"record-categories/{recordCategoryId}/children?{parameters}",
|
||||
recordCategoryId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #createRecordCategoryChild(RecordCategoryChild, String, String)} */
|
||||
/**
|
||||
* see {@link #createRecordCategoryChild(RecordCategoryChild, String, String)}
|
||||
*/
|
||||
public RecordCategoryChild createRecordCategoryChild(
|
||||
RecordCategoryChild recordCategoryChildModel, String recordCategoryId) {
|
||||
RecordCategoryChild recordCategoryChildModel,
|
||||
String recordCategoryId
|
||||
) {
|
||||
mandatoryObject("recordCategoryChildModel", recordCategoryChildModel);
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
return createRecordCategoryChild(recordCategoryChildModel, recordCategoryId, EMPTY);
|
||||
return createRecordCategoryChild(
|
||||
recordCategoryChildModel,
|
||||
recordCategoryId,
|
||||
EMPTY
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -212,31 +249,36 @@ public class RecordCategoryAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The created {@link RecordCategoryChild}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code recordCategoryId} is not a valid format or {@code recordCategoryChildModel}
|
||||
* is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to add children to {@code recordCategoryId}
|
||||
* <li>{@code recordCategoryId} does not exist
|
||||
* <li>new name clashes with an existing node in the current parent container
|
||||
* <li>model integrity exception, including node name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code recordCategoryId} is not a valid format or {@code recordCategoryChildModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to add children to {@code recordCategoryId}</li>
|
||||
* <li>{@code recordCategoryId} does not exist</li>
|
||||
* <li>new name clashes with an existing node in the current parent container</li>
|
||||
* <li>model integrity exception, including node name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RecordCategoryChild createRecordCategoryChild(
|
||||
RecordCategoryChild recordCategoryChildModel,
|
||||
String recordCategoryId,
|
||||
String parameters) {
|
||||
mandatoryObject("filePlanComponentProperties", recordCategoryChildModel);
|
||||
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));
|
||||
.processModel(
|
||||
RecordCategoryChild.class,
|
||||
requestWithBody(
|
||||
POST,
|
||||
toJson(recordCategoryChildModel),
|
||||
"record-categories/{recordCategoryId}/children?{parameters}",
|
||||
recordCategoryId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,10 +41,11 @@ 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 org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.record.Record;
|
||||
import org.alfresco.rest.rm.community.model.recordfolder.RecordFolder;
|
||||
@@ -52,10 +53,6 @@ import org.alfresco.rest.rm.community.model.recordfolder.RecordFolderCollection;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
import org.alfresco.rest.rm.community.util.FilePlanComponentMixIn;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Record folder REST API Wrapper
|
||||
*
|
||||
@@ -63,6 +60,7 @@ import java.util.Iterator;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordFolderAPI extends RMModelRequest {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
@@ -77,23 +75,30 @@ public class RecordFolderAPI extends RMModelRequest {
|
||||
*
|
||||
* @param recordFolderId The identifier of a record folder
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code recordFolderId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to delete {@code recordFolderId}
|
||||
* <li>{@code recordFolderId} does not exist
|
||||
* <li>{@code recordFolderId} is locked and cannot be deleted
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code recordFolderId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to delete {@code recordFolderId}</li>
|
||||
* <li>{@code recordFolderId} does not exist</li>
|
||||
* <li>{@code recordFolderId} is locked and cannot be deleted</li>
|
||||
* </ul>
|
||||
*/
|
||||
public void deleteRecordFolder(String recordFolderId) {
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
getRmRestWrapper()
|
||||
.processEmptyModel(
|
||||
simpleRequest(DELETE, "record-folders/{recordFolderId}", recordFolderId));
|
||||
.processEmptyModel(
|
||||
simpleRequest(
|
||||
DELETE,
|
||||
"record-folders/{recordFolderId}",
|
||||
recordFolderId
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #getRecordFolder(String, String)} */
|
||||
/**
|
||||
* see {@link #getRecordFolder(String, String)}
|
||||
*/
|
||||
public RecordFolder getRecordFolder(String recordFolderId) {
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
@@ -107,30 +112,38 @@ public class RecordFolderAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link RecordFolder} for the given {@code recordFolderId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code recordFolderId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code recordFolderId}
|
||||
* <li>{@code recordFolderId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code recordFolderId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code recordFolderId}</li>
|
||||
* <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));
|
||||
.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);
|
||||
|
||||
@@ -145,35 +158,42 @@ public class RecordFolderAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @param returns The updated {@link RecordFolder}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code recordFolderId} is not a valid format or
|
||||
* {@code recordFolderModel} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to update {@code recordFolderId}
|
||||
* <li>{@code recordFolderId} does not exist
|
||||
* <li>the updated name clashes with an existing record folder in the current parent
|
||||
* category
|
||||
* <li>model integrity exception, including file name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code recordFolderId} is not a valid format or {@code recordFolderModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to update {@code recordFolderId}</li>
|
||||
* <li>{@code recordFolderId} does not exist</li>
|
||||
* <li>the updated name clashes with an existing record folder in the current parent category</li>
|
||||
* <li>model integrity exception, including file name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RecordFolder updateRecordFolder(
|
||||
RecordFolder recordFolderModel, String recordFolderId, String parameters) {
|
||||
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));
|
||||
.processModel(
|
||||
RecordFolder.class,
|
||||
requestWithBody(
|
||||
PUT,
|
||||
toJson(recordFolderModel),
|
||||
"record-folders/{recordFolderId}?{parameters}",
|
||||
recordFolderId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #getRecordFolderChildren(String, String)} */
|
||||
public RecordFolderCollection getRecordFolderChildren(String recordFolderId) {
|
||||
/**
|
||||
* see {@link #getRecordFolderChildren(String, String)}
|
||||
*/
|
||||
public RecordFolderCollection getRecordFolderChildren(
|
||||
String recordFolderId
|
||||
) {
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
return getRecordFolderChildren(recordFolderId, EMPTY);
|
||||
@@ -186,27 +206,33 @@ public class RecordFolderAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link RecordFolderCollection} for the given {@code recordFolderId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code recordFolderId}
|
||||
* <li>{@code recordFolderId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code recordFolderId}</li>
|
||||
* <li>{@code recordFolderId} does not exist</li>
|
||||
*</ul>
|
||||
*/
|
||||
public RecordFolderCollection getRecordFolderChildren(
|
||||
String recordFolderId, String parameters) {
|
||||
String recordFolderId,
|
||||
String parameters
|
||||
) {
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModels(
|
||||
RecordFolderCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"record-folders/{recordFolderId}/records?{parameters}",
|
||||
recordFolderId,
|
||||
parameters));
|
||||
.processModels(
|
||||
RecordFolderCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"record-folders/{recordFolderId}/records?{parameters}",
|
||||
recordFolderId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #createRecord(Record, String, String)} */
|
||||
/**
|
||||
* see {@link #createRecord(Record, String, String)}
|
||||
*/
|
||||
public Record createRecord(Record recordModel, String recordFolderId) {
|
||||
mandatoryObject("recordModel", recordModel);
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
@@ -218,14 +244,16 @@ public class RecordFolderAPI extends RMModelRequest {
|
||||
* Create a record from file resource
|
||||
*
|
||||
* @param recordModel {@link Record} for electronic record to be created
|
||||
* @param recordContent {@link File} pointing to the content of the electronic record to be
|
||||
* created
|
||||
* @param recordContent {@link File} pointing to the content of the electronic record to be created
|
||||
* @param recordFolderId The identifier of a record folder
|
||||
* @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);
|
||||
@@ -242,12 +270,14 @@ public class RecordFolderAPI extends RMModelRequest {
|
||||
JsonNode root;
|
||||
try {
|
||||
root =
|
||||
new ObjectMapper()
|
||||
.readTree(
|
||||
toJson(
|
||||
recordModel,
|
||||
Record.class,
|
||||
FilePlanComponentMixIn.class));
|
||||
new ObjectMapper()
|
||||
.readTree(
|
||||
toJson(
|
||||
recordModel,
|
||||
Record.class,
|
||||
FilePlanComponentMixIn.class
|
||||
)
|
||||
);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Failed to convert model to JSON.", e);
|
||||
}
|
||||
@@ -255,9 +285,17 @@ public class RecordFolderAPI extends RMModelRequest {
|
||||
Iterator<String> fieldNames = root.fieldNames();
|
||||
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);
|
||||
@@ -279,18 +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));
|
||||
.processModel(
|
||||
Record.class,
|
||||
requestWithBody(
|
||||
POST,
|
||||
toJson(recordModel),
|
||||
"record-folders/{recordFolderId}/records?{parameters}",
|
||||
recordFolderId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@ 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;
|
||||
@@ -51,7 +50,10 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordsAPI extends RMModelRequest {
|
||||
/** @param rmRestWrapper RM REST Wrapper */
|
||||
|
||||
/**
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public RecordsAPI(RMRestWrapper rmRestWrapper) {
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
@@ -62,38 +64,39 @@ public class RecordsAPI extends RMModelRequest {
|
||||
* @param recordId The id of the electronic record
|
||||
* @return {@link ResponseBody} representing content for the given record id
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code recordId} has no content
|
||||
* <li>{@code recordId} is not a valid format, or is not a record
|
||||
* <li>authentication fails
|
||||
* <li>{@code recordId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code recordId} has no content</li>
|
||||
* <li> {@code recordId} is not a valid format, or is not a record</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>{@code recordId} does not exist</li>
|
||||
* </ul>
|
||||
*/
|
||||
public ResponseBody<?> getRecordContent(String recordId) {
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processHtmlResponse(simpleRequest(GET, "records/{recordId}/content", recordId))
|
||||
.getBody();
|
||||
.processHtmlResponse(
|
||||
simpleRequest(GET, "records/{recordId}/content", recordId)
|
||||
)
|
||||
.getBody();
|
||||
}
|
||||
|
||||
/**
|
||||
* File the record recordId into file plan structure based on the location sent via the request
|
||||
* body
|
||||
* File the record recordId into file plan structure based on the location sent via the request body
|
||||
*
|
||||
* @param recordBodyFile The properties where to file the record
|
||||
* @param recordId The id of the record to file
|
||||
* @param recordId The id of the record to file
|
||||
* @return The {@link Record} with the given properties
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>Invalid parameter: {@code recordBodyFile} is not a valid format,{@code recordId} is
|
||||
* not a record
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to file to {@code fileplanComponentId}
|
||||
* <li>{@code recordId} does not exist
|
||||
* <li>targetParentId from recordBodyFile does not exist
|
||||
* <li>model integrity exception: the action breaks system's integrity restrictions
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>Invalid parameter: {@code recordBodyFile} is not a valid format,{@code recordId} is not a record</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to file to {@code fileplanComponentId}</li>
|
||||
* <li>{@code recordId} does not exist</li>
|
||||
* <li>targetParentId from recordBodyFile does not exist</li>
|
||||
* <li>model integrity exception: the action breaks system's integrity restrictions</li>
|
||||
* </ul>
|
||||
*
|
||||
*/
|
||||
public Record fileRecord(RecordBodyFile recordBodyFile, String recordId) {
|
||||
mandatoryObject("recordBodyFile", recordBodyFile);
|
||||
@@ -103,36 +106,41 @@ public class RecordsAPI extends RMModelRequest {
|
||||
}
|
||||
|
||||
/**
|
||||
* File the record recordId into file plan structure based on the location sent via the request
|
||||
* body
|
||||
* File the record recordId into file plan structure based on the location sent via the request body
|
||||
*
|
||||
* @param recordBodyFile The properties where to file the record
|
||||
* @param recordId The id of the record to file
|
||||
* @param recordId The id of the record to file
|
||||
* @return The {@link Record} with the given properties
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>Invalid parameter: {@code recordBodyFile} is not a valid format,{@code recordId} is
|
||||
* not a record
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to file to {@code fileplanComponentId}
|
||||
* <li>{@code recordId} does not exist
|
||||
* <li>targetParentId from recordBodyFile does not exist
|
||||
* <li>model integrity exception: the action breaks system's integrity restrictions
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>Invalid parameter: {@code recordBodyFile} is not a valid format,{@code recordId} is not a record</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to file to {@code fileplanComponentId}</li>
|
||||
* <li>{@code recordId} does not exist</li>
|
||||
* <li>targetParentId from recordBodyFile does not exist</li>
|
||||
* <li>model integrity exception: the action breaks system's integrity restrictions</li>
|
||||
* </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));
|
||||
.processModel(
|
||||
Record.class,
|
||||
requestWithBody(
|
||||
POST,
|
||||
toJson(recordBodyFile),
|
||||
"/records/{recordId}/file?{parameters}",
|
||||
recordId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -150,47 +158,55 @@ public class RecordsAPI extends RMModelRequest {
|
||||
* @param recordId The id of the record to complete
|
||||
* @return The completed {@link Record} with the given properties
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>Invalid parameter: {@code recordId} is not a record
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to complete {@code recordId}
|
||||
* <li>{@code recordId} does not exist or is frozen
|
||||
* <li>model integrity exception: the record is already completed
|
||||
* <li>model integrity exception: the record has missing meta-data
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>Invalid parameter: {@code recordId} is not a record</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to complete {@code recordId}</li>
|
||||
* <li>{@code recordId} does not exist or is frozen</li>
|
||||
* <li>model integrity exception: the record is already completed</li>
|
||||
* <li>model integrity exception: the record has missing meta-data</li>
|
||||
* </ul>
|
||||
*/
|
||||
public Record completeRecord(String recordId, String parameters) {
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModel(
|
||||
Record.class,
|
||||
simpleRequest(
|
||||
POST,
|
||||
"/records/{recordId}/complete?{parameters}",
|
||||
recordId,
|
||||
parameters));
|
||||
.processModel(
|
||||
Record.class,
|
||||
simpleRequest(
|
||||
POST,
|
||||
"/records/{recordId}/complete?{parameters}",
|
||||
recordId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a record.
|
||||
*
|
||||
* @param recordId The identifier of a record
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code recordId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to delete {@code recordId}
|
||||
* <li>{@code recordId} does not exist
|
||||
* <li>{@code recordId} is locked and cannot be deleted
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code recordId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to delete {@code recordId}</li>
|
||||
* <li>{@code recordId} does not exist</li>
|
||||
* <li>{@code recordId} is locked and cannot be deleted</li>
|
||||
* </ul>
|
||||
*/
|
||||
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)} */
|
||||
/**
|
||||
* see {@link #getRecord(String, String)}
|
||||
*/
|
||||
public Record getRecord(String recordId) {
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
@@ -204,21 +220,26 @@ public class RecordsAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link Record} for the given {@code recordId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code recordId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code recordId}
|
||||
* <li>{@code recordId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code recordId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code recordId}</li>
|
||||
* <li>{@code recordId} does not exist</li>
|
||||
* </ul>
|
||||
*/
|
||||
public Record getRecord(String recordId, String parameters) {
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModel(
|
||||
Record.class,
|
||||
simpleRequest(
|
||||
GET, "records/{recordId}?{parameters}", recordId, parameters));
|
||||
.processModel(
|
||||
Record.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"records/{recordId}?{parameters}",
|
||||
recordId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -239,28 +260,33 @@ public class RecordsAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The updated {@link Record}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code recordId} is not a valid format or {@code
|
||||
* recordModel} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to update {@code recordId}
|
||||
* <li>{@code recordId} does not exist
|
||||
* <li>the updated name clashes with an existing record in the current parent folder
|
||||
* <li>model integrity exception, including file name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code recordId} is not a valid format or {@code recordModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to update {@code recordId}</li>
|
||||
* <li>{@code recordId} does not exist</li>
|
||||
* <li>the updated name clashes with an existing record in the current parent folder</li>
|
||||
* <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));
|
||||
.processModel(
|
||||
Record.class,
|
||||
requestWithBody(
|
||||
PUT,
|
||||
toJson(recordModel),
|
||||
"records/{recordId}?{parameters}",
|
||||
recordId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,12 +44,17 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class TransferAPI extends RMModelRequest {
|
||||
/** @param rmRestWrapper RM REST Wrapper */
|
||||
|
||||
/**
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public TransferAPI(RMRestWrapper rmRestWrapper) {
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/** see {@link #getTransfer(String, String)} */
|
||||
/**
|
||||
* see {@link #getTransfer(String, String)}
|
||||
*/
|
||||
public Transfer getTransfer(String transferId) {
|
||||
mandatoryString("transferId", transferId);
|
||||
|
||||
@@ -63,26 +68,31 @@ public class TransferAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link Transfer} for the given {@code transferId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code transferId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code transferId}
|
||||
* <li>{@code transferId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code transferId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code transferId}</li>
|
||||
* <li>{@code transferId} does not exist</li>
|
||||
* </ul>
|
||||
*/
|
||||
public Transfer getTransfer(String transferId, String parameters) {
|
||||
mandatoryString("transferId", transferId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModel(
|
||||
Transfer.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"/transfers/{transferId}?{parameters}",
|
||||
transferId,
|
||||
parameters));
|
||||
.processModel(
|
||||
Transfer.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"/transfers/{transferId}?{parameters}",
|
||||
transferId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
/** see {@link #getTransfersChildren(String, String)} */
|
||||
|
||||
/**
|
||||
* see {@link #getTransfersChildren(String, String)}
|
||||
*/
|
||||
public TransferChildCollection getTransfersChildren(String transferId) {
|
||||
mandatoryString("transferId", transferId);
|
||||
|
||||
@@ -96,22 +106,27 @@ public class TransferAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link TransferChildCollection} for the given {@code transferId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code transferId}
|
||||
* <li>{@code filePlanId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code transferId}</li>
|
||||
* <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));
|
||||
.processModels(
|
||||
TransferChildCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"transfers/{filePlanId}/children?{parameters}",
|
||||
transferId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,12 +48,17 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class TransferContainerAPI extends RMModelRequest {
|
||||
/** @param rmRestWrapper RM REST Wrapper */
|
||||
|
||||
/**
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public TransferContainerAPI(RMRestWrapper rmRestWrapper) {
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/** see {@link #getTransferContainer(String, String)} */
|
||||
/**
|
||||
* see {@link #getTransferContainer(String, String)}
|
||||
*/
|
||||
public TransferContainer getTransferContainer(String transferContainerId) {
|
||||
mandatoryString("transferContainerId", transferContainerId);
|
||||
|
||||
@@ -67,35 +72,46 @@ public class TransferContainerAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link TransferContainer} for the given {@code transferContainerId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code transferContainerId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code transferContainerId}
|
||||
* <li>{@code transferContainerId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code transferContainerId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code transferContainerId}</li>
|
||||
* <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));
|
||||
.processModel(
|
||||
TransferContainer.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"/transfer-containers/{transferContainerId}?{parameters}",
|
||||
transferContainerId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #updateTransferContainer(TransferContainer, String, String)
|
||||
*/
|
||||
public TransferContainer updateTransferContainer(
|
||||
TransferContainer transferContainerModel, String transferContainerId) {
|
||||
TransferContainer transferContainerModel,
|
||||
String transferContainerId
|
||||
) {
|
||||
mandatoryObject("transferContainerModel", transferContainerModel);
|
||||
mandatoryString("transferContainerId", transferContainerId);
|
||||
|
||||
return updateTransferContainer(transferContainerModel, transferContainerId, EMPTY);
|
||||
return updateTransferContainer(
|
||||
transferContainerModel,
|
||||
transferContainerId,
|
||||
EMPTY
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -106,37 +122,39 @@ public class TransferContainerAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @param returns The updated {@link TransferContainer}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code transferContainerId} is not a valid format
|
||||
* or {@code transferContainerModel} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to update {@code transferContainerId}
|
||||
* <li>{@code transferContainerId} does not exist
|
||||
* <li>the updated name clashes with an existing transfer container in the current file
|
||||
* plan
|
||||
* <li>model integrity exception, including transfer container name with invalid
|
||||
* characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code transferContainerId} is not a valid format or {@code transferContainerModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to update {@code transferContainerId}</li>
|
||||
* <li>{@code transferContainerId} does not exist</li>
|
||||
* <li>the updated name clashes with an existing transfer container in the current file plan</li>
|
||||
* <li>model integrity exception, including transfer container name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
public TransferContainer updateTransferContainer(
|
||||
TransferContainer transferContainerModel,
|
||||
String transferContainerId,
|
||||
String parameters) {
|
||||
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));
|
||||
.processModel(
|
||||
TransferContainer.class,
|
||||
requestWithBody(
|
||||
PUT,
|
||||
toJson(transferContainerModel),
|
||||
"transfer-containers/{transferContainerId}?{parameters}",
|
||||
transferContainerId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #getTransfers(String, String)} */
|
||||
/**
|
||||
* see {@link #getTransfers(String, String)}
|
||||
*/
|
||||
public TransferCollection getTransfers(String transferContainerId) {
|
||||
mandatoryString("transferContainerId", transferContainerId);
|
||||
|
||||
@@ -150,22 +168,27 @@ public class TransferContainerAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link TransferCollection} for the given {@code transferContainerId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code transferContainerId}
|
||||
* <li>{@code filePlanId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code transferContainerId}</li>
|
||||
* <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));
|
||||
.processModels(
|
||||
TransferCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"transfer-containers/{filePlanId}/transfers?{parameters}",
|
||||
transferContainerId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,10 +40,11 @@ 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 org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainer;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
|
||||
@@ -51,10 +52,6 @@ import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChi
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Unfiled Container REST API Wrapper
|
||||
*
|
||||
@@ -63,12 +60,17 @@ import java.util.Iterator;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class UnfiledContainerAPI extends RMModelRequest {
|
||||
/** @param rmRestWrapper RM REST Wrapper */
|
||||
|
||||
/**
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public UnfiledContainerAPI(RMRestWrapper rmRestWrapper) {
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/** see {@link #getUnfiledContainer(String, String)} */
|
||||
/**
|
||||
* see {@link #getUnfiledContainer(String, String)}
|
||||
*/
|
||||
public UnfiledContainer getUnfiledContainer(String unfiledContainerId) {
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
@@ -82,28 +84,37 @@ public class UnfiledContainerAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link UnfiledContainer} for the given {@code unfiledContainerId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code unfiledContainerId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code unfiledContainerId}
|
||||
* <li>{@code unfiledContainerId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code unfiledContainerId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code unfiledContainerId}</li>
|
||||
* <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));
|
||||
.processModel(
|
||||
UnfiledContainer.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"unfiled-containers/{unfiledContainerId}?{parameters}",
|
||||
unfiledContainerId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #getUnfiledContainerChildren(String)} (String, String)} */
|
||||
public UnfiledContainerChildCollection getUnfiledContainerChildren(String unfiledContainerId) {
|
||||
/**
|
||||
* see {@link #getUnfiledContainerChildren(String)} (String, String)}
|
||||
*/
|
||||
public UnfiledContainerChildCollection getUnfiledContainerChildren(
|
||||
String unfiledContainerId
|
||||
) {
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
return getUnfiledContainerChildren(unfiledContainerId, EMPTY);
|
||||
@@ -116,89 +127,113 @@ public class UnfiledContainerAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link UnfiledContainerChildCollection} for the given {@code unfiledContainerId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code unfiledContainerId}
|
||||
* <li>{@code unfiledContainerId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code unfiledContainerId}</li>
|
||||
* <li>{@code unfiledContainerId} does not exist</li>
|
||||
*</ul>
|
||||
*/
|
||||
public UnfiledContainerChildCollection getUnfiledContainerChildren(
|
||||
String unfiledContainerId, String parameters) {
|
||||
String unfiledContainerId,
|
||||
String parameters
|
||||
) {
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModels(
|
||||
UnfiledContainerChildCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"unfiled-containers/{unfiledContainerId}/children?{parameters}",
|
||||
unfiledContainerId,
|
||||
parameters));
|
||||
.processModels(
|
||||
UnfiledContainerChildCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"unfiled-containers/{unfiledContainerId}/children?{parameters}",
|
||||
unfiledContainerId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #createUnfiledContainerChild(UnfiledContainerChild, String, String)} */
|
||||
/**
|
||||
* see {@link #createUnfiledContainerChild(UnfiledContainerChild, String, String)}
|
||||
*/
|
||||
public UnfiledContainerChild createUnfiledContainerChild(
|
||||
UnfiledContainerChild unfiledContainerChildModel, String unfiledContainerId) {
|
||||
mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel);
|
||||
UnfiledContainerChild unfiledContainerChildModel,
|
||||
String unfiledContainerId
|
||||
) {
|
||||
mandatoryObject(
|
||||
"unfiledContainerChildModel",
|
||||
unfiledContainerChildModel
|
||||
);
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
return createUnfiledContainerChild(unfiledContainerChildModel, unfiledContainerId, EMPTY);
|
||||
return createUnfiledContainerChild(
|
||||
unfiledContainerChildModel,
|
||||
unfiledContainerId,
|
||||
EMPTY
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an unfiled container child. Can be a record or an unfiled record folder.
|
||||
*
|
||||
* @param unfiledContainerChildModel The unfiled container child model which holds the
|
||||
* information
|
||||
* @param unfiledContainerChildModel The unfiled container child model which holds the information
|
||||
* @param unfiledContainerId The identifier of an unfiled container
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The created {@link UnfiledContainerChild}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code unfiledContainerId} is not a valid format or {@code
|
||||
* unfiledContainerChildModel} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to add children to {@code unfiledContainerId}
|
||||
* <li>{@code unfiledContainerId} does not exist
|
||||
* <li>new name clashes with an existing node in the current parent container
|
||||
* <li>model integrity exception, including node name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code unfiledContainerId} is not a valid format or {@code unfiledContainerChildModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to add children to {@code unfiledContainerId}</li>
|
||||
* <li>{@code unfiledContainerId} does not exist</li>
|
||||
* <li>new name clashes with an existing node in the current parent container</li>
|
||||
* <li>model integrity exception, including node name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
public UnfiledContainerChild createUnfiledContainerChild(
|
||||
UnfiledContainerChild unfiledContainerChildModel,
|
||||
String unfiledContainerId,
|
||||
String parameters) {
|
||||
mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel);
|
||||
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));
|
||||
.processModel(
|
||||
UnfiledContainerChild.class,
|
||||
requestWithBody(
|
||||
POST,
|
||||
toJson(unfiledContainerChildModel),
|
||||
"unfiled-containers/{unfiledContainerId}/children?{parameters}",
|
||||
unfiledContainerId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a record from file resource
|
||||
*
|
||||
* @param unfiledContainerChildModel {@link UnfiledContainerChild} for electronic record to be
|
||||
* created
|
||||
* @param unfiledContainerChildContent {@link File} pointing to the content of the electronic
|
||||
* record to be created
|
||||
* @param unfiledContainerChildModel {@link UnfiledContainerChild} for electronic record to be created
|
||||
* @param unfiledContainerChildContent {@link File} pointing to the content of the electronic record to be created
|
||||
* @param unfiledContainerId The identifier of a unfiled container
|
||||
* @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);
|
||||
UnfiledContainerChild unfiledContainerChildModel,
|
||||
String unfiledContainerId,
|
||||
File unfiledContainerChildContent
|
||||
) {
|
||||
mandatoryObject(
|
||||
"unfiledContainerChildModel",
|
||||
unfiledContainerChildModel
|
||||
);
|
||||
mandatoryObject(
|
||||
"unfiledContainerChildContent",
|
||||
unfiledContainerChildContent
|
||||
);
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
if (!unfiledContainerChildModel.getNodeType().equals(CONTENT_TYPE)) {
|
||||
@@ -213,12 +248,14 @@ public class UnfiledContainerAPI extends RMModelRequest {
|
||||
JsonNode root;
|
||||
try {
|
||||
root =
|
||||
new ObjectMapper()
|
||||
.readTree(
|
||||
toJson(
|
||||
unfiledContainerChildModel,
|
||||
UnfiledContainerChild.class,
|
||||
UnfiledContainerChildMixin.class));
|
||||
new ObjectMapper()
|
||||
.readTree(
|
||||
toJson(
|
||||
unfiledContainerChildModel,
|
||||
UnfiledContainerChild.class,
|
||||
UnfiledContainerChildMixin.class
|
||||
)
|
||||
);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Failed to convert model to JSON.", e);
|
||||
}
|
||||
@@ -226,23 +263,40 @@ public class UnfiledContainerAPI extends RMModelRequest {
|
||||
Iterator<String> fieldNames = root.fieldNames();
|
||||
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) {
|
||||
UnfiledContainer unfiledContainerModel,
|
||||
String unfiledContainerId
|
||||
) {
|
||||
mandatoryObject("unfiledContainerModel", unfiledContainerModel);
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
return updateUnfiledContainer(unfiledContainerModel, unfiledContainerId, EMPTY);
|
||||
return updateUnfiledContainer(
|
||||
unfiledContainerModel,
|
||||
unfiledContainerId,
|
||||
EMPTY
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -253,30 +307,33 @@ public class UnfiledContainerAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @param returns The updated {@link UnfiledContainer}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code unfiledContainerId} is not a valid format
|
||||
* or {@code unfiledContainerModel} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to update {@code unfiledContainerId}
|
||||
* <li>{@code unfiledContainerId} does not exist
|
||||
* <li>the updated name clashes with an existing root category of special container in the
|
||||
* current fileplan
|
||||
* <li>model integrity exception, including file name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code unfiledContainerId} is not a valid format or {@code unfiledContainerModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to update {@code unfiledContainerId}</li>
|
||||
* <li>{@code unfiledContainerId} does not exist</li>
|
||||
* <li>the updated name clashes with an existing root category of special container in the current fileplan</li>
|
||||
* <li>model integrity exception, including file name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
public UnfiledContainer updateUnfiledContainer(
|
||||
UnfiledContainer unfiledContainerModel, String unfiledContainerId, String parameters) {
|
||||
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));
|
||||
.processModel(
|
||||
UnfiledContainer.class,
|
||||
requestWithBody(
|
||||
PUT,
|
||||
toJson(unfiledContainerModel),
|
||||
"unfiled-containers/{unfiledContainerId}?{parameters}",
|
||||
unfiledContainerId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,10 +41,11 @@ 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 org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildCollection;
|
||||
@@ -52,10 +53,6 @@ import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledRecordFolder
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Unfiled Record Folders REST API Wrapper
|
||||
*
|
||||
@@ -63,13 +60,20 @@ import java.util.Iterator;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class UnfiledRecordFolderAPI extends RMModelRequest {
|
||||
/** @param rmRestWrapper RM REST Wrapper */
|
||||
|
||||
/**
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public UnfiledRecordFolderAPI(RMRestWrapper rmRestWrapper) {
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/** see {@link #getUnfiledRecordFolder(String, String)} */
|
||||
public UnfiledRecordFolder getUnfiledRecordFolder(String unfiledRecordFolderId) {
|
||||
/**
|
||||
* see {@link #getUnfiledRecordFolder(String, String)}
|
||||
*/
|
||||
public UnfiledRecordFolder getUnfiledRecordFolder(
|
||||
String unfiledRecordFolderId
|
||||
) {
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return getUnfiledRecordFolder(unfiledRecordFolderId, EMPTY);
|
||||
@@ -82,30 +86,37 @@ public class UnfiledRecordFolderAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link UnfiledRecordFolder} for the given {@code unfiledRecordFolderId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code unfiledRecordFolderId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code unfiledRecordFolderId}
|
||||
* <li>{@code unfiledRecordFolderId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code unfiledRecordFolderId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code unfiledRecordFolderId}</li>
|
||||
* <li>{@code unfiledRecordFolderId} does not exist</li>
|
||||
* </ul>
|
||||
*/
|
||||
public UnfiledRecordFolder getUnfiledRecordFolder(
|
||||
String unfiledRecordFolderId, String parameters) {
|
||||
String unfiledRecordFolderId,
|
||||
String parameters
|
||||
) {
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModel(
|
||||
UnfiledRecordFolder.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"unfiled-record-folders/{unfiledRecordFolderId}?{parameters}",
|
||||
unfiledRecordFolderId,
|
||||
parameters));
|
||||
.processModel(
|
||||
UnfiledRecordFolder.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"unfiled-record-folders/{unfiledRecordFolderId}?{parameters}",
|
||||
unfiledRecordFolderId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #getUnfiledRecordFolderChildren(String, String)} */
|
||||
/**
|
||||
* see {@link #getUnfiledRecordFolderChildren(String, String)}
|
||||
*/
|
||||
public UnfiledContainerChildCollection getUnfiledRecordFolderChildren(
|
||||
String unfiledRecordFolderId) {
|
||||
String unfiledRecordFolderId
|
||||
) {
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return getUnfiledRecordFolderChildren(unfiledRecordFolderId, EMPTY);
|
||||
@@ -116,94 +127,115 @@ public class UnfiledRecordFolderAPI extends RMModelRequest {
|
||||
*
|
||||
* @param unfiledRecordFolderId The identifier of an unfiled records folder
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The {@link UnfiledRecordFolderChildCollection} for the given {@code
|
||||
* unfiledRecordFolderId}
|
||||
* @return The {@link UnfiledRecordFolderChildCollection} for the given {@code unfiledRecordFolderId}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to read {@code unfiledRecordFolderId}
|
||||
* <li>{@code unfiledRecordFolderId} does not exist
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to read {@code unfiledRecordFolderId}</li>
|
||||
* <li>{@code unfiledRecordFolderId} does not exist</li>
|
||||
*</ul>
|
||||
*/
|
||||
public UnfiledContainerChildCollection getUnfiledRecordFolderChildren(
|
||||
String unfiledRecordFolderId, String parameters) {
|
||||
String unfiledRecordFolderId,
|
||||
String parameters
|
||||
) {
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.processModels(
|
||||
UnfiledContainerChildCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}",
|
||||
unfiledRecordFolderId,
|
||||
parameters));
|
||||
.processModels(
|
||||
UnfiledContainerChildCollection.class,
|
||||
simpleRequest(
|
||||
GET,
|
||||
"unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}",
|
||||
unfiledRecordFolderId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/** see {@link #createUnfiledRecordFolderChild(UnfiledContainerChild, String, String)} */
|
||||
/**
|
||||
* see {@link #createUnfiledRecordFolderChild(UnfiledContainerChild, String, String)}
|
||||
*/
|
||||
public UnfiledContainerChild createUnfiledRecordFolderChild(
|
||||
UnfiledContainerChild unfiledRecordFolderChildModel, String unfiledRecordFolderId) {
|
||||
mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel);
|
||||
UnfiledContainerChild unfiledRecordFolderChildModel,
|
||||
String unfiledRecordFolderId
|
||||
) {
|
||||
mandatoryObject(
|
||||
"unfiledRecordFolderChildModel",
|
||||
unfiledRecordFolderChildModel
|
||||
);
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return createUnfiledRecordFolderChild(
|
||||
unfiledRecordFolderChildModel, unfiledRecordFolderId, EMPTY);
|
||||
unfiledRecordFolderChildModel,
|
||||
unfiledRecordFolderId,
|
||||
EMPTY
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an unfiled record folder child. Can be a record or an unfiled record folder.
|
||||
*
|
||||
* @param unfiledRecordFolderChildModel The unfiled folder child model which holds the
|
||||
* information
|
||||
* @param unfiledRecordFolderChildModel The unfiled folder child model which holds the information
|
||||
* @param unfiledRecordFolderId The identifier of an unfiled folder
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The created {@link UnfiledRecordFolderChild}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code unfiledRecordFolderId} is not a valid format or {@code
|
||||
* unfiledRecordFolderChildModel} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to add children to {@code
|
||||
* unfiledRecordFolderId}
|
||||
* <li>{@code unfiledRecordFolderId} does not exist
|
||||
* <li>new name clashes with an existing node in the current parent container
|
||||
* <li>model integrity exception, including node name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code unfiledRecordFolderId} is not a valid format or {@code unfiledRecordFolderChildModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to add children to {@code unfiledRecordFolderId}</li>
|
||||
* <li>{@code unfiledRecordFolderId} does not exist</li>
|
||||
* <li>new name clashes with an existing node in the current parent container</li>
|
||||
* <li>model integrity exception, including node name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
public UnfiledContainerChild createUnfiledRecordFolderChild(
|
||||
UnfiledContainerChild unfiledRecordFolderChildModel,
|
||||
String unfiledRecordFolderId,
|
||||
String parameters) {
|
||||
mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel);
|
||||
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));
|
||||
.processModel(
|
||||
UnfiledContainerChild.class,
|
||||
requestWithBody(
|
||||
POST,
|
||||
toJson(unfiledRecordFolderChildModel),
|
||||
"unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}",
|
||||
unfiledRecordFolderId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a record from file resource
|
||||
*
|
||||
* @param unfiledRecordFolderChildModel {@link UnfiledContainerChild} for electronic record to
|
||||
* be created
|
||||
* @param unfiledRecordFolderChildContent {@link File} pointing to the content of the electronic
|
||||
* record to be created
|
||||
* @param unfiledRecordFolderChildModel {@link UnfiledContainerChild} for electronic record to be created
|
||||
* @param unfiledRecordFolderChildContent {@link File} pointing to the content of the electronic record to be created
|
||||
* @param unfiledRecordFolderId The identifier of a unfiled record folder
|
||||
* @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);
|
||||
UnfiledContainerChild unfiledRecordFolderChildModel,
|
||||
String unfiledRecordFolderId,
|
||||
File unfiledRecordFolderChildContent
|
||||
) {
|
||||
mandatoryObject(
|
||||
"unfiledRecordFolderChildModel",
|
||||
unfiledRecordFolderChildModel
|
||||
);
|
||||
mandatoryObject(
|
||||
"unfiledRecordFolderChildContent",
|
||||
unfiledRecordFolderChildContent
|
||||
);
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
if (!unfiledRecordFolderChildModel.getNodeType().equals(CONTENT_TYPE)) {
|
||||
@@ -218,12 +250,14 @@ public class UnfiledRecordFolderAPI extends RMModelRequest {
|
||||
JsonNode root;
|
||||
try {
|
||||
root =
|
||||
new ObjectMapper()
|
||||
.readTree(
|
||||
toJson(
|
||||
unfiledRecordFolderChildModel,
|
||||
UnfiledContainerChild.class,
|
||||
UnfiledContainerChildMixin.class));
|
||||
new ObjectMapper()
|
||||
.readTree(
|
||||
toJson(
|
||||
unfiledRecordFolderChildModel,
|
||||
UnfiledContainerChild.class,
|
||||
UnfiledContainerChildMixin.class
|
||||
)
|
||||
);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Failed to convert model to JSON.", e);
|
||||
}
|
||||
@@ -231,24 +265,40 @@ public class UnfiledRecordFolderAPI extends RMModelRequest {
|
||||
Iterator<String> fieldNames = root.fieldNames();
|
||||
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());
|
||||
"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) {
|
||||
UnfiledRecordFolder unfiledRecordFolderModel,
|
||||
String unfiledRecordFolderId
|
||||
) {
|
||||
mandatoryObject("unfiledRecordFolderModel", unfiledRecordFolderModel);
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return updateUnfiledRecordFolder(unfiledRecordFolderModel, unfiledRecordFolderId, EMPTY);
|
||||
return updateUnfiledRecordFolder(
|
||||
unfiledRecordFolderModel,
|
||||
unfiledRecordFolderId,
|
||||
EMPTY
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -259,33 +309,34 @@ public class UnfiledRecordFolderAPI extends RMModelRequest {
|
||||
* @param parameters The URL parameters to add
|
||||
* @param returns The updated {@link UnfiledRecordFolder}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code unfiledRecordFolderId} is not a valid
|
||||
* format or {@code unfiledRecordFolderModel} is invalid
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to update {@code unfiledRecordFolderId}
|
||||
* <li>{@code unfiledRecordFolderId} does not exist
|
||||
* <li>the updated name clashes with an existing root category of special container in the
|
||||
* current fileplan
|
||||
* <li>model integrity exception, including file name with invalid characters
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>the update request is invalid or {@code unfiledRecordFolderId} is not a valid format or {@code unfiledRecordFolderModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to update {@code unfiledRecordFolderId}</li>
|
||||
* <li>{@code unfiledRecordFolderId} does not exist</li>
|
||||
* <li>the updated name clashes with an existing root category of special container in the current fileplan</li>
|
||||
* <li>model integrity exception, including file name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
public UnfiledRecordFolder updateUnfiledRecordFolder(
|
||||
UnfiledRecordFolder unfiledRecordFolderModel,
|
||||
String unfiledRecordFolderId,
|
||||
String parameters) {
|
||||
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));
|
||||
.processModel(
|
||||
UnfiledRecordFolder.class,
|
||||
requestWithBody(
|
||||
PUT,
|
||||
toJson(unfiledRecordFolderModel),
|
||||
"unfiled-record-folders/{unfiledRecordFolderId}?{parameters}",
|
||||
unfiledRecordFolderId,
|
||||
parameters
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -293,22 +344,24 @@ public class UnfiledRecordFolderAPI extends RMModelRequest {
|
||||
*
|
||||
* @param unfiledRecordFolderId The identifier of a unfiled record folder
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code unfiledRecordFolderId} is not a valid format
|
||||
* <li>authentication fails
|
||||
* <li>current user does not have permission to delete {@code unfiledRecordFolderId}
|
||||
* <li>{@code unfiledRecordFolderId} does not exist
|
||||
* <li>{@code unfiledRecordFolderId} is locked and cannot be deleted
|
||||
* </ul>
|
||||
* <ul>
|
||||
* <li>{@code unfiledRecordFolderId} is not a valid format</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to delete {@code unfiledRecordFolderId}</li>
|
||||
* <li>{@code unfiledRecordFolderId} does not exist</li>
|
||||
* <li>{@code unfiledRecordFolderId} is locked and cannot be deleted</li>
|
||||
* </ul>
|
||||
*/
|
||||
public void deleteUnfiledRecordFolder(String unfiledRecordFolderId) {
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
getRmRestWrapper()
|
||||
.processEmptyModel(
|
||||
simpleRequest(
|
||||
DELETE,
|
||||
"unfiled-record-folders/{recordFolderId}",
|
||||
unfiledRecordFolderId));
|
||||
.processEmptyModel(
|
||||
simpleRequest(
|
||||
DELETE,
|
||||
"unfiled-record-folders/{recordFolderId}",
|
||||
unfiledRecordFolderId
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,19 +36,23 @@ import java.util.UUID;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class CommonTestUtils {
|
||||
/** The default pattern used for the user full name when users are created with tas utility */
|
||||
|
||||
/**
|
||||
* 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() {}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* 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();
|
||||
return (
|
||||
clazz.getSimpleName().substring(0, 7) +
|
||||
UUID.randomUUID().toString().substring(0, 4).toUpperCase()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,10 +36,12 @@ 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;
|
||||
import org.apache.commons.lang.SystemUtils;
|
||||
import org.slf4j.Logger;
|
||||
@@ -48,11 +50,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Helper class for interaction with docker containers
|
||||
*
|
||||
@@ -61,22 +58,30 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
@Service
|
||||
public class DockerHelper {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(DockerHelper.class);
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(
|
||||
DockerHelper.class
|
||||
);
|
||||
private static final String REPO_IMAGE_NAME = "repository";
|
||||
@Getter @Setter private DockerClient dockerClient;
|
||||
|
||||
@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();
|
||||
DockerClientBuilder
|
||||
.getInstance(dockerHost)
|
||||
.withDockerCmdExecFactory(new NettyDockerCmdExecFactory())
|
||||
.build();
|
||||
} else {
|
||||
this.dockerClient =
|
||||
DockerClientBuilder.getInstance()
|
||||
.withDockerCmdExecFactory(new NettyDockerCmdExecFactory())
|
||||
.build();
|
||||
DockerClientBuilder
|
||||
.getInstance()
|
||||
.withDockerCmdExecFactory(new NettyDockerCmdExecFactory())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,28 +95,31 @@ public class DockerHelper {
|
||||
private List<String> getDockerLogs(String containerId, int timeStamp) {
|
||||
final List<String> logs = new ArrayList<>();
|
||||
|
||||
final LogContainerCmd logContainerCmd = getDockerClient().logContainerCmd(containerId);
|
||||
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
|
||||
.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();
|
||||
.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);
|
||||
LOGGER.error(
|
||||
"Failed to retrieve logs of container " + containerId,
|
||||
e
|
||||
);
|
||||
}
|
||||
|
||||
return logs;
|
||||
@@ -123,17 +131,21 @@ 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);
|
||||
final List<Container> alfrescoContainers = findContainersByImageName(
|
||||
REPO_IMAGE_NAME
|
||||
);
|
||||
if (alfrescoContainers.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
} 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;
|
||||
}
|
||||
}
|
||||
@@ -144,17 +156,22 @@ public class DockerHelper {
|
||||
* @param expectedException the expected exception to be thrown
|
||||
* @throws Exception
|
||||
*/
|
||||
public void checkExceptionIsInAlfrescoLogs(String expectedException) throws Exception {
|
||||
// Retry the operation because sometimes it takes few seconds to throw the 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)));
|
||||
});
|
||||
6000,
|
||||
30000,
|
||||
() -> {
|
||||
List<String> alfrescoLogs = getAlfrescoLogs();
|
||||
assertTrue(
|
||||
alfrescoLogs
|
||||
.stream()
|
||||
.anyMatch(logLine -> logLine.contains(expectedException)
|
||||
)
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -164,11 +181,14 @@ public class DockerHelper {
|
||||
* @return the containers
|
||||
*/
|
||||
private List<Container> findContainersByImageName(String imageName) {
|
||||
final List<Container> containers =
|
||||
getDockerClient().listContainersCmd().withShowAll(true).exec();
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,20 +27,21 @@
|
||||
package org.alfresco.rest.rm.community.util;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonUnwrapped;
|
||||
|
||||
import org.alfresco.rest.rm.community.model.record.RecordProperties;
|
||||
|
||||
/**
|
||||
* Mix class for Record POJO class Mix-in annotations are: a way to associate annotations with
|
||||
* classes without modifying (target) classes themselves.
|
||||
* Mix class for Record POJO class
|
||||
* Mix-in annotations are: a way to associate annotations with classes
|
||||
* without modifying (target) classes themselves.
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
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
|
||||
* Annotation used to indicate that a property should be serialized "unwrapped"
|
||||
* Its properties are instead included as properties of its containing Object
|
||||
*/
|
||||
@JsonUnwrapped
|
||||
abstract RecordProperties getProperties();
|
||||
|
||||
@@ -35,6 +35,7 @@ import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class ParameterCheck {
|
||||
|
||||
private ParameterCheck() {
|
||||
// Intentionally blank
|
||||
}
|
||||
@@ -46,10 +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 {
|
||||
public static void mandatoryString(
|
||||
final String paramName,
|
||||
final String paramValue
|
||||
) throws IllegalArgumentException {
|
||||
if (isBlank(paramValue)) {
|
||||
throw new IllegalArgumentException("'" + paramName + "' is a mandatory parameter.");
|
||||
throw new IllegalArgumentException(
|
||||
"'" + paramName + "' is a mandatory parameter."
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,10 +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 {
|
||||
public static void mandatoryObject(
|
||||
final String paramName,
|
||||
final Object object
|
||||
) throws IllegalArgumentException {
|
||||
if (object == null) {
|
||||
throw new IllegalArgumentException("'" + paramName + "' is a mandatory parameter.");
|
||||
throw new IllegalArgumentException(
|
||||
"'" + paramName + "' is a mandatory parameter."
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,15 +32,13 @@ 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;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Utility class for creating the json object
|
||||
*
|
||||
@@ -48,13 +46,20 @@ import java.util.List;
|
||||
* @since 2.6
|
||||
*/
|
||||
public class PojoUtility {
|
||||
/** Logger for the class. */
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(PojoUtility.class);
|
||||
|
||||
/**
|
||||
* Logger for the class.
|
||||
*/
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(
|
||||
PojoUtility.class
|
||||
);
|
||||
|
||||
/** Private constructor to prevent instantiation. */
|
||||
private PojoUtility() {}
|
||||
|
||||
/** see {@link #toJson(Object, Class, Class)} */
|
||||
/**
|
||||
* see {@link #toJson(Object, Class, Class)}
|
||||
*/
|
||||
public static String toJson(Object model) {
|
||||
mandatoryObject("model", model);
|
||||
|
||||
@@ -66,42 +71,45 @@ public class PojoUtility {
|
||||
*
|
||||
* @param model The java object model to convert
|
||||
* @param target Class (or interface) whose annotations to effectively override
|
||||
* @param mixinSource Class (or interface) whose annotations are to be "added" to target's
|
||||
* annotations, overriding as necessary
|
||||
* @param mixinSource Class (or interface) whose annotations are to be "added" to target's annotations, overriding as necessary
|
||||
* @return The converted java object as JSON string
|
||||
* @throws JsonProcessingException Throws exceptions if the given object doesn't match to the
|
||||
* POJO class model
|
||||
* @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) {
|
||||
// inject the "mix-in" annotations from FilePlanComponentMix to
|
||||
//inject the "mix-in" annotations from FilePlanComponentMix to
|
||||
// FilePlanComponent POJO class when converting to json
|
||||
mapper.addMixIn(target, mixinSource);
|
||||
}
|
||||
|
||||
// include only non null values
|
||||
//include only non null values
|
||||
mapper.setSerializationInclusion(Include.NON_NULL);
|
||||
|
||||
// return the json object
|
||||
//return the json object
|
||||
try {
|
||||
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(model);
|
||||
return mapper
|
||||
.writerWithDefaultPrettyPrinter()
|
||||
.writeValueAsString(model);
|
||||
} catch (JsonProcessingException error) {
|
||||
return error.toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converting json to java object
|
||||
* Converting json to java object
|
||||
*
|
||||
* @param json The json object to convert
|
||||
* @param classz Class for the java object
|
||||
* @param json The json object to convert
|
||||
* @param classz Class for the java object
|
||||
* @return The converted java object
|
||||
* @throws JsonProcessingException Throws exceptions if the given object doesn't match to the
|
||||
* POJO class model
|
||||
* @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) {
|
||||
mandatoryObject("model", classz);
|
||||
@@ -122,26 +130,28 @@ public class PojoUtility {
|
||||
/**
|
||||
* Converting json array into a list of java objects
|
||||
*
|
||||
* @param json The json array to convert
|
||||
* @param classz Class for the java object
|
||||
* @param json The json array to convert
|
||||
* @param classz Class for the java object
|
||||
* @return The list of converted java objects
|
||||
* @throws JsonProcessingException Throws exceptions if the given object doesn't match to the
|
||||
* POJO class model
|
||||
* @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) {
|
||||
|
||||
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 {
|
||||
asList = mapper.readValue(json.toString(), collectionType);
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Unable to convert the json array into a java collection.", e);
|
||||
LOGGER.error(
|
||||
"Unable to convert the json array into a java collection.",
|
||||
e
|
||||
);
|
||||
}
|
||||
|
||||
return asList;
|
||||
|
||||
@@ -30,10 +30,8 @@ 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 org.alfresco.rest.rm.community.model.common.ReviewPeriod;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
|
||||
|
||||
/**
|
||||
* Utility class for serializing @{FilePlanComponentReviewPeriod}
|
||||
@@ -42,23 +40,27 @@ import java.io.IOException;
|
||||
* @since 2.6
|
||||
*/
|
||||
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
|
||||
* @param serializers Provider for getting access to other serializers and configurations
|
||||
* registered with the ObjectMapper.
|
||||
* @param serializers Provider for getting access to other serializers and configurations registered with the ObjectMapper.
|
||||
* @throws IOException
|
||||
* @throws JsonProcessingException
|
||||
*/
|
||||
@Override
|
||||
public void serialize(ReviewPeriod value, JsonGenerator gen, SerializerProvider serializers)
|
||||
throws IOException, JsonProcessingException {
|
||||
// create the custom string value for the Review Period type
|
||||
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());
|
||||
new StringBuilder()
|
||||
.append(value.getPeriodType())
|
||||
.append("|")
|
||||
.append(value.getExpression())
|
||||
.toString()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,20 +27,21 @@
|
||||
package org.alfresco.rest.rm.community.util;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonUnwrapped;
|
||||
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildProperties;
|
||||
|
||||
/**
|
||||
* Mix class for Record POJO class Mix-in annotations are: a way to associate annotations with
|
||||
* classes without modifying (target) classes themselves.
|
||||
* Mix class for Record POJO class
|
||||
* Mix-in annotations are: a way to associate annotations with classes
|
||||
* without modifying (target) classes themselves.
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
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
|
||||
* Annotation used to indicate that a property should be serialized "unwrapped"
|
||||
* Its properties are instead included as properties of its containing Object
|
||||
*/
|
||||
@JsonUnwrapped
|
||||
abstract UnfiledContainerChildProperties getProperties();
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
*/
|
||||
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;
|
||||
@@ -34,9 +36,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* The v0 REST API for copy-to (which supports multi-item copy).
|
||||
*
|
||||
@@ -45,10 +44,14 @@ import java.util.List;
|
||||
*/
|
||||
@Component
|
||||
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.
|
||||
@@ -56,14 +59,18 @@ public class CopyToAPI extends BaseAPI {
|
||||
* @param user The username of the user to use.
|
||||
* @param password The password of the user.
|
||||
* @param targetContainerPath The destination to copy the nodes to. This should be in the format
|
||||
* "{site}/{container}/{path}", "{site}/{container}", "{store_type}/{store_id}/{id}/{path}",
|
||||
* "{store_type}/{store_id}/{id}" or "{store_type}/{store_id}".
|
||||
* "{site}/{container}/{path}", "{site}/{container}", "{store_type}/{store_id}/{id}/{path}",
|
||||
* "{store_type}/{store_id}/{id}" or "{store_type}/{store_id}".
|
||||
* @param nodeRefs The list of nodes to copy.
|
||||
* @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) {
|
||||
String user,
|
||||
String password,
|
||||
String targetContainerPath,
|
||||
List<String> nodeRefs
|
||||
) {
|
||||
return copyTo(user, password, 200, targetContainerPath, nodeRefs);
|
||||
}
|
||||
|
||||
@@ -74,26 +81,28 @@ public class CopyToAPI extends BaseAPI {
|
||||
* @param password The password of the user.
|
||||
* @param expectedStatusCode The expected return status code.
|
||||
* @param targetContainerPath The destination to copy the nodes to. This should be in the format
|
||||
* "{site}/{container}/{path}", "{site}/{container}", "{store_type}/{store_id}/{id}/{path}",
|
||||
* "{store_type}/{store_id}/{id}" or "{store_type}/{store_id}".
|
||||
* "{site}/{container}/{path}", "{site}/{container}", "{store_type}/{store_id}/{id}/{path}",
|
||||
* "{store_type}/{store_id}/{id}" or "{store_type}/{store_id}".
|
||||
* @param nodeRefs The list of nodes to copy.
|
||||
* @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) {
|
||||
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));
|
||||
user,
|
||||
password,
|
||||
expectedStatusCode,
|
||||
requestParams,
|
||||
MessageFormat.format(COPY_TO_API, "{0}", targetContainerPath)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ package org.alfresco.rest.v0;
|
||||
|
||||
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;
|
||||
@@ -37,67 +38,81 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API on Records Management Custom Model Reference
|
||||
* Definitions
|
||||
* Methods to make API requests using v0 API on Records Management Custom Model Reference Definitions
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
@Component
|
||||
public class CustomDefinitionsAPI extends BaseAPI {
|
||||
/** custom references endpoint */
|
||||
|
||||
/**
|
||||
* custom references endpoint
|
||||
*/
|
||||
private static final String CUSTOM_REFERENCE_API_ENDPOINT =
|
||||
"{0}rma/admin/customreferencedefinitions";
|
||||
"{0}rma/admin/customreferencedefinitions";
|
||||
|
||||
/** create reference endpoint */
|
||||
private static final String CREATE_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/customreferences";
|
||||
/**
|
||||
* create reference endpoint
|
||||
*/
|
||||
private static final String CREATE_RELATIONSHIP_API_ENDPOINT =
|
||||
"{0}node/{1}/customreferences";
|
||||
|
||||
/** logger */
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(CustomDefinitionsAPI.class);
|
||||
/**
|
||||
* logger
|
||||
*/
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(
|
||||
CustomDefinitionsAPI.class
|
||||
);
|
||||
|
||||
/**
|
||||
* Helper method to get the reference id for a custom reference
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param customDefinition custom reference definition name
|
||||
* @return <code>reference id</code> if the customDefinition is found <code> null </code>
|
||||
* otherwise
|
||||
* @return <code>reference id</code> if the customDefinition is found
|
||||
* <code> null </code> otherwise
|
||||
*
|
||||
*/
|
||||
public String getCustomReferenceId(
|
||||
String adminUser, String adminPassword, String customDefinition) {
|
||||
|
||||
JSONObject getResponse =
|
||||
doGetRequest(adminUser, adminPassword, CUSTOM_REFERENCE_API_ENDPOINT);
|
||||
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");
|
||||
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);
|
||||
boolean hasSource = customDefinition.equalsIgnoreCase(
|
||||
item.has("source") ? item.getString("source") : null
|
||||
);
|
||||
|
||||
boolean hasTarget =
|
||||
customDefinition.equalsIgnoreCase(
|
||||
item.has("target") ? item.getString("target") : null);
|
||||
boolean hasTarget = customDefinition.equalsIgnoreCase(
|
||||
item.has("target") ? item.getString("target") : null
|
||||
);
|
||||
|
||||
boolean hasLabel =
|
||||
customDefinition.equalsIgnoreCase(
|
||||
item.has("label") ? item.getString("label") : null);
|
||||
boolean hasLabel = customDefinition.equalsIgnoreCase(
|
||||
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);
|
||||
"Unable to get the refId for the custom reference definition {}",
|
||||
customDefinition
|
||||
);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -106,44 +121,56 @@ public class CustomDefinitionsAPI extends BaseAPI {
|
||||
/**
|
||||
* Helper method to add custom reference instance to the specified record node
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param recordNodeIdFrom node ref to set a custom reference
|
||||
* @param recordNodeIdTo node ref of the to record
|
||||
* @param relationshipType relation type to be created
|
||||
* @param recordNodeIdTo node ref of the to record
|
||||
* @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
|
||||
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
|
||||
"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");
|
||||
(setRelationshipStatus != null) &&
|
||||
setRelationshipStatus.getBoolean("success");
|
||||
assertTrue(
|
||||
"Creating relationship from "
|
||||
+ recordNodeIdFrom
|
||||
+ " to "
|
||||
+ recordNodeIdTo
|
||||
+ " failed.",
|
||||
success);
|
||||
"Creating relationship from " +
|
||||
recordNodeIdFrom +
|
||||
" to " +
|
||||
recordNodeIdTo +
|
||||
" failed.",
|
||||
success
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,81 +26,101 @@
|
||||
*/
|
||||
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;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API for Exporting Items
|
||||
*
|
||||
* @author Shubham Jain
|
||||
* @since 7.1.0
|
||||
*/
|
||||
|
||||
@Component
|
||||
public class ExportAPI extends BaseAPI {
|
||||
/** The URI to export an item */
|
||||
|
||||
/**
|
||||
* The URI to export an item
|
||||
*/
|
||||
private static final String EXPORT_API = "{0}rma/admin/export";
|
||||
|
||||
/**
|
||||
* Export a single Record/Record Folder/Record Category using V0 Export API
|
||||
*
|
||||
* @param user User performing the export
|
||||
* @param password User's Password
|
||||
* @param user User performing the export
|
||||
* @param password User's Password
|
||||
* @param expectedStatusCode Expected Response Code
|
||||
* @param nodeID ID of the Node(Record/RecordFolder) to be exported
|
||||
* @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) {
|
||||
String user,
|
||||
String password,
|
||||
int expectedStatusCode,
|
||||
String nodeID
|
||||
) {
|
||||
return export(
|
||||
user,
|
||||
password,
|
||||
expectedStatusCode,
|
||||
Collections.singletonList(getNodeRefSpacesStore() + nodeID));
|
||||
user,
|
||||
password,
|
||||
expectedStatusCode,
|
||||
Collections.singletonList(getNodeRefSpacesStore() + nodeID)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Export a list of nodes using V0 Export API
|
||||
*
|
||||
* @param user User performing the export
|
||||
* @param password User's Password
|
||||
* @param user User performing the export
|
||||
* @param password User's Password
|
||||
* @param expectedStatusCode Expected Response Code
|
||||
* @param nodeIDList List of the nodes to be exported
|
||||
* @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());
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Export API function to perform Export Operation on items with given noderefs using V0 Export
|
||||
* Rest API
|
||||
* Export API function to perform Export Operation on items with given noderefs using V0 Export Rest API
|
||||
*
|
||||
* @param user User performing the export
|
||||
* @param password User's Password
|
||||
* @param user User performing the export
|
||||
* @param password User's Password
|
||||
* @param expectedStatusCode Expected Response Code
|
||||
* @param nodeRefs list of the noderefs for the items to be exported
|
||||
* @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) {
|
||||
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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,10 @@ package org.alfresco.rest.v0;
|
||||
import static org.alfresco.rest.core.v0.APIUtils.convertHTTPResponseToJSON;
|
||||
import static org.apache.http.HttpStatus.SC_OK;
|
||||
|
||||
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;
|
||||
@@ -41,11 +45,6 @@ import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API for generalized holds
|
||||
*
|
||||
@@ -54,83 +53,123 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
@Component
|
||||
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";
|
||||
|
||||
/** The URI to add items to hold or to remove items from hold */
|
||||
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";
|
||||
|
||||
/**
|
||||
* The URI to add items to hold or to remove items from hold
|
||||
*/
|
||||
private static final String RM_HOLDS_API = "{0}rma/holds";
|
||||
|
||||
/** The URI to get holds. */
|
||||
/**
|
||||
* The URI to get holds.
|
||||
*/
|
||||
private static final String GET_RM_HOLDS = RM_HOLDS_API + "?{1}";
|
||||
|
||||
/**
|
||||
* Util method to create a hold
|
||||
*
|
||||
* @param user the user creating the hold
|
||||
* @param password the user's password
|
||||
* @param holdName the hold name
|
||||
* @param reason hold reason
|
||||
* @param user the user creating the hold
|
||||
* @param password the user's password
|
||||
* @param holdName the hold name
|
||||
* @param reason hold reason
|
||||
* @param description hold description
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
public HttpResponse createHold(
|
||||
String user, String password, String holdName, String reason, String description) {
|
||||
String user,
|
||||
String password,
|
||||
String holdName,
|
||||
String reason,
|
||||
String description
|
||||
) {
|
||||
return createHold(user, password, holdName, reason, description, SC_OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Util method to create a hold
|
||||
*
|
||||
* @param user the user creating the hold
|
||||
* @param password the user's password
|
||||
* @param holdName the hold name
|
||||
* @param reason hold reason
|
||||
* @param user the user creating the hold
|
||||
* @param password the user's password
|
||||
* @param holdName the hold name
|
||||
* @param reason hold reason
|
||||
* @param description hold description
|
||||
* @param expectedStatusCode The expected return status code.
|
||||
* @return The HTTP response or throws AssertionError if the returned status code is not as
|
||||
* expected.
|
||||
* @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) {
|
||||
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);
|
||||
user,
|
||||
password,
|
||||
expectedStatusCode,
|
||||
requestParams,
|
||||
CREATE_HOLDS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a hold and get the node ref of the hold from the response body
|
||||
*
|
||||
* @param user the user creating the hold
|
||||
* @param password the user's password
|
||||
* @param holdName the hold name to be created
|
||||
* @param reason reason of the hold to be created
|
||||
* @param user the user creating the hold
|
||||
* @param password the user's password
|
||||
* @param holdName the hold name to be created
|
||||
* @param reason reason of the hold to be created
|
||||
* @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);
|
||||
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, "");
|
||||
.getString("persistedObject")
|
||||
.replace(NODE_REF_WORKSPACE_SPACES_STORE, "");
|
||||
} catch (JSONException error) {
|
||||
LOGGER.error("Converting message body to JSON failed. Body: {}", httpResponse, error);
|
||||
LOGGER.error(
|
||||
"Converting message body to JSON failed. Body: {}",
|
||||
httpResponse,
|
||||
error
|
||||
);
|
||||
} catch (ParseException error) {
|
||||
LOGGER.error("Parsing message body failed.", error);
|
||||
}
|
||||
@@ -146,7 +185,12 @@ public class HoldsAPI extends BaseAPI {
|
||||
* @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);
|
||||
return deleteHold(
|
||||
user.getUsername(),
|
||||
user.getPassword(),
|
||||
holdNodeRef,
|
||||
SC_OK
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,17 +199,25 @@ public class HoldsAPI extends BaseAPI {
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param holdNodeRef the hold node ref
|
||||
* @return The HTTP Response or throws AssertionError if the returned status code is not as
|
||||
* expected.
|
||||
* @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) {
|
||||
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);
|
||||
username,
|
||||
password,
|
||||
expectedStatusCode,
|
||||
requestParams,
|
||||
RM_ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -177,109 +229,144 @@ public class HoldsAPI extends BaseAPI {
|
||||
* @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));
|
||||
deleteItem(
|
||||
username,
|
||||
password,
|
||||
String.format("/%s/%s", HOLDS_CONTAINER, holdName)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds item(content/record/record folder) to the hold
|
||||
*
|
||||
* @param user the user who adds the item to the hold
|
||||
* @param password the user's password
|
||||
* @param user the user who adds the item to the hold
|
||||
* @param password the user's password
|
||||
* @param itemNodeRef the nodeRef of the item to be added to hold
|
||||
* @param holdName the hold name
|
||||
* @param holdName the hold name
|
||||
* @return The HTTP response
|
||||
*/
|
||||
public HttpResponse addItemToHold(
|
||||
String user, String password, String itemNodeRef, String holdName) {
|
||||
String user,
|
||||
String password,
|
||||
String itemNodeRef,
|
||||
String holdName
|
||||
) {
|
||||
return addItemsToHolds(
|
||||
user,
|
||||
password,
|
||||
Collections.singletonList(itemNodeRef),
|
||||
Collections.singletonList(holdName));
|
||||
user,
|
||||
password,
|
||||
Collections.singletonList(itemNodeRef),
|
||||
Collections.singletonList(holdName)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a list of items (content/record/record folder) to a list of holds
|
||||
*
|
||||
* @param user the user who adds the items to the holds
|
||||
* @param password the user's password
|
||||
* @param user the user who adds the items to the holds
|
||||
* @param password the user's password
|
||||
* @param itemNodeRefs the list of items nodeRefs to be added to holds
|
||||
* @param holdNames the list of holds
|
||||
* @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);
|
||||
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
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a list of items (content/record/record folder) to a list of holds
|
||||
*
|
||||
* @param user the user who adds the items to the holds
|
||||
* @param password the user's password
|
||||
* @param user the user who adds the items to the holds
|
||||
* @param password the user's password
|
||||
* @param itemNodeRefs the list of items nodeRefs to be added to holds
|
||||
* @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);
|
||||
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
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Util method to add item(content/record/record folder) to the hold and get the error message
|
||||
*
|
||||
* @param user the user who adds the item to the hold
|
||||
* @param password the user's password
|
||||
* @param user the user who adds the item to the hold
|
||||
* @param password the user's password
|
||||
* @param itemNodeRef the nodeRef of the item to be added to hold
|
||||
* @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));
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Util method to create the request body used when adding items to holds or when removing items
|
||||
* from holds
|
||||
* Util method to create the request body used when adding items to holds or when removing items from holds
|
||||
*
|
||||
* @param items list of items node refs to be added to holds
|
||||
* @param items list of items node refs to be added to holds
|
||||
* @param holdNodeRefs list of hold node refs for add/remove items
|
||||
* @return JSONObject fo
|
||||
*/
|
||||
private JSONObject addOrRemoveToFromHoldJsonObject(
|
||||
List<String> items, List<String> holdNodeRefs) {
|
||||
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);
|
||||
@@ -289,96 +376,121 @@ public class HoldsAPI extends BaseAPI {
|
||||
/**
|
||||
* Remove item(content/record/record folder) from hold
|
||||
*
|
||||
* @param user the user who removes the item from the hold
|
||||
* @param password the user's password
|
||||
* @param user the user who removes the item from the hold
|
||||
* @param password the user's password
|
||||
* @param itemNodeRef the nodeRef of the item to be removed from hold
|
||||
* @param holdName the hold name
|
||||
* @param holdName the hold name
|
||||
* @return The HTTP response
|
||||
*/
|
||||
public HttpResponse removeItemFromHold(
|
||||
String user, String password, String itemNodeRef, String holdName) {
|
||||
String user,
|
||||
String password,
|
||||
String itemNodeRef,
|
||||
String holdName
|
||||
) {
|
||||
return removeItemsFromHolds(
|
||||
user,
|
||||
password,
|
||||
Collections.singletonList(itemNodeRef),
|
||||
Collections.singletonList(holdName));
|
||||
user,
|
||||
password,
|
||||
Collections.singletonList(itemNodeRef),
|
||||
Collections.singletonList(holdName)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a list of items (content/record/record folder) from a list of holds
|
||||
*
|
||||
* @param user the user who removes the item from the hold
|
||||
* @param password the user's password
|
||||
* @param itemNodeRefs the list of items nodeRefs to be removed from hold
|
||||
* @param holdNames the list of hold names
|
||||
* @param user the user who removes the item from the hold
|
||||
* @param password the user's password
|
||||
* @param itemNodeRefs the list of items nodeRefs to be removed from hold
|
||||
* @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);
|
||||
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
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a list of items (content/record/record folder) from a list of holds
|
||||
*
|
||||
* @param user the user who removes the item from the hold
|
||||
* @param password the user's password
|
||||
* @param user the user who removes the item from the hold
|
||||
* @param password the user's password
|
||||
* @param expectedStatus https status code expected
|
||||
* @param itemNodeRefs the list of items nodeRefs to be removed from hold
|
||||
* @param holdNodeRefs the list of hold node refs
|
||||
* @param itemNodeRefs the list of items nodeRefs to be removed from hold
|
||||
* @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);
|
||||
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
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Util method to remove item(content/record/record folder) from hold and get the error message
|
||||
*
|
||||
* @param user the user who removes the item from hold
|
||||
* @param password the user's password
|
||||
* @param user the user who removes the item from hold
|
||||
* @param password the user's password
|
||||
* @param itemNodeRef the nodeRef of the item to be removed from hold
|
||||
* @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));
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of the available holds which have the item node reference if includedInHold
|
||||
* parameter is true, otherwise a list of hold node references will be retrieved which do not
|
||||
* include the given node reference.
|
||||
* Get the list of the available holds which have the item node reference if includedInHold parameter is true,
|
||||
* otherwise a list of hold node references will be retrieved which do not include the given node reference.
|
||||
*
|
||||
* @param user The username of the user to use.
|
||||
* @param user The username of the user to use.
|
||||
* @param password The password of the user.
|
||||
* @param itemNodeRef The item node reference
|
||||
* @param includedInHold True to retrieve the holds which have the item node reference
|
||||
@@ -386,22 +498,34 @@ public class HoldsAPI extends BaseAPI {
|
||||
* @return return a list of hold entries
|
||||
*/
|
||||
public List<HoldEntry> getHolds(
|
||||
String user,
|
||||
String password,
|
||||
final String itemNodeRef,
|
||||
final Boolean includedInHold,
|
||||
final Boolean fileOnly) {
|
||||
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 : "");
|
||||
(
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
*/
|
||||
package org.alfresco.rest.v0;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import org.alfresco.dataprep.AlfrescoHttpClient;
|
||||
import org.alfresco.dataprep.AlfrescoHttpClientFactory;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
@@ -35,8 +36,6 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
/**
|
||||
* The v0 REST API for nodes
|
||||
*
|
||||
@@ -45,16 +44,19 @@ import java.text.MessageFormat;
|
||||
*/
|
||||
@Component
|
||||
public class NodeAPI extends BaseAPI {
|
||||
|
||||
/** Logger for the class. */
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(NodeAPI.class);
|
||||
|
||||
/** The URI for the get node API. */
|
||||
private static final String GET_NODE_API = "{0}alfresco/s/slingshot/doclib2/node/{1}";
|
||||
private static final String GET_NODE_API =
|
||||
"{0}alfresco/s/slingshot/doclib2/node/{1}";
|
||||
|
||||
@Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
@Autowired
|
||||
private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
|
||||
/**
|
||||
* Get the node metadata using the using the node data webscript: Document List v2 Component
|
||||
* Get the node metadata using the using the node data webscript: Document List v2 Component
|
||||
*
|
||||
* @param username
|
||||
* @param password
|
||||
@@ -65,7 +67,11 @@ public class NodeAPI extends BaseAPI {
|
||||
String requestURL;
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
requestURL =
|
||||
MessageFormat.format(GET_NODE_API, client.getAlfrescoUrl(), NODE_PREFIX + nodeId);
|
||||
MessageFormat.format(
|
||||
GET_NODE_API,
|
||||
client.getAlfrescoUrl(),
|
||||
NODE_PREFIX + nodeId
|
||||
);
|
||||
client.close();
|
||||
return doGetRequest(username, password, requestURL);
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
package org.alfresco.rest.v0;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
import org.alfresco.dataprep.AlfrescoHttpClient;
|
||||
import org.alfresco.dataprep.AlfrescoHttpClientFactory;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
@@ -41,9 +43,6 @@ import org.json.simple.JSONValue;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
|
||||
/**
|
||||
* The v0 API to get the node properties
|
||||
*
|
||||
@@ -51,10 +50,15 @@ import java.text.MessageFormat;
|
||||
*/
|
||||
@Component
|
||||
public class NodePropertiesAPI extends BaseAPI {
|
||||
/** The URI for the get node API. */
|
||||
private static final String GET_NODE_API = "{0}alfresco/s/slingshot/node/{1}";
|
||||
|
||||
@Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
/**
|
||||
* The URI for the get node API.
|
||||
*/
|
||||
private static final String GET_NODE_API =
|
||||
"{0}alfresco/s/slingshot/node/{1}";
|
||||
|
||||
@Autowired
|
||||
private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
|
||||
/**
|
||||
* Get the node properties
|
||||
@@ -62,15 +66,21 @@ public class NodePropertiesAPI extends BaseAPI {
|
||||
* @param username
|
||||
* @param password
|
||||
* @param nodeId
|
||||
* @return JSONArray object
|
||||
* @return JSONArray object
|
||||
*/
|
||||
protected JSONArray getNodeProperties(String username, String password, String nodeId) {
|
||||
protected JSONArray getNodeProperties(
|
||||
String username,
|
||||
String password,
|
||||
String nodeId
|
||||
) {
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String requestURL =
|
||||
MessageFormat.format(GET_NODE_API, client.getAlfrescoUrl(), NODE_PREFIX + nodeId);
|
||||
String requestURL = MessageFormat.format(
|
||||
GET_NODE_API,
|
||||
client.getAlfrescoUrl(),
|
||||
NODE_PREFIX + nodeId
|
||||
);
|
||||
|
||||
// doRequest from BaseAPI cannot be used as parsing the response body to
|
||||
// org.json.JSONObject is throwing an
|
||||
// doRequest from BaseAPI cannot be used as parsing the response body to org.json.JSONObject is throwing an
|
||||
// JSONException
|
||||
// construct a get request
|
||||
HttpGet get = new HttpGet(requestURL);
|
||||
@@ -80,7 +90,10 @@ public class NodePropertiesAPI extends BaseAPI {
|
||||
try {
|
||||
responseString = EntityUtils.toString(entity, "UTF-8");
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException("Failed to read the response", e);
|
||||
throw new IllegalArgumentException(
|
||||
"Failed to read the response",
|
||||
e
|
||||
);
|
||||
}
|
||||
client.close();
|
||||
Object obj = JSONValue.parse(responseString);
|
||||
@@ -115,14 +128,18 @@ public class NodePropertiesAPI extends BaseAPI {
|
||||
* @return Return the content property string
|
||||
*/
|
||||
public String getContentProperty(UserModel userModel, String nodeId) {
|
||||
JSONArray properties =
|
||||
getNodeProperties(userModel.getUsername(), userModel.getPassword(), nodeId);
|
||||
JSONArray properties = getNodeProperties(
|
||||
userModel.getUsername(),
|
||||
userModel.getPassword(),
|
||||
nodeId
|
||||
);
|
||||
|
||||
for (int i = 0; i < properties.size(); i++) {
|
||||
JSONObject object = (JSONObject) properties.get(i);
|
||||
JSONArray valuesArray = (JSONArray) object.get("values");
|
||||
if (valuesArray.toString().contains("contentUrl")) {
|
||||
return ((JSONObject) valuesArray.get(0)).get("value").toString();
|
||||
return ((JSONObject) valuesArray.get(0)).get("value")
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -28,6 +28,10 @@ package org.alfresco.rest.v0;
|
||||
|
||||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.List;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.alfresco.rest.rm.community.model.audit.AuditEntry;
|
||||
import org.alfresco.rest.rm.community.util.PojoUtility;
|
||||
@@ -37,11 +41,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* The v0 REST API for rm audit logs
|
||||
*
|
||||
@@ -50,41 +49,51 @@ import java.util.List;
|
||||
*/
|
||||
@Component
|
||||
public class RMAuditAPI extends BaseAPI {
|
||||
|
||||
/** Logger for the class. */
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(RMAuditAPI.class);
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(
|
||||
RMAuditAPI.class
|
||||
);
|
||||
|
||||
/** The URI for the audit API. */
|
||||
private static final String RM_AUDIT_API = "{0}rma/admin/rmauditlog";
|
||||
|
||||
private static final String RM_AUDIT_LOG_API = RM_AUDIT_API + "?{1}";
|
||||
|
||||
/**
|
||||
* Returns a list of rm audit entries .
|
||||
*
|
||||
* @param user The username of the user to use.
|
||||
* @param user The username of the user to use.
|
||||
* @param password The password of the user.
|
||||
* @param size Maximum number of log entries to return
|
||||
* @param event The name of audit event to be retrieved
|
||||
* @param size Maximum number of log entries to return
|
||||
* @param event The name of audit event to be retrieved
|
||||
* @return return Only return log entries matching this event
|
||||
*/
|
||||
public List<AuditEntry> getRMAuditLog(
|
||||
String user, String password, final int size, final String event) {
|
||||
String user,
|
||||
String password,
|
||||
final int size,
|
||||
final String event
|
||||
) {
|
||||
String parameters = null;
|
||||
try {
|
||||
parameters =
|
||||
"size="
|
||||
+ size
|
||||
+ (event != null ? "&event=" + URLEncoder.encode(event, "UTF-8") : "");
|
||||
"size=" +
|
||||
size +
|
||||
(
|
||||
event != null
|
||||
? "&event=" + URLEncoder.encode(event, "UTF-8")
|
||||
: ""
|
||||
);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
LOGGER.error("Unable to encode the event name {}", e.getMessage());
|
||||
}
|
||||
JSONArray auditEntries =
|
||||
doGetRequest(
|
||||
user,
|
||||
password,
|
||||
MessageFormat.format(RM_AUDIT_LOG_API, "{0}", parameters))
|
||||
.getJSONObject("data")
|
||||
.getJSONArray("entries");
|
||||
JSONArray auditEntries = doGetRequest(
|
||||
user,
|
||||
password,
|
||||
MessageFormat.format(RM_AUDIT_LOG_API, "{0}", parameters)
|
||||
)
|
||||
.getJSONObject("data")
|
||||
.getJSONArray("entries");
|
||||
|
||||
return PojoUtility.jsonToObject(auditEntries, AuditEntry.class);
|
||||
}
|
||||
@@ -97,11 +106,17 @@ public class RMAuditAPI extends BaseAPI {
|
||||
* @throws AssertionError If the API call didn't clear the audit log.
|
||||
*/
|
||||
public void clearAuditLog(String username, String password) {
|
||||
JSONObject deleteStatus = doDeleteRequest(username, password, RM_AUDIT_API);
|
||||
JSONObject deleteStatus = doDeleteRequest(
|
||||
username,
|
||||
password,
|
||||
RM_AUDIT_API
|
||||
);
|
||||
|
||||
assertTrue(
|
||||
deleteStatus != null
|
||||
// audit clear and login events are returned
|
||||
&& getRMAuditLog(username, password, 100, null).size() == 2);
|
||||
deleteStatus != null &&
|
||||
//audit clear and login events are returned
|
||||
getRMAuditLog(username, password, 100, null).size() ==
|
||||
2
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,13 @@ import static org.testng.AssertJUnit.assertFalse;
|
||||
import static org.testng.AssertJUnit.assertTrue;
|
||||
import static org.testng.AssertJUnit.fail;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
import java.time.Instant;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import org.alfresco.dataprep.AlfrescoHttpClient;
|
||||
import org.alfresco.dataprep.AlfrescoHttpClientFactory;
|
||||
import org.alfresco.dataprep.UserService;
|
||||
@@ -56,54 +63,58 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
import java.time.Instant;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API on RM items (move, update and other actions) including
|
||||
* adding users to RM roles
|
||||
* Methods to make API requests using v0 API on RM items (move, update and other actions) including adding users to RM roles
|
||||
*
|
||||
* @author Oana Nechiforescu
|
||||
* @since 2.5
|
||||
*/
|
||||
@Component
|
||||
public class RMRolesAndActionsAPI extends BaseAPI {
|
||||
|
||||
/** The URI to view the configured roles and capabilities. */
|
||||
private static final String RM_ROLES = "{0}rma/admin/rmroles";
|
||||
/** The URI for REST requests about a particular configured role. */
|
||||
private static final String RM_ROLES_ROLE = RM_ROLES + "/{1}";
|
||||
|
||||
private static final String RM_ROLES_AUTHORITIES =
|
||||
"{0}rm/roles/{1}/authorities/{2}?alf_ticket={3}";
|
||||
"{0}rm/roles/{1}/authorities/{2}?alf_ticket={3}";
|
||||
|
||||
// logger
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(RMRolesAndActionsAPI.class);
|
||||
private static final String MOVE_ACTIONS_API = "action/rm-move-to/site/rm/documentLibrary/{0}";
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(
|
||||
RMRolesAndActionsAPI.class
|
||||
);
|
||||
private static final String MOVE_ACTIONS_API =
|
||||
"action/rm-move-to/site/rm/documentLibrary/{0}";
|
||||
|
||||
/** http client factory */
|
||||
@Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
@Autowired
|
||||
private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
|
||||
/** user service */
|
||||
@Autowired private UserService userService;
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private DataUserAIS dataUser;
|
||||
|
||||
@Autowired private DataUserAIS dataUser;
|
||||
/**
|
||||
* Get all the configured RM roles.
|
||||
*
|
||||
* @param adminUser The RM admin user.
|
||||
* @param adminPassword The password of the user.
|
||||
* @return The RM roles in the system (Note that this will be the internal names, not the
|
||||
* display labels).
|
||||
* @return The RM roles in the system (Note that this will be the internal names, not the display labels).
|
||||
*/
|
||||
public Set<String> getConfiguredRoles(String adminUser, String adminPassword) {
|
||||
public Set<String> getConfiguredRoles(
|
||||
String adminUser,
|
||||
String adminPassword
|
||||
) {
|
||||
// Using "is=true" includes the in-place readers and writers.
|
||||
final JSONObject jsonObject =
|
||||
doGetRequest(adminUser, adminPassword, RM_ROLES + "?is=true").getJSONObject("data");
|
||||
final JSONObject jsonObject = doGetRequest(
|
||||
adminUser,
|
||||
adminPassword,
|
||||
RM_ROLES + "?is=true"
|
||||
)
|
||||
.getJSONObject("data");
|
||||
return jsonObject.toMap().keySet();
|
||||
}
|
||||
|
||||
@@ -115,25 +126,40 @@ public class RMRolesAndActionsAPI extends BaseAPI {
|
||||
* @param role The role to get capabilities for.
|
||||
* @return The set of system names for the capabilities.
|
||||
*/
|
||||
public Set<String> getCapabilitiesForRole(String adminUser, String adminPassword, String role) {
|
||||
final JSONObject jsonObject =
|
||||
doGetRequest(adminUser, adminPassword, RM_ROLES + "?is=true").getJSONObject("data");
|
||||
public Set<String> getCapabilitiesForRole(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String role
|
||||
) {
|
||||
final JSONObject jsonObject = doGetRequest(
|
||||
adminUser,
|
||||
adminPassword,
|
||||
RM_ROLES + "?is=true"
|
||||
)
|
||||
.getJSONObject("data");
|
||||
assertTrue(
|
||||
"Could not find role '" + role + "' in " + jsonObject.keySet(),
|
||||
jsonObject.has(role));
|
||||
return jsonObject.getJSONObject(role).getJSONObject("capabilities").keySet();
|
||||
"Could not find role '" + role + "' in " + jsonObject.keySet(),
|
||||
jsonObject.has(role)
|
||||
);
|
||||
return jsonObject
|
||||
.getJSONObject(role)
|
||||
.getJSONObject("capabilities")
|
||||
.keySet();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the body for PUT/POST Roles API requests
|
||||
*
|
||||
* @param roleName the role name
|
||||
* @param roleName the role name
|
||||
* @param roleDisplayLabel a human-readable label for the role
|
||||
* @param capabilities a list of capabilities for the role
|
||||
* @param capabilities a list of capabilities for the role
|
||||
* @return
|
||||
*/
|
||||
private JSONObject roleRequestBody(
|
||||
String roleName, String roleDisplayLabel, Set<String> capabilities) {
|
||||
String roleName,
|
||||
String roleDisplayLabel,
|
||||
Set<String> capabilities
|
||||
) {
|
||||
final JSONObject requestBody = new JSONObject();
|
||||
requestBody.put("name", roleName);
|
||||
requestBody.put("displayLabel", roleDisplayLabel);
|
||||
@@ -153,17 +179,19 @@ public class RMRolesAndActionsAPI extends BaseAPI {
|
||||
* @param capabilities A list of capabilities for the role.
|
||||
*/
|
||||
public void createRole(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String roleName,
|
||||
String roleDisplayLabel,
|
||||
Set<String> capabilities) {
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String roleName,
|
||||
String roleDisplayLabel,
|
||||
Set<String> capabilities
|
||||
) {
|
||||
doPostJsonRequest(
|
||||
adminUser,
|
||||
adminPassword,
|
||||
HttpStatus.SC_OK,
|
||||
roleRequestBody(roleName, roleDisplayLabel, capabilities),
|
||||
RM_ROLES);
|
||||
adminUser,
|
||||
adminPassword,
|
||||
HttpStatus.SC_OK,
|
||||
roleRequestBody(roleName, roleDisplayLabel, capabilities),
|
||||
RM_ROLES
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -176,18 +204,20 @@ public class RMRolesAndActionsAPI extends BaseAPI {
|
||||
* @param capabilities A list of capabilities for the role.
|
||||
*/
|
||||
public void updateRole(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String roleName,
|
||||
String roleDisplayLabel,
|
||||
Set<String> capabilities) {
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String roleName,
|
||||
String roleDisplayLabel,
|
||||
Set<String> capabilities
|
||||
) {
|
||||
doPutJsonRequest(
|
||||
adminUser,
|
||||
adminPassword,
|
||||
HttpStatus.SC_OK,
|
||||
roleRequestBody(roleName, roleDisplayLabel, capabilities),
|
||||
RM_ROLES_ROLE,
|
||||
roleName);
|
||||
adminUser,
|
||||
adminPassword,
|
||||
HttpStatus.SC_OK,
|
||||
roleRequestBody(roleName, roleDisplayLabel, capabilities),
|
||||
RM_ROLES_ROLE,
|
||||
roleName
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -197,17 +227,32 @@ public class RMRolesAndActionsAPI extends BaseAPI {
|
||||
* @param adminPassword The password for the admin user.
|
||||
* @param roleName The name of the role to be deleted.
|
||||
*/
|
||||
public void deleteRole(String adminUser, String adminPassword, String roleName) {
|
||||
public void deleteRole(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String roleName
|
||||
) {
|
||||
doDeleteRequest(
|
||||
adminUser, adminPassword, MessageFormat.format(RM_ROLES_ROLE, "{0}", roleName));
|
||||
adminUser,
|
||||
adminPassword,
|
||||
MessageFormat.format(RM_ROLES_ROLE, "{0}", roleName)
|
||||
);
|
||||
assertFalse(
|
||||
"Failed to delete role " + roleName + " with " + adminUser,
|
||||
getConfiguredRoles(adminUser, adminPassword).contains(roleName));
|
||||
"Failed to delete role " + roleName + " with " + adminUser,
|
||||
getConfiguredRoles(adminUser, adminPassword).contains(roleName)
|
||||
);
|
||||
}
|
||||
|
||||
/** create user and assign to records management role */
|
||||
/**
|
||||
* create user and assign to records management role
|
||||
*/
|
||||
public void createUserAndAssignToRole(
|
||||
String adminUser, String adminPassword, String userName, String password, String role) {
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String userName,
|
||||
String password,
|
||||
String role
|
||||
) {
|
||||
if (!userService.userExists(adminUser, adminPassword, userName)) {
|
||||
dataUser.createUser(userName, password);
|
||||
}
|
||||
@@ -220,15 +265,19 @@ public class RMRolesAndActionsAPI extends BaseAPI {
|
||||
* @throws AssertionError if the assignation is unsuccessful.
|
||||
*/
|
||||
public void assignRoleToUser(
|
||||
String adminUser, String adminPassword, String userName, String role) {
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String userName,
|
||||
String role
|
||||
) {
|
||||
final AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
final String reqURL =
|
||||
MessageFormat.format(
|
||||
RM_ROLES_AUTHORITIES,
|
||||
client.getApiUrl(),
|
||||
role,
|
||||
userName,
|
||||
client.getAlfTicket(adminUser, adminPassword));
|
||||
final String reqURL = MessageFormat.format(
|
||||
RM_ROLES_AUTHORITIES,
|
||||
client.getApiUrl(),
|
||||
role,
|
||||
userName,
|
||||
client.getAlfTicket(adminUser, adminPassword)
|
||||
);
|
||||
|
||||
HttpPost request = null;
|
||||
HttpResponse response;
|
||||
@@ -242,46 +291,65 @@ public class RMRolesAndActionsAPI extends BaseAPI {
|
||||
client.close();
|
||||
}
|
||||
assertEquals(
|
||||
"Assigning role " + role + " to user " + userName + " failed.",
|
||||
SC_OK,
|
||||
response.getStatusLine().getStatusCode());
|
||||
"Assigning role " + role + " to user " + userName + " failed.",
|
||||
SC_OK,
|
||||
response.getStatusLine().getStatusCode()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move action
|
||||
*
|
||||
* @param user the user to move the contentPath
|
||||
* @param password the user's password
|
||||
* @param contentPath path to the content to be moved
|
||||
* @param user the user to move the contentPath
|
||||
* @param password the user's password
|
||||
* @param contentPath path to the content to be moved
|
||||
* @param destinationPath destination path
|
||||
* @throws AssertionError if the move was unsuccessful.
|
||||
*/
|
||||
public void moveTo(String user, String password, String contentPath, String destinationPath) {
|
||||
public void moveTo(
|
||||
String user,
|
||||
String password,
|
||||
String contentPath,
|
||||
String destinationPath
|
||||
) {
|
||||
String contentNodeRef =
|
||||
getNodeRefSpacesStore() + getItemNodeRef(user, password, contentPath);
|
||||
getNodeRefSpacesStore() +
|
||||
getItemNodeRef(user, password, contentPath);
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String url =
|
||||
MessageFormat.format(
|
||||
client.getAlfrescoUrl() + "alfresco/s/slingshot/doclib/" + MOVE_ACTIONS_API,
|
||||
destinationPath);
|
||||
String url = MessageFormat.format(
|
||||
client.getAlfrescoUrl() +
|
||||
"alfresco/s/slingshot/doclib/" +
|
||||
MOVE_ACTIONS_API,
|
||||
destinationPath
|
||||
);
|
||||
HttpPost request = new HttpPost(url);
|
||||
|
||||
boolean success = false;
|
||||
try {
|
||||
JSONObject body = new JSONObject();
|
||||
body.put("nodeRefs", new JSONArray(Arrays.asList(contentNodeRef)));
|
||||
StringEntity se = new StringEntity(body.toString(), AlfrescoHttpClient.UTF_8_ENCODING);
|
||||
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, MIME_TYPE_JSON));
|
||||
StringEntity se = new StringEntity(
|
||||
body.toString(),
|
||||
AlfrescoHttpClient.UTF_8_ENCODING
|
||||
);
|
||||
se.setContentType(
|
||||
new BasicHeader(HTTP.CONTENT_TYPE, MIME_TYPE_JSON)
|
||||
);
|
||||
request.setEntity(se);
|
||||
|
||||
HttpResponse response = client.execute(user, password, request);
|
||||
switch (response.getStatusLine().getStatusCode()) {
|
||||
case HttpStatus.SC_OK:
|
||||
JSONObject json = new JSONObject(EntityUtils.toString(response.getEntity()));
|
||||
JSONObject json = new JSONObject(
|
||||
EntityUtils.toString(response.getEntity())
|
||||
);
|
||||
success = (Boolean) json.get("overallSuccess");
|
||||
break;
|
||||
case HttpStatus.SC_NOT_FOUND:
|
||||
LOGGER.info("The provided paths couldn't be found " + response.toString());
|
||||
LOGGER.info(
|
||||
"The provided paths couldn't be found " +
|
||||
response.toString()
|
||||
);
|
||||
break;
|
||||
default:
|
||||
LOGGER.error("Unable to move: " + response.toString());
|
||||
@@ -296,90 +364,115 @@ public class RMRolesAndActionsAPI extends BaseAPI {
|
||||
client.close();
|
||||
}
|
||||
|
||||
assertTrue("Moving " + contentPath + " to " + destinationPath + " failed.", success);
|
||||
assertTrue(
|
||||
"Moving " + contentPath + " to " + destinationPath + " failed.",
|
||||
success
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move action
|
||||
*
|
||||
* @param user the user to move the contentPath
|
||||
* @param password the user's password
|
||||
* @param contentPath path to the content to be moved
|
||||
* @param user the user to move the contentPath
|
||||
* @param password the user's password
|
||||
* @param contentPath path to the content to be moved
|
||||
* @param destinationPath destination path
|
||||
* @throws AssertionError if the move was unexpectedly successful.
|
||||
*/
|
||||
public void moveToAndExpectFailure(
|
||||
String user, String password, String contentPath, String destinationPath) {
|
||||
String user,
|
||||
String password,
|
||||
String contentPath,
|
||||
String destinationPath
|
||||
) {
|
||||
try {
|
||||
moveTo(user, password, contentPath, destinationPath);
|
||||
} catch (AssertionError e) {
|
||||
// We are expecting the move to fail.
|
||||
return;
|
||||
}
|
||||
fail("Moving " + contentPath + " to " + destinationPath + " succeeded unexpectedly.");
|
||||
fail(
|
||||
"Moving " +
|
||||
contentPath +
|
||||
" to " +
|
||||
destinationPath +
|
||||
" succeeded unexpectedly."
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an action on the given content
|
||||
*
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param contentName the content name
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
public HttpResponse executeAction(
|
||||
String user, String password, String contentName, RM_ACTIONS action) {
|
||||
String user,
|
||||
String password,
|
||||
String contentName,
|
||||
RM_ACTIONS action
|
||||
) {
|
||||
return executeAction(user, password, contentName, action, null, SC_OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an action on the given content
|
||||
*
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param contentName the content name
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
public HttpResponse executeActionAndExpectResponseCode(
|
||||
String user, String password, String contentName, RM_ACTIONS action, int status) {
|
||||
String user,
|
||||
String password,
|
||||
String contentName,
|
||||
RM_ACTIONS action,
|
||||
int status
|
||||
) {
|
||||
return executeAction(user, password, contentName, action, null, status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an action on the given content
|
||||
*
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param contentName the content name
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
public HttpResponse executeAction(
|
||||
String user,
|
||||
String password,
|
||||
String contentName,
|
||||
RM_ACTIONS action,
|
||||
ZonedDateTime date) {
|
||||
String user,
|
||||
String password,
|
||||
String contentName,
|
||||
RM_ACTIONS action,
|
||||
ZonedDateTime date
|
||||
) {
|
||||
return executeAction(user, password, contentName, action, date, SC_OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the body for Actions API requests
|
||||
*
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param contentName the content on which the action is executed
|
||||
* @param action the action executed
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param contentName the content on which the action is executed
|
||||
* @param action the action executed
|
||||
* @param actionsParams the request parameters
|
||||
* @return the JSONObject created
|
||||
*/
|
||||
private JSONObject actionsRequestBody(
|
||||
String user,
|
||||
String password,
|
||||
String contentName,
|
||||
RM_ACTIONS action,
|
||||
JSONObject actionsParams) {
|
||||
String user,
|
||||
String password,
|
||||
String contentName,
|
||||
RM_ACTIONS action,
|
||||
JSONObject actionsParams
|
||||
) {
|
||||
final String recNodeRef =
|
||||
getNodeRefSpacesStore()
|
||||
+ contentService.getNodeRef(user, password, RM_SITE_ID, contentName);
|
||||
getNodeRefSpacesStore() +
|
||||
contentService.getNodeRef(user, password, RM_SITE_ID, contentName);
|
||||
final JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("name", action.getAction());
|
||||
requestParams.put("nodeRef", recNodeRef);
|
||||
@@ -392,143 +485,218 @@ public class RMRolesAndActionsAPI extends BaseAPI {
|
||||
/**
|
||||
* Perform an action on the record folder
|
||||
*
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param contentName the content name
|
||||
* @param date the date to be updated
|
||||
* @param date the date to be updated
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
public HttpResponse executeAction(
|
||||
String user,
|
||||
String password,
|
||||
String contentName,
|
||||
RM_ACTIONS action,
|
||||
ZonedDateTime date,
|
||||
int status) {
|
||||
String user,
|
||||
String password,
|
||||
String contentName,
|
||||
RM_ACTIONS action,
|
||||
ZonedDateTime date,
|
||||
int status
|
||||
) {
|
||||
final JSONObject actionParams = new JSONObject();
|
||||
if (date != null) {
|
||||
actionParams.put(
|
||||
"asOfDate",
|
||||
new JSONObject().put("iso8601", ISO_INSTANT_FORMATTER.format(date)));
|
||||
"asOfDate",
|
||||
new JSONObject()
|
||||
.put("iso8601", ISO_INSTANT_FORMATTER.format(date))
|
||||
);
|
||||
}
|
||||
final JSONObject requestParams =
|
||||
actionsRequestBody(user, password, contentName, action, actionParams);
|
||||
return doPostJsonRequest(user, password, status, requestParams, RM_ACTIONS_API);
|
||||
final JSONObject requestParams = actionsRequestBody(
|
||||
user,
|
||||
password,
|
||||
contentName,
|
||||
action,
|
||||
actionParams
|
||||
);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
status,
|
||||
requestParams,
|
||||
RM_ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete an event on the record/record folder
|
||||
*
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param nodeName the node name
|
||||
* @param event the event to be completed
|
||||
* @param date the date to be updated
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param nodeName the node name
|
||||
* @param event the event to be completed
|
||||
* @param date the date to be updated
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
public HttpResponse completeEvent(
|
||||
String user, String password, String nodeName, RMEvents event, Instant date) {
|
||||
String user,
|
||||
String password,
|
||||
String nodeName,
|
||||
RMEvents event,
|
||||
Instant date
|
||||
) {
|
||||
date = (date != null) ? date : Instant.now();
|
||||
final JSONObject actionParams =
|
||||
final JSONObject actionParams = new JSONObject()
|
||||
.put("eventName", event.getEventName())
|
||||
.put("eventCompletedBy", user)
|
||||
.put(
|
||||
"eventCompletedAt",
|
||||
new JSONObject()
|
||||
.put("eventName", event.getEventName())
|
||||
.put("eventCompletedBy", user)
|
||||
.put(
|
||||
"eventCompletedAt",
|
||||
new JSONObject()
|
||||
.put("iso8601", ISO_INSTANT_FORMATTER.format(date)));
|
||||
final JSONObject requestParams =
|
||||
actionsRequestBody(
|
||||
user, password, nodeName, RM_ACTIONS.COMPLETE_EVENT, actionParams);
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API);
|
||||
.put("iso8601", ISO_INSTANT_FORMATTER.format(date))
|
||||
);
|
||||
final JSONObject requestParams = actionsRequestBody(
|
||||
user,
|
||||
password,
|
||||
nodeName,
|
||||
RM_ACTIONS.COMPLETE_EVENT,
|
||||
actionParams
|
||||
);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
RM_ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undo an event on the record/record folder
|
||||
*
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param user the user executing the action
|
||||
* @param password the user's password
|
||||
* @param contentName the content name
|
||||
* @param event the event to be undone
|
||||
* @param event the event to be undone
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
public HttpResponse undoEvent(
|
||||
String user, String password, String contentName, RMEvents event) {
|
||||
final JSONObject requestParams =
|
||||
actionsRequestBody(
|
||||
user,
|
||||
password,
|
||||
contentName,
|
||||
RM_ACTIONS.UNDO_EVENT,
|
||||
new JSONObject().put("eventName", event.getEventName()));
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API);
|
||||
String user,
|
||||
String password,
|
||||
String contentName,
|
||||
RMEvents event
|
||||
) {
|
||||
final JSONObject requestParams = actionsRequestBody(
|
||||
user,
|
||||
password,
|
||||
contentName,
|
||||
RM_ACTIONS.UNDO_EVENT,
|
||||
new JSONObject().put("eventName", event.getEventName())
|
||||
);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
RM_ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes every item in the given container
|
||||
*
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @param siteId the site id in which the container is located
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @param siteId the site id in which the container is located
|
||||
* @param containerName the container to look for items into
|
||||
* @throws AssertionError if not all items could be deleted.
|
||||
*/
|
||||
public void deleteAllItemsInContainer(
|
||||
String username, String password, String siteId, String containerName) {
|
||||
for (CmisObject item :
|
||||
contentService
|
||||
.getFolderObject(
|
||||
contentService.getCMISSession(username, password),
|
||||
siteId,
|
||||
containerName)
|
||||
.getChildren()) {
|
||||
String username,
|
||||
String password,
|
||||
String siteId,
|
||||
String containerName
|
||||
) {
|
||||
for (CmisObject item : contentService
|
||||
.getFolderObject(
|
||||
contentService.getCMISSession(username, password),
|
||||
siteId,
|
||||
containerName
|
||||
)
|
||||
.getChildren()) {
|
||||
item.delete();
|
||||
}
|
||||
assertFalse(
|
||||
"Not all items were deleted from " + containerName,
|
||||
contentService
|
||||
.getFolderObject(
|
||||
contentService.getCMISSession(username, password),
|
||||
siteId,
|
||||
containerName)
|
||||
.getChildren()
|
||||
.getHasMoreItems());
|
||||
"Not all items were deleted from " + containerName,
|
||||
contentService
|
||||
.getFolderObject(
|
||||
contentService.getCMISSession(username, password),
|
||||
siteId,
|
||||
containerName
|
||||
)
|
||||
.getChildren()
|
||||
.getHasMoreItems()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates metadata, can be used on records, folders and categories
|
||||
*
|
||||
* @param username the user updating the item
|
||||
* @param password the user's password
|
||||
* @param username the user updating the item
|
||||
* @param password the user's password
|
||||
* @param itemNodeRef the item noderef
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
public HttpResponse updateMetadata(
|
||||
String username,
|
||||
String password,
|
||||
String itemNodeRef,
|
||||
Map<RMProperty, String> properties) {
|
||||
String username,
|
||||
String password,
|
||||
String itemNodeRef,
|
||||
Map<RMProperty, String> properties
|
||||
) {
|
||||
JSONObject requestParams = new JSONObject();
|
||||
addPropertyToRequest(requestParams, "prop_cm_name", properties, RMProperty.NAME);
|
||||
addPropertyToRequest(requestParams, "prop_cm_title", properties, RMProperty.TITLE);
|
||||
addPropertyToRequest(
|
||||
requestParams, "prop_cm_description", properties, RMProperty.DESCRIPTION);
|
||||
addPropertyToRequest(requestParams, "prop_cm_author", properties, RMProperty.AUTHOR);
|
||||
requestParams,
|
||||
"prop_cm_name",
|
||||
properties,
|
||||
RMProperty.NAME
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams, "prop_dod_originator", properties, RMProperty.ORIGINATOR);
|
||||
requestParams,
|
||||
"prop_cm_title",
|
||||
properties,
|
||||
RMProperty.TITLE
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams,
|
||||
"prop_dod_originatingOrganization",
|
||||
properties,
|
||||
RMProperty.ORIGINATING_ORGANIZATION);
|
||||
requestParams,
|
||||
"prop_cm_description",
|
||||
properties,
|
||||
RMProperty.DESCRIPTION
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams, "prop_dod_publicationDate", properties, RMProperty.PUBLICATION_DATE);
|
||||
requestParams,
|
||||
"prop_cm_author",
|
||||
properties,
|
||||
RMProperty.AUTHOR
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams,
|
||||
"prop_dod_originator",
|
||||
properties,
|
||||
RMProperty.ORIGINATOR
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams,
|
||||
"prop_dod_originatingOrganization",
|
||||
properties,
|
||||
RMProperty.ORIGINATING_ORGANIZATION
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams,
|
||||
"prop_dod_publicationDate",
|
||||
properties,
|
||||
RMProperty.PUBLICATION_DATE
|
||||
);
|
||||
|
||||
return doPostJsonRequest(
|
||||
username,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
MessageFormat.format(UPDATE_METADATA_API, "{0}", itemNodeRef));
|
||||
username,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
MessageFormat.format(UPDATE_METADATA_API, "{0}", itemNodeRef)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,9 @@ package org.alfresco.rest.v0;
|
||||
|
||||
import static org.apache.http.HttpStatus.SC_OK;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.json.JSONObject;
|
||||
@@ -35,10 +38,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API on record categories
|
||||
*
|
||||
@@ -47,29 +46,45 @@ import java.util.Map;
|
||||
*/
|
||||
@Component
|
||||
public class RecordCategoriesAPI extends BaseAPI {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(RecordCategoriesAPI.class);
|
||||
private static final String RM_ACTIONS_API = "{0}rma/actions/ExecutionQueue";
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(
|
||||
RecordCategoriesAPI.class
|
||||
);
|
||||
private static final String RM_ACTIONS_API =
|
||||
"{0}rma/actions/ExecutionQueue";
|
||||
private static final String DISPOSITION_ACTIONS_API =
|
||||
"{0}node/{1}/dispositionschedule/dispositionactiondefinitions";
|
||||
private static final String DISPOSITION_SCHEDULE_API = "{0}node/{1}/dispositionschedule";
|
||||
"{0}node/{1}/dispositionschedule/dispositionactiondefinitions";
|
||||
private static final String DISPOSITION_SCHEDULE_API =
|
||||
"{0}node/{1}/dispositionschedule";
|
||||
|
||||
/**
|
||||
* Creates a retention schedule for the category given as parameter
|
||||
*
|
||||
* @param user the user creating the disposition schedule
|
||||
* @param password the user's password
|
||||
* @param user the user creating the disposition schedule
|
||||
* @param password the user's password
|
||||
* @param categoryName the category name to create the retention schedule for
|
||||
* @return The HTTP Response.
|
||||
*/
|
||||
public HttpResponse createRetentionSchedule(String user, String password, String categoryName) {
|
||||
public HttpResponse createRetentionSchedule(
|
||||
String user,
|
||||
String password,
|
||||
String categoryName
|
||||
) {
|
||||
String catNodeRef =
|
||||
getNodeRefSpacesStore() + getItemNodeRef(user, password, "/" + categoryName);
|
||||
getNodeRefSpacesStore() +
|
||||
getItemNodeRef(user, password, "/" + categoryName);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("name", "createDispositionSchedule");
|
||||
requestParams.put("nodeRef", catNodeRef);
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
RM_ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -80,156 +95,231 @@ public class RecordCategoriesAPI extends BaseAPI {
|
||||
* @param categoryName
|
||||
* @return the disposition schedule nodeRef
|
||||
*/
|
||||
public String getDispositionScheduleNodeRef(String user, String password, String categoryName) {
|
||||
String catNodeRef = NODE_PREFIX + getItemNodeRef(user, password, "/" + categoryName);
|
||||
JSONObject dispositionSchedule =
|
||||
doGetRequest(
|
||||
user,
|
||||
password,
|
||||
MessageFormat.format(DISPOSITION_SCHEDULE_API, "{0}", catNodeRef));
|
||||
public String getDispositionScheduleNodeRef(
|
||||
String user,
|
||||
String password,
|
||||
String categoryName
|
||||
) {
|
||||
String catNodeRef =
|
||||
NODE_PREFIX + getItemNodeRef(user, password, "/" + categoryName);
|
||||
JSONObject dispositionSchedule = doGetRequest(
|
||||
user,
|
||||
password,
|
||||
MessageFormat.format(DISPOSITION_SCHEDULE_API, "{0}", catNodeRef)
|
||||
);
|
||||
return dispositionSchedule
|
||||
.getJSONObject("data")
|
||||
.getString("nodeRef")
|
||||
.replace(getNodeRefSpacesStore(), "");
|
||||
.getJSONObject("data")
|
||||
.getString("nodeRef")
|
||||
.replace(getNodeRefSpacesStore(), "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets retention schedule authority and instructions, also if it is applied to records or
|
||||
* folders
|
||||
* Sets retention schedule authority and instructions, also if it is applied to records or folders
|
||||
*
|
||||
* @param user the user creating the disposition schedule
|
||||
* @param password the user's password
|
||||
* @param user the user creating the disposition schedule
|
||||
* @param password the user's password
|
||||
* @param retentionNodeRef the retention nodeRef
|
||||
* @return The HTTP Response.
|
||||
*/
|
||||
public HttpResponse setRetentionScheduleGeneralFields(
|
||||
String user,
|
||||
String password,
|
||||
String retentionNodeRef,
|
||||
Map<RETENTION_SCHEDULE, String> retentionProperties,
|
||||
Boolean appliedToRecords) {
|
||||
String user,
|
||||
String password,
|
||||
String retentionNodeRef,
|
||||
Map<RETENTION_SCHEDULE, String> retentionProperties,
|
||||
Boolean appliedToRecords
|
||||
) {
|
||||
String dispRetentionNodeRef = NODE_PREFIX + retentionNodeRef;
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put(
|
||||
"prop_rma_dispositionAuthority",
|
||||
getPropertyValue(retentionProperties, RETENTION_SCHEDULE.RETENTION_AUTHORITY));
|
||||
"prop_rma_dispositionAuthority",
|
||||
getPropertyValue(
|
||||
retentionProperties,
|
||||
RETENTION_SCHEDULE.RETENTION_AUTHORITY
|
||||
)
|
||||
);
|
||||
requestParams.put(
|
||||
"prop_rma_dispositionInstructions",
|
||||
getPropertyValue(retentionProperties, RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS));
|
||||
requestParams.put("prop_rma_recordLevelDisposition", appliedToRecords.toString());
|
||||
"prop_rma_dispositionInstructions",
|
||||
getPropertyValue(
|
||||
retentionProperties,
|
||||
RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS
|
||||
)
|
||||
);
|
||||
requestParams.put(
|
||||
"prop_rma_recordLevelDisposition",
|
||||
appliedToRecords.toString()
|
||||
);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
MessageFormat.format(UPDATE_METADATA_API, "{0}", dispRetentionNodeRef));
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
MessageFormat.format(
|
||||
UPDATE_METADATA_API,
|
||||
"{0}",
|
||||
dispRetentionNodeRef
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a retention schedule steps for the category given as parameter
|
||||
*
|
||||
* @param user the user creating the disposition schedule
|
||||
* @param password the user's password
|
||||
* @param user the user creating the disposition schedule
|
||||
* @param password the user's password
|
||||
* @param categoryName the category name to create the retention schedule for
|
||||
* @return The HTTP Response.
|
||||
*/
|
||||
public HttpResponse addDispositionScheduleSteps(
|
||||
String user,
|
||||
String password,
|
||||
String categoryName,
|
||||
Map<RETENTION_SCHEDULE, String> properties) {
|
||||
String catNodeRef = NODE_PREFIX + getItemNodeRef(user, password, "/" + categoryName);
|
||||
String user,
|
||||
String password,
|
||||
String categoryName,
|
||||
Map<RETENTION_SCHEDULE, String> properties
|
||||
) {
|
||||
String catNodeRef =
|
||||
NODE_PREFIX + getItemNodeRef(user, password, "/" + categoryName);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
addPropertyToRequest(requestParams, "name", properties, RETENTION_SCHEDULE.NAME);
|
||||
addPropertyToRequest(
|
||||
requestParams, "description", properties, RETENTION_SCHEDULE.DESCRIPTION);
|
||||
requestParams,
|
||||
"name",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.NAME
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams, "period", properties, RETENTION_SCHEDULE.RETENTION_PERIOD);
|
||||
requestParams,
|
||||
"description",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.DESCRIPTION
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams, "ghostOnDestroy", properties, RETENTION_SCHEDULE.RETENTION_GHOST);
|
||||
requestParams,
|
||||
"period",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams,
|
||||
"periodProperty",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY);
|
||||
requestParams,
|
||||
"ghostOnDestroy",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.RETENTION_GHOST
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams, "location", properties, RETENTION_SCHEDULE.RETENTION_LOCATION);
|
||||
String events = getPropertyValue(properties, RETENTION_SCHEDULE.RETENTION_EVENTS);
|
||||
requestParams,
|
||||
"periodProperty",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams,
|
||||
"location",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.RETENTION_LOCATION
|
||||
);
|
||||
String events = getPropertyValue(
|
||||
properties,
|
||||
RETENTION_SCHEDULE.RETENTION_EVENTS
|
||||
);
|
||||
if (!events.equals("")) {
|
||||
requestParams.append("events", events);
|
||||
}
|
||||
addPropertyToRequest(
|
||||
requestParams,
|
||||
"combineDispositionStepConditions",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.COMBINE_DISPOSITION_STEP_CONDITIONS);
|
||||
requestParams,
|
||||
"combineDispositionStepConditions",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.COMBINE_DISPOSITION_STEP_CONDITIONS
|
||||
);
|
||||
addPropertyToRequest(
|
||||
requestParams,
|
||||
"eligibleOnFirstCompleteEvent",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.RETENTION_ELIGIBLE_FIRST_EVENT);
|
||||
requestParams,
|
||||
"eligibleOnFirstCompleteEvent",
|
||||
properties,
|
||||
RETENTION_SCHEDULE.RETENTION_ELIGIBLE_FIRST_EVENT
|
||||
);
|
||||
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
MessageFormat.format(DISPOSITION_ACTIONS_API, "{0}", catNodeRef));
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
MessageFormat.format(DISPOSITION_ACTIONS_API, "{0}", catNodeRef)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a category
|
||||
*
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param categoryName the name of the category
|
||||
* @throws AssertionError if the delete was unsuccessful.
|
||||
*/
|
||||
public void deleteCategory(String username, String password, String categoryName) {
|
||||
public void deleteCategory(
|
||||
String username,
|
||||
String password,
|
||||
String categoryName
|
||||
) {
|
||||
deleteItem(username, password, "/" + categoryName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a sub-category
|
||||
*
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param categoryName the name of the sub-category
|
||||
* @throws AssertionError if the deletion was unsuccessful.
|
||||
*/
|
||||
public void deleteSubCategory(
|
||||
String username, String password, String categoryName, String subCategoryName) {
|
||||
deleteItem(username, password, "/" + categoryName + "/" + subCategoryName);
|
||||
String username,
|
||||
String password,
|
||||
String categoryName,
|
||||
String subCategoryName
|
||||
) {
|
||||
deleteItem(
|
||||
username,
|
||||
password,
|
||||
"/" + categoryName + "/" + subCategoryName
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a folder inside a container in RM site
|
||||
*
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param folderName folder name
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param folderName folder name
|
||||
* @param containerName the name of the category or container sin which the folder is
|
||||
* @throws AssertionError if the deletion was unsuccessful.
|
||||
*/
|
||||
public void deleteFolderInContainer(
|
||||
String username, String password, String folderName, String containerName) {
|
||||
String username,
|
||||
String password,
|
||||
String folderName,
|
||||
String containerName
|
||||
) {
|
||||
deleteItem(username, password, "/" + containerName + "/" + folderName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a map of retention properties
|
||||
*
|
||||
* @param authority retention authority
|
||||
* @param authority retention authority
|
||||
* @param instructions retention authority
|
||||
* @return the map
|
||||
*/
|
||||
public Map<RETENTION_SCHEDULE, String> getRetentionProperties(
|
||||
String authority, String instructions) {
|
||||
String authority,
|
||||
String instructions
|
||||
) {
|
||||
Map<RETENTION_SCHEDULE, String> retentionProperties = new HashMap<>();
|
||||
retentionProperties.put(RETENTION_SCHEDULE.RETENTION_AUTHORITY, authority);
|
||||
retentionProperties.put(RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS, instructions);
|
||||
retentionProperties.put(
|
||||
RETENTION_SCHEDULE.RETENTION_AUTHORITY,
|
||||
authority
|
||||
);
|
||||
retentionProperties.put(
|
||||
RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS,
|
||||
instructions
|
||||
);
|
||||
return retentionProperties;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,27 +44,40 @@ import org.springframework.stereotype.Component;
|
||||
*/
|
||||
@Component
|
||||
public class RecordFoldersAPI extends BaseAPI {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(RecordFoldersAPI.class);
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(
|
||||
RecordFoldersAPI.class
|
||||
);
|
||||
|
||||
/**
|
||||
* Close the record folder
|
||||
*
|
||||
* @param user the user closing the folder
|
||||
* @param password the user's password
|
||||
* @param user the user closing the folder
|
||||
* @param password the user's password
|
||||
* @param recordFolder the record folder name
|
||||
* @return The HTTP Response (or null if the response could not be understood).
|
||||
*/
|
||||
public HttpResponse closeRecordFolder(String user, String password, String recordFolder) {
|
||||
public HttpResponse closeRecordFolder(
|
||||
String user,
|
||||
String password,
|
||||
String recordFolder
|
||||
) {
|
||||
String recNodeRef =
|
||||
getNodeRefSpacesStore()
|
||||
+ contentService.getNodeRef(user, password, RM_SITE_ID, recordFolder);
|
||||
getNodeRefSpacesStore() +
|
||||
contentService.getNodeRef(user, password, RM_SITE_ID, recordFolder);
|
||||
|
||||
try {
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("name", "closeRecordFolder");
|
||||
requestParams.put("nodeRef", recNodeRef);
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
RM_ACTIONS_API
|
||||
);
|
||||
} catch (JSONException error) {
|
||||
LOGGER.error("Unable to extract response parameter", error);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ package org.alfresco.rest.v0;
|
||||
import static org.apache.http.HttpStatus.SC_OK;
|
||||
import static org.testng.AssertJUnit.assertTrue;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Map;
|
||||
import org.alfresco.dataprep.CMISUtil.DocumentType;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.apache.chemistry.opencmis.client.api.CmisObject;
|
||||
@@ -40,9 +42,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API on records
|
||||
*
|
||||
@@ -51,66 +50,93 @@ import java.util.Map;
|
||||
*/
|
||||
@Component
|
||||
public class RecordsAPI extends BaseAPI {
|
||||
|
||||
// logger
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(RecordsAPI.class);
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(
|
||||
RecordsAPI.class
|
||||
);
|
||||
|
||||
private static final String CREATE_NON_ELECTRONIC_RECORD_API =
|
||||
"{0}type/rma:nonElectronicDocument/formprocessor";
|
||||
"{0}type/rma:nonElectronicDocument/formprocessor";
|
||||
|
||||
/**
|
||||
* Declare documents as records
|
||||
*
|
||||
* @param user the user declaring the document as record
|
||||
* @param password the user's password
|
||||
* @param siteID the site id in which the document exists
|
||||
* @param user the user declaring the document as record
|
||||
* @param password the user's password
|
||||
* @param siteID the site id in which the document exists
|
||||
* @param documentName the document name
|
||||
* @return The HTTP Response.
|
||||
*/
|
||||
public HttpResponse declareDocumentAsRecord(
|
||||
String user, String password, String siteID, String documentName) {
|
||||
String user,
|
||||
String password,
|
||||
String siteID,
|
||||
String documentName
|
||||
) {
|
||||
String docNodeRef =
|
||||
getNodeRefSpacesStore()
|
||||
+ contentService.getNodeRef(user, password, siteID, documentName);
|
||||
getNodeRefSpacesStore() +
|
||||
contentService.getNodeRef(user, password, siteID, documentName);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("actionedUponNode", docNodeRef);
|
||||
requestParams.put("actionDefinitionName", "create-record");
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, ACTIONS_API);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Completes the record given as parameter
|
||||
*
|
||||
* @param user the user declaring the document as record
|
||||
* @param password the user's password
|
||||
* @param user the user declaring the document as record
|
||||
* @param password the user's password
|
||||
* @param recordName the record name
|
||||
* @return The HTTP Response.
|
||||
*/
|
||||
public HttpResponse completeRecord(String user, String password, String recordName) {
|
||||
public HttpResponse completeRecord(
|
||||
String user,
|
||||
String password,
|
||||
String recordName
|
||||
) {
|
||||
String recNodeRef =
|
||||
getNodeRefSpacesStore()
|
||||
+ contentService.getNodeRef(user, password, RM_SITE_ID, recordName);
|
||||
getNodeRefSpacesStore() +
|
||||
contentService.getNodeRef(user, password, RM_SITE_ID, recordName);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("name", "declareRecord");
|
||||
requestParams.put("nodeRef", recNodeRef);
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
RM_ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reject the record given as parameter
|
||||
*
|
||||
* @param user the user declaring the document as record
|
||||
* @param password the user's password
|
||||
* @param user the user declaring the document as record
|
||||
* @param password the user's password
|
||||
* @param recordName the record name
|
||||
* @param reason reject reason
|
||||
* @param reason reject reason
|
||||
* @return The HTTP Response.
|
||||
* @throws AssertionError If the POST call is not successful.
|
||||
*/
|
||||
public HttpResponse rejectRecord(
|
||||
String user, String password, String recordName, String reason) {
|
||||
String user,
|
||||
String password,
|
||||
String recordName,
|
||||
String reason
|
||||
) {
|
||||
return rejectRecord(user, password, SC_OK, recordName, reason);
|
||||
}
|
||||
|
||||
@@ -126,73 +152,84 @@ public class RecordsAPI extends BaseAPI {
|
||||
* @throws AssertionError If the expectedStatusCode was not returned.
|
||||
*/
|
||||
public HttpResponse rejectRecord(
|
||||
String user,
|
||||
String password,
|
||||
int expectedStatusCode,
|
||||
String recordName,
|
||||
String reason) {
|
||||
String user,
|
||||
String password,
|
||||
int expectedStatusCode,
|
||||
String recordName,
|
||||
String reason
|
||||
) {
|
||||
String recNodeRef =
|
||||
getNodeRefSpacesStore()
|
||||
+ contentService.getNodeRef(user, password, RM_SITE_ID, recordName);
|
||||
getNodeRefSpacesStore() +
|
||||
contentService.getNodeRef(user, password, RM_SITE_ID, recordName);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("name", "reject");
|
||||
requestParams.put("nodeRef", recNodeRef);
|
||||
requestParams.put("params", new JSONObject().put("reason", reason));
|
||||
|
||||
return doPostJsonRequest(user, password, expectedStatusCode, requestParams, RM_ACTIONS_API);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
expectedStatusCode,
|
||||
requestParams,
|
||||
RM_ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Declare document version as record
|
||||
*
|
||||
* @param user the user declaring the document version as record
|
||||
* @param password the user's password
|
||||
* @param siteID the site id in which the document exists
|
||||
* @param user the user declaring the document version as record
|
||||
* @param password the user's password
|
||||
* @param siteID the site id in which the document exists
|
||||
* @param documentName the document name
|
||||
* @return The HTTP Response.
|
||||
*/
|
||||
public HttpResponse declareDocumentVersionAsRecord(
|
||||
String user, String password, String siteID, String documentName) {
|
||||
String user,
|
||||
String password,
|
||||
String siteID,
|
||||
String documentName
|
||||
) {
|
||||
String docNodeRef =
|
||||
getNodeRefSpacesStore()
|
||||
+ contentService.getNodeRef(user, password, siteID, documentName);
|
||||
getNodeRefSpacesStore() +
|
||||
contentService.getNodeRef(user, password, siteID, documentName);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("actionedUponNode", docNodeRef);
|
||||
requestParams.put("actionDefinitionName", "declare-as-version-record");
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, ACTIONS_API);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a non-electronic record
|
||||
*
|
||||
* <ul>
|
||||
* <li>eg. of usage for Unfiled records with folder :
|
||||
* createNonElectronicRecord(getAdminName(), getAdminPassword(), properties,
|
||||
* UNFILED_RECORDS_BREADCRUMB, "unfiled records folder");
|
||||
* <li>eg. of usage for creating record directly in Unfiled Records :
|
||||
* createNonElectronicRecord(getAdminName(), getAdminPassword(), properties,
|
||||
* UNFILED_RECORDS_BREADCRUMB, "");
|
||||
* <li>eg. of usage for Unfiled records with folder : createNonElectronicRecord(getAdminName(), getAdminPassword(), properties, UNFILED_RECORDS_BREADCRUMB, "unfiled records folder");
|
||||
* <li>eg. of usage for creating record directly in Unfiled Records : createNonElectronicRecord(getAdminName(), getAdminPassword(), properties, UNFILED_RECORDS_BREADCRUMB, "");
|
||||
* </ul>
|
||||
*
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @param properties a map of record properties and their values
|
||||
* @param categoryName the category that contains the record, in the case in which the container
|
||||
* would be Unfiled records use UNFILED_RECORDS_BREADCRUMB as value
|
||||
* @param folderName the folder inside which the record exists, in the case in which the folder
|
||||
* name is "", the record will be created directly in the specified container this case is
|
||||
* useful when trying to create a record directly in Unfiled Records
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @param properties a map of record properties and their values
|
||||
* @param categoryName the category that contains the record, in the case in which the container would be Unfiled records use UNFILED_RECORDS_BREADCRUMB as value
|
||||
* @param folderName the folder inside which the record exists, in the case in which the folder name is "", the record will be created directly in the specified container
|
||||
* this case is useful when trying to create a record directly in Unfiled Records
|
||||
* @return The HTTP Response (or null if the request was not needed).
|
||||
*/
|
||||
public <K extends Enum<?>> HttpResponse createNonElectronicRecord(
|
||||
String username,
|
||||
String password,
|
||||
Map<K, String> properties,
|
||||
String categoryName,
|
||||
String folderName) {
|
||||
String username,
|
||||
String password,
|
||||
Map<K, String> properties,
|
||||
String categoryName,
|
||||
String folderName
|
||||
) {
|
||||
String recordName = properties.get(RMProperty.NAME);
|
||||
if (getRecord(username, password, folderName, recordName) != null) {
|
||||
return null;
|
||||
@@ -202,20 +239,34 @@ public class RecordsAPI extends BaseAPI {
|
||||
recordPath = recordPath + "/" + folderName;
|
||||
}
|
||||
// if the record already exists don't try to create it again
|
||||
CmisObject record =
|
||||
getObjectByPath(
|
||||
username, password, getFilePlanPath() + recordPath + "/" + recordName);
|
||||
CmisObject record = getObjectByPath(
|
||||
username,
|
||||
password,
|
||||
getFilePlanPath() + recordPath + "/" + recordName
|
||||
);
|
||||
|
||||
if (record != null) {
|
||||
return null;
|
||||
}
|
||||
// non-electronic properties
|
||||
String recordTitle = getPropertyValue(properties, RMProperty.TITLE);
|
||||
String description = getPropertyValue(properties, RMProperty.DESCRIPTION);
|
||||
String physicalSize = getPropertyValue(properties, RMProperty.PHYSICAL_SIZE);
|
||||
String numberOfCopies = getPropertyValue(properties, RMProperty.NUMBER_OF_COPIES);
|
||||
String description = getPropertyValue(
|
||||
properties,
|
||||
RMProperty.DESCRIPTION
|
||||
);
|
||||
String physicalSize = getPropertyValue(
|
||||
properties,
|
||||
RMProperty.PHYSICAL_SIZE
|
||||
);
|
||||
String numberOfCopies = getPropertyValue(
|
||||
properties,
|
||||
RMProperty.NUMBER_OF_COPIES
|
||||
);
|
||||
String shelf = getPropertyValue(properties, RMProperty.SHELF);
|
||||
String storage = getPropertyValue(properties, RMProperty.STORAGE_LOCATION);
|
||||
String storage = getPropertyValue(
|
||||
properties,
|
||||
RMProperty.STORAGE_LOCATION
|
||||
);
|
||||
String box = getPropertyValue(properties, RMProperty.BOX);
|
||||
String file = getPropertyValue(properties, RMProperty.FILE);
|
||||
|
||||
@@ -223,7 +274,10 @@ public class RecordsAPI extends BaseAPI {
|
||||
String parentNodeRef = getItemNodeRef(username, password, recordPath);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("alf_destination", getNodeRefSpacesStore() + parentNodeRef);
|
||||
requestParams.put(
|
||||
"alf_destination",
|
||||
getNodeRefSpacesStore() + parentNodeRef
|
||||
);
|
||||
requestParams.put("prop_cm_name", recordName);
|
||||
requestParams.put("prop_cm_title", recordTitle);
|
||||
requestParams.put("prop_cm_description", description);
|
||||
@@ -235,72 +289,73 @@ public class RecordsAPI extends BaseAPI {
|
||||
requestParams.put("prop_rma_file", file);
|
||||
|
||||
return doPostJsonRequest(
|
||||
username, password, SC_OK, requestParams, CREATE_NON_ELECTRONIC_RECORD_API);
|
||||
username,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
CREATE_NON_ELECTRONIC_RECORD_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads an electronic record
|
||||
*
|
||||
* <p>eg. of usage for creating record directly in Unfiled Records :
|
||||
* uploadElectronicRecord(getAdminName(), getAdminPassword(), recordPropertiesStringMap,
|
||||
* UNFILED_RECORDS_BREADCRUMB, DocumentType.HTML)
|
||||
*
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* <p>
|
||||
* eg. of usage for creating record directly in Unfiled Records : uploadElectronicRecord(getAdminName(), getAdminPassword(), recordPropertiesStringMap, UNFILED_RECORDS_BREADCRUMB, DocumentType.HTML)
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @param properties a map of record properties and their values
|
||||
* @param folderName the folder inside which the record will be created, it needs to have a
|
||||
* unique name, as this method doesn't check other containers than the folder name
|
||||
* @param folderName the folder inside which the record will be created, it needs to have a unique name, as this method doesn't check other containers than the folder name
|
||||
* @throws AssertionError if the upload was unsuccessful.
|
||||
*/
|
||||
public void uploadElectronicRecord(
|
||||
String username,
|
||||
String password,
|
||||
Map<RMProperty, String> properties,
|
||||
String folderName,
|
||||
DocumentType documentType) {
|
||||
String username,
|
||||
String password,
|
||||
Map<RMProperty, String> properties,
|
||||
String folderName,
|
||||
DocumentType documentType
|
||||
) {
|
||||
String recordName = getPropertyValue(properties, RMProperty.NAME);
|
||||
String recordContent = getPropertyValue(properties, RMProperty.CONTENT);
|
||||
boolean success =
|
||||
(getRecord(username, password, folderName, recordName) != null)
|
||||
|| (contentService.createDocumentInFolder(
|
||||
username,
|
||||
password,
|
||||
RM_SITE_ID,
|
||||
folderName,
|
||||
documentType,
|
||||
recordName,
|
||||
recordContent)
|
||||
!= null);
|
||||
assertTrue("Failed to upload electronic record to " + folderName, success);
|
||||
(getRecord(username, password, folderName, recordName) != null) ||
|
||||
(
|
||||
contentService.createDocumentInFolder(
|
||||
username,
|
||||
password,
|
||||
RM_SITE_ID,
|
||||
folderName,
|
||||
documentType,
|
||||
recordName,
|
||||
recordContent
|
||||
) !=
|
||||
null
|
||||
);
|
||||
assertTrue(
|
||||
"Failed to upload electronic record to " + folderName,
|
||||
success
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a record from the given path
|
||||
*
|
||||
* <ul>
|
||||
* <li>eg. of usage in the case in which the record is inside a folder in Unfiled Records :
|
||||
* deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)",
|
||||
* UNFILED_RECORDS_BREADCRUMB, "unfiled records folder");
|
||||
* <li>eg. of usage in the case in which the record is created directly in Unfiled Records :
|
||||
* deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)",
|
||||
* UNFILED_RECORDS_BREADCRUMB, "");
|
||||
* <li>eg. of usage in the case in which the record is inside a folder in Unfiled Records : deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", UNFILED_RECORDS_BREADCRUMB, "unfiled records folder");
|
||||
* <li>eg. of usage in the case in which the record is created directly in Unfiled Records : deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", UNFILED_RECORDS_BREADCRUMB, "");
|
||||
* </ul>
|
||||
*
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param recordName the record name
|
||||
* @param categoryName the name of the category in which the folder is, in case of unfiled
|
||||
* record, this will have UNFILED_RECORDS_BREADCRUMB as container
|
||||
* @param folderName folder name, in case in which trying to delete a record in Unfiled records
|
||||
* directly, this will be ""
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param recordName the record name
|
||||
* @param categoryName the name of the category in which the folder is, in case of unfiled record, this will have UNFILED_RECORDS_BREADCRUMB as container
|
||||
* @param folderName folder name, in case in which trying to delete a record in Unfiled records directly, this will be ""
|
||||
* @throws AssertionError If the record could not be deleted.
|
||||
*/
|
||||
public void deleteRecord(
|
||||
String username,
|
||||
String password,
|
||||
String recordName,
|
||||
String categoryName,
|
||||
String folderName) {
|
||||
String username,
|
||||
String password,
|
||||
String recordName,
|
||||
String categoryName,
|
||||
String folderName
|
||||
) {
|
||||
String recordPath = "/" + categoryName;
|
||||
if (!folderName.equals("")) {
|
||||
recordPath = recordPath + "/" + folderName;
|
||||
@@ -311,21 +366,25 @@ public class RecordsAPI extends BaseAPI {
|
||||
/**
|
||||
* Retrieves the record object in case it exists
|
||||
*
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @param folderName the folder in which the record is supposed to exist
|
||||
* @param recordName the String with which the record name starts
|
||||
* @return the record object in case it exists, null otherwise
|
||||
*/
|
||||
private CmisObject getRecord(
|
||||
String username, String password, String folderName, String recordName) {
|
||||
for (CmisObject record :
|
||||
contentService
|
||||
.getFolderObject(
|
||||
contentService.getCMISSession(username, password),
|
||||
RM_SITE_ID,
|
||||
folderName)
|
||||
.getChildren()) {
|
||||
String username,
|
||||
String password,
|
||||
String folderName,
|
||||
String recordName
|
||||
) {
|
||||
for (CmisObject record : contentService
|
||||
.getFolderObject(
|
||||
contentService.getCMISSession(username, password),
|
||||
RM_SITE_ID,
|
||||
folderName
|
||||
)
|
||||
.getChildren()) {
|
||||
if (record.getName().startsWith(recordName)) {
|
||||
return record;
|
||||
}
|
||||
@@ -336,15 +395,24 @@ public class RecordsAPI extends BaseAPI {
|
||||
/**
|
||||
* Retrieves record full name for given partial name
|
||||
*
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @param folderName the folder in which the record is supposed to exist
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @param folderName the folder in which the record is supposed to exist
|
||||
* @param recordPartialName the String with which the record name starts
|
||||
* @return the record name in case it exists, empty String otherwise
|
||||
*/
|
||||
public String getRecordFullName(
|
||||
String username, String password, String folderName, String recordPartialName) {
|
||||
CmisObject record = getRecord(username, password, folderName, recordPartialName);
|
||||
String username,
|
||||
String password,
|
||||
String folderName,
|
||||
String recordPartialName
|
||||
) {
|
||||
CmisObject record = getRecord(
|
||||
username,
|
||||
password,
|
||||
folderName,
|
||||
recordPartialName
|
||||
);
|
||||
if (record != null) {
|
||||
return record.getName();
|
||||
}
|
||||
@@ -354,20 +422,23 @@ public class RecordsAPI extends BaseAPI {
|
||||
/**
|
||||
* Share a document
|
||||
*
|
||||
* @param user the user sharing the file
|
||||
* @param user the user sharing the file
|
||||
* @param password the user's password
|
||||
* @param nodeId the node id of the file
|
||||
* @return {@link Pair}. on success will be true and the shareId. on failure will be false and
|
||||
* the response status code.
|
||||
* @param nodeId the node id of the file
|
||||
* @return {@link Pair}. on success will be true and the shareId.
|
||||
* on failure will be false and the response status code.
|
||||
*/
|
||||
public Pair<Boolean, String> shareDocument(String user, String password, String nodeId)
|
||||
throws JSONException {
|
||||
JSONObject response =
|
||||
doPostRequest(
|
||||
user,
|
||||
password,
|
||||
null,
|
||||
MessageFormat.format(SHARE_ACTION_API, "{0}", nodeId));
|
||||
public Pair<Boolean, String> shareDocument(
|
||||
String user,
|
||||
String password,
|
||||
String nodeId
|
||||
) throws JSONException {
|
||||
JSONObject response = doPostRequest(
|
||||
user,
|
||||
password,
|
||||
null,
|
||||
MessageFormat.format(SHARE_ACTION_API, "{0}", nodeId)
|
||||
);
|
||||
try {
|
||||
if (response.has("sharedId")) {
|
||||
return Pair.of(true, response.getString("sharedId"));
|
||||
@@ -375,39 +446,58 @@ public class RecordsAPI extends BaseAPI {
|
||||
} catch (JSONException e) {
|
||||
LOGGER.info("Unable to extract response parameter", e);
|
||||
}
|
||||
return Pair.of(false, String.valueOf(response.getJSONObject("status").getInt("code")));
|
||||
return Pair.of(
|
||||
false,
|
||||
String.valueOf(response.getJSONObject("status").getInt("code"))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide in place record
|
||||
*
|
||||
* @param user the user
|
||||
* @param password the user's password
|
||||
* @param nodeId the in place record node id
|
||||
* @param user the user
|
||||
* @param password the user's password
|
||||
* @param nodeId the in place record node id
|
||||
* @return The HTTP Response.
|
||||
*/
|
||||
public HttpResponse hideRecord(String user, String password, String nodeId) {
|
||||
public HttpResponse hideRecord(
|
||||
String user,
|
||||
String password,
|
||||
String nodeId
|
||||
) {
|
||||
String docNodeRef = getNodeRefSpacesStore() + nodeId;
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("actionedUponNode", docNodeRef);
|
||||
requestParams.put("actionDefinitionName", "hide-record");
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, ACTIONS_API);
|
||||
return doPostJsonRequest(
|
||||
user,
|
||||
password,
|
||||
SC_OK,
|
||||
requestParams,
|
||||
ACTIONS_API
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the record's nodeRef
|
||||
*
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @param recordName the record full name
|
||||
* @param recordPath the String with which the record name starts
|
||||
* @return the record nodeRef in case it exists, empty string otherwise
|
||||
*/
|
||||
public String getRecordNodeRef(
|
||||
String username, String password, String recordName, String recordPath) {
|
||||
return getNodeRefSpacesStore()
|
||||
+ getItemNodeRef(username, password, recordPath + "/" + recordName);
|
||||
String username,
|
||||
String password,
|
||||
String recordName,
|
||||
String recordPath
|
||||
) {
|
||||
return (
|
||||
getNodeRefSpacesStore() +
|
||||
getItemNodeRef(username, password, recordPath + "/" + recordName)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,11 +27,14 @@
|
||||
|
||||
package org.alfresco.rest.v0;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
import static org.apache.http.HttpStatus.SC_OK;
|
||||
import static org.testng.AssertJUnit.assertTrue;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.alfresco.rest.rm.community.model.rules.RuleDefinition;
|
||||
import org.apache.http.HttpResponse;
|
||||
@@ -42,19 +45,18 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/** Covers CRUD API operations on rules */
|
||||
/**
|
||||
* Covers CRUD API operations on rules
|
||||
*/
|
||||
@Component
|
||||
public class RulesAPI extends BaseAPI {
|
||||
|
||||
public static final String RULES_API = "{0}node/{1}/ruleset/rules";
|
||||
public static final String RULE_API = "{0}node/{1}/ruleset/rules/{2}";
|
||||
public static final String INHERIT_RULES_API = "{0}node/{1}/ruleset/inheritrules/toggle";
|
||||
public static final String INHERIT_RULES_STATE_API = "{0}node/{1}/ruleset/inheritrules/state";
|
||||
public static final String INHERIT_RULES_API =
|
||||
"{0}node/{1}/ruleset/inheritrules/toggle";
|
||||
public static final String INHERIT_RULES_STATE_API =
|
||||
"{0}node/{1}/ruleset/inheritrules/state";
|
||||
// logger
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger(RulesAPI.class);
|
||||
|
||||
@@ -62,21 +64,23 @@ public class RulesAPI extends BaseAPI {
|
||||
* Creates a rule for the specified container with given rule properties
|
||||
*
|
||||
* @param containerNodeRef the container to have the rule created on
|
||||
* @param ruleProperties the rule properties
|
||||
* @param ruleProperties the rule properties
|
||||
* @return The HTTP Response (or null if the response could not be understood).
|
||||
*/
|
||||
public HttpResponse createRule(
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef,
|
||||
RuleDefinition ruleProperties) {
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef,
|
||||
RuleDefinition ruleProperties
|
||||
) {
|
||||
try {
|
||||
return doPostJsonRequest(
|
||||
username,
|
||||
password,
|
||||
SC_OK,
|
||||
getRuleRequest(ruleProperties),
|
||||
MessageFormat.format(RULES_API, "{0}", containerNodeRef));
|
||||
username,
|
||||
password,
|
||||
SC_OK,
|
||||
getRuleRequest(ruleProperties),
|
||||
MessageFormat.format(RULES_API, "{0}", containerNodeRef)
|
||||
);
|
||||
} catch (JSONException error) {
|
||||
LOGGER.error("Unable to extract response parameter.", error);
|
||||
}
|
||||
@@ -87,24 +91,26 @@ public class RulesAPI extends BaseAPI {
|
||||
* Updates a rule for the specified container with given rule properties
|
||||
*
|
||||
* @param containerNodeRef the container to have the rule created on
|
||||
* @param ruleProperties the rule properties
|
||||
* @param ruleProperties the rule properties
|
||||
* @return true if the rule has been updated successfully, false otherwise
|
||||
*/
|
||||
public JSONObject updateRule(
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef,
|
||||
RuleDefinition ruleProperties) {
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef,
|
||||
RuleDefinition ruleProperties
|
||||
) {
|
||||
String ruleId = ruleProperties.getId();
|
||||
if (ruleId == null || ruleId.isEmpty()) {
|
||||
throw new RuntimeException("Can not update a rule without id.");
|
||||
}
|
||||
try {
|
||||
return doPutRequest(
|
||||
username,
|
||||
password,
|
||||
getRuleRequest(ruleProperties),
|
||||
MessageFormat.format(RULE_API, "{0}", containerNodeRef, ruleId));
|
||||
username,
|
||||
password,
|
||||
getRuleRequest(ruleProperties),
|
||||
MessageFormat.format(RULE_API, "{0}", containerNodeRef, ruleId)
|
||||
);
|
||||
} catch (JSONException error) {
|
||||
LOGGER.error("Unable to extract response parameter.", error);
|
||||
}
|
||||
@@ -114,36 +120,56 @@ public class RulesAPI extends BaseAPI {
|
||||
/**
|
||||
* Deletes a rule on a container and checks it doesn't exist anymore
|
||||
*
|
||||
* @param username the user performing the request
|
||||
* @param password the password
|
||||
* @param username the user performing the request
|
||||
* @param password the password
|
||||
* @param containerNodeRef the container on which the rule has been created
|
||||
* @param ruleId the rule id
|
||||
* @param ruleId the rule id
|
||||
* @throws AssertionError if the rule could not be deleted.
|
||||
*/
|
||||
public void deleteRule(
|
||||
String username, String password, String containerNodeRef, String ruleId) {
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef,
|
||||
String ruleId
|
||||
) {
|
||||
doDeleteRequest(
|
||||
username,
|
||||
password,
|
||||
MessageFormat.format(RULE_API, "{0}", containerNodeRef, ruleId));
|
||||
boolean success =
|
||||
!getRulesIdsSetOnContainer(username, password, containerNodeRef).contains(ruleId);
|
||||
username,
|
||||
password,
|
||||
MessageFormat.format(RULE_API, "{0}", containerNodeRef, ruleId)
|
||||
);
|
||||
boolean success = !getRulesIdsSetOnContainer(
|
||||
username,
|
||||
password,
|
||||
containerNodeRef
|
||||
)
|
||||
.contains(ruleId);
|
||||
assertTrue(
|
||||
"Rule " + ruleId + " was not deleted successfully from " + containerNodeRef,
|
||||
success);
|
||||
"Rule " +
|
||||
ruleId +
|
||||
" was not deleted successfully from " +
|
||||
containerNodeRef,
|
||||
success
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all the rules on a container and checks they don't exist anymore
|
||||
*
|
||||
* @param username the user performing the request
|
||||
* @param password the password
|
||||
* @param username the user performing the request
|
||||
* @param password the password
|
||||
* @param containerNodeRef the container on which the rules have been created
|
||||
* @throws AssertionError if at least one of the rules could not be deleted.
|
||||
*/
|
||||
public void deleteAllRulesOnContainer(
|
||||
String username, String password, String containerNodeRef) {
|
||||
List<String> ruleIds = getRulesIdsSetOnContainer(username, password, containerNodeRef);
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef
|
||||
) {
|
||||
List<String> ruleIds = getRulesIdsSetOnContainer(
|
||||
username,
|
||||
password,
|
||||
containerNodeRef
|
||||
);
|
||||
for (String ruleId : ruleIds) {
|
||||
deleteRule(username, password, containerNodeRef, ruleId);
|
||||
}
|
||||
@@ -155,18 +181,23 @@ public class RulesAPI extends BaseAPI {
|
||||
* @param username the user performing the request
|
||||
* @param password the password
|
||||
* @param containerNodeRef the container to get the rules from
|
||||
*
|
||||
* @return list of rules on container
|
||||
*/
|
||||
|
||||
public List<RuleDefinition> getRulesSetOnContainer(
|
||||
String username, String password, String containerNodeRef) {
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef
|
||||
) {
|
||||
List<RuleDefinition> rulesDefinitions = new ArrayList<>();
|
||||
|
||||
// get the rules set on the container
|
||||
JSONObject rulesJson =
|
||||
doGetRequest(
|
||||
username,
|
||||
password,
|
||||
MessageFormat.format(RULES_API, "{0}", containerNodeRef));
|
||||
JSONObject rulesJson = doGetRequest(
|
||||
username,
|
||||
password,
|
||||
MessageFormat.format(RULES_API, "{0}", containerNodeRef)
|
||||
);
|
||||
if (rulesJson != null) {
|
||||
try {
|
||||
JSONArray rules = rulesJson.getJSONArray("data");
|
||||
@@ -176,7 +207,9 @@ public class RulesAPI extends BaseAPI {
|
||||
ruleDefinition.id(rule.getString("id"));
|
||||
ruleDefinition.title(rule.getString("title"));
|
||||
ruleDefinition.description(rule.getString("description"));
|
||||
ruleDefinition.ruleType(rule.getJSONArray("ruleType").get(0).toString());
|
||||
ruleDefinition.ruleType(
|
||||
rule.getJSONArray("ruleType").get(0).toString()
|
||||
);
|
||||
ruleDefinition.disabled(rule.getBoolean("disabled"));
|
||||
rulesDefinitions.add(ruleDefinition);
|
||||
}
|
||||
@@ -190,16 +223,20 @@ public class RulesAPI extends BaseAPI {
|
||||
/**
|
||||
* Retrieves all the ids of the rules set on the container
|
||||
*
|
||||
* @param username the user performing the request
|
||||
* @param password the password
|
||||
* @param username the user performing the request
|
||||
* @param password the password
|
||||
* @param containerNodeRef the container's noderef to get set rules for
|
||||
* @return the list of rules ids that the container has
|
||||
*/
|
||||
public List<String> getRulesIdsSetOnContainer(
|
||||
String username, String password, String containerNodeRef) {
|
||||
return getRulesSetOnContainer(username, password, containerNodeRef).stream()
|
||||
.map(RuleDefinition::getId)
|
||||
.collect(Collectors.toList());
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef
|
||||
) {
|
||||
return getRulesSetOnContainer(username, password, containerNodeRef)
|
||||
.stream()
|
||||
.map(RuleDefinition::getId)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -207,9 +244,11 @@ public class RulesAPI extends BaseAPI {
|
||||
*
|
||||
* @param ruleProperties the rule properties
|
||||
* @return a object containing the rule properties for the request
|
||||
*
|
||||
* @throws JSONException
|
||||
*/
|
||||
private JSONObject getRuleRequest(RuleDefinition ruleProperties) throws JSONException {
|
||||
private JSONObject getRuleRequest(RuleDefinition ruleProperties)
|
||||
throws JSONException {
|
||||
JSONObject requestParams = new JSONObject();
|
||||
|
||||
// the id has to be sent as empty string no matter the request
|
||||
@@ -218,8 +257,14 @@ public class RulesAPI extends BaseAPI {
|
||||
requestParams.put("title", ruleProperties.getTitle());
|
||||
requestParams.put("description", ruleProperties.getDescription());
|
||||
requestParams.put("disabled", ruleProperties.isDisabled());
|
||||
requestParams.put("applyToChildren", ruleProperties.isApplyToChildren());
|
||||
requestParams.put("executeAsynchronously", ruleProperties.getRunInBackground());
|
||||
requestParams.put(
|
||||
"applyToChildren",
|
||||
ruleProperties.isApplyToChildren()
|
||||
);
|
||||
requestParams.put(
|
||||
"executeAsynchronously",
|
||||
ruleProperties.getRunInBackground()
|
||||
);
|
||||
requestParams.put("ruleType", asList(ruleProperties.getRuleType()));
|
||||
|
||||
return requestParams;
|
||||
@@ -229,10 +274,13 @@ public class RulesAPI extends BaseAPI {
|
||||
* Adds rules actions to the request
|
||||
*
|
||||
* @param ruleProperties the rules properties to extract actions from
|
||||
*
|
||||
* @return the object with actions set
|
||||
*
|
||||
* @throws JSONException
|
||||
*/
|
||||
private JSONObject addRulesActions(RuleDefinition ruleProperties) throws JSONException {
|
||||
private JSONObject addRulesActions(RuleDefinition ruleProperties)
|
||||
throws JSONException {
|
||||
JSONObject action = new JSONObject();
|
||||
action.put("actionDefinitionName", "composite-action");
|
||||
JSONObject conditions = new JSONObject();
|
||||
@@ -247,10 +295,11 @@ public class RulesAPI extends BaseAPI {
|
||||
* Creates the actions list for request
|
||||
*
|
||||
* @param ruleProperties given rule properties
|
||||
*
|
||||
* @return the list of rule actions objects
|
||||
*/
|
||||
private List<JSONObject> getRuleActionsList(RuleDefinition ruleProperties)
|
||||
throws JSONException {
|
||||
throws JSONException {
|
||||
List<JSONObject> ruleActionsList = new ArrayList<>();
|
||||
|
||||
for (String ruleAction : ruleProperties.getActions()) {
|
||||
@@ -259,7 +308,10 @@ public class RulesAPI extends BaseAPI {
|
||||
JSONObject parameters = new JSONObject();
|
||||
if (ruleProperties.getPath() != null) {
|
||||
if (ruleProperties.getCreateRecordPath() != null) {
|
||||
parameters.put("createRecordPath", ruleProperties.getCreateRecordPath());
|
||||
parameters.put(
|
||||
"createRecordPath",
|
||||
ruleProperties.getCreateRecordPath()
|
||||
);
|
||||
}
|
||||
parameters.put("path", ruleProperties.getPath());
|
||||
}
|
||||
@@ -288,15 +340,21 @@ public class RulesAPI extends BaseAPI {
|
||||
* @param username the user performing the request
|
||||
* @param password the password
|
||||
* @param containerNodeRef container nodeRef
|
||||
*
|
||||
* @return the rule id
|
||||
*/
|
||||
public String getRuleIdWithTitle(
|
||||
String username, String password, String containerNodeRef, String title) {
|
||||
return getRulesSetOnContainer(username, password, containerNodeRef).stream()
|
||||
.filter(rule -> rule.getTitle().equals(title))
|
||||
.findAny()
|
||||
.get()
|
||||
.getId();
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef,
|
||||
String title
|
||||
) {
|
||||
return getRulesSetOnContainer(username, password, containerNodeRef)
|
||||
.stream()
|
||||
.filter(rule -> rule.getTitle().equals(title))
|
||||
.findAny()
|
||||
.get()
|
||||
.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -305,17 +363,28 @@ public class RulesAPI extends BaseAPI {
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @param containerNodeRef the container nodeRef
|
||||
*
|
||||
* @return The HTTP Response (or null if the current state is disabled).
|
||||
*/
|
||||
public HttpResponse disableRulesInheritance(
|
||||
String username, String password, String containerNodeRef) {
|
||||
if (containerInheritsRulesFromParent(username, password, containerNodeRef)) {
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef
|
||||
) {
|
||||
if (
|
||||
containerInheritsRulesFromParent(
|
||||
username,
|
||||
password,
|
||||
containerNodeRef
|
||||
)
|
||||
) {
|
||||
return doPostJsonRequest(
|
||||
username,
|
||||
password,
|
||||
SC_OK,
|
||||
new JSONObject(),
|
||||
MessageFormat.format(INHERIT_RULES_API, "{0}", containerNodeRef));
|
||||
username,
|
||||
password,
|
||||
SC_OK,
|
||||
new JSONObject(),
|
||||
MessageFormat.format(INHERIT_RULES_API, "{0}", containerNodeRef)
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -323,20 +392,30 @@ public class RulesAPI extends BaseAPI {
|
||||
/**
|
||||
* Enable inheritance on specific container
|
||||
*
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @param containerNodeRef the container nodeRef
|
||||
* @return The HTTP Response (or null if the current state is disabled).
|
||||
*/
|
||||
public HttpResponse enableRulesInheritance(
|
||||
String username, String password, String containerNodeRef) {
|
||||
if (!containerInheritsRulesFromParent(username, password, containerNodeRef)) {
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef
|
||||
) {
|
||||
if (
|
||||
!containerInheritsRulesFromParent(
|
||||
username,
|
||||
password,
|
||||
containerNodeRef
|
||||
)
|
||||
) {
|
||||
return doPostJsonRequest(
|
||||
username,
|
||||
password,
|
||||
SC_OK,
|
||||
new JSONObject(),
|
||||
MessageFormat.format(INHERIT_RULES_API, "{0}", containerNodeRef));
|
||||
username,
|
||||
password,
|
||||
SC_OK,
|
||||
new JSONObject(),
|
||||
MessageFormat.format(INHERIT_RULES_API, "{0}", containerNodeRef)
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -347,16 +426,26 @@ public class RulesAPI extends BaseAPI {
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @param containerNodeRef the container nodeRef
|
||||
*
|
||||
* @return a boolean specifying if the container inherits rules from parent
|
||||
* @throws JSONException
|
||||
*/
|
||||
public boolean containerInheritsRulesFromParent(
|
||||
String username, String password, String containerNodeRef) throws JSONException {
|
||||
JSONObject rulesInheritanceInfo =
|
||||
doGetRequest(
|
||||
username,
|
||||
password,
|
||||
MessageFormat.format(INHERIT_RULES_STATE_API, "{0}", containerNodeRef));
|
||||
return rulesInheritanceInfo.getJSONObject("data").getBoolean("inheritRules");
|
||||
String username,
|
||||
String password,
|
||||
String containerNodeRef
|
||||
) throws JSONException {
|
||||
JSONObject rulesInheritanceInfo = doGetRequest(
|
||||
username,
|
||||
password,
|
||||
MessageFormat.format(
|
||||
INHERIT_RULES_STATE_API,
|
||||
"{0}",
|
||||
containerNodeRef
|
||||
)
|
||||
);
|
||||
return rulesInheritanceInfo
|
||||
.getJSONObject("data")
|
||||
.getBoolean("inheritRules");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,10 @@
|
||||
*/
|
||||
package org.alfresco.rest.v0;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.alfresco.dataprep.AlfrescoHttpClientFactory;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.apache.http.NameValuePair;
|
||||
@@ -36,11 +40,6 @@ import org.json.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Helper methods for performing search using various Alfresco search APIs.
|
||||
*
|
||||
@@ -49,42 +48,46 @@ import java.util.List;
|
||||
*/
|
||||
@Component
|
||||
public class SearchAPI extends BaseAPI {
|
||||
|
||||
/** http client factory */
|
||||
@Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
@Autowired
|
||||
private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
|
||||
/** faceted search API endpoint */
|
||||
private static final String FACETED_SEARCH_ENDPOINT =
|
||||
"{0}alfresco/s/slingshot/rmsearch/faceted/rmsearch?{1}";
|
||||
"{0}alfresco/s/slingshot/rmsearch/faceted/rmsearch?{1}";
|
||||
|
||||
/** share live search API endpoint */
|
||||
private static final String SHARE_LIVE_SEARCH_DOCS_ENDPOINT =
|
||||
"{0}alfresco/s/slingshot/live-search-docs?{1}";
|
||||
"{0}alfresco/s/slingshot/live-search-docs?{1}";
|
||||
|
||||
/** RM search URL template */
|
||||
private static final String RM_SEARCH_ENDPOINT = "{0}alfresco/s/slingshot/rmsearch/{1}?{2}";
|
||||
private static final String RM_SEARCH_ENDPOINT =
|
||||
"{0}alfresco/s/slingshot/rmsearch/{1}?{2}";
|
||||
|
||||
/** RM all nodes search filters */
|
||||
private static final String RM_DEFAULT_NODES_FILTERS =
|
||||
"records/true,undeclared/true,vital/false,folders/{0},categories/{1},frozen/false,cutoff/false";
|
||||
"records/true,undeclared/true,vital/false,folders/{0},categories/{1},frozen/false,cutoff/false";
|
||||
|
||||
/**
|
||||
* Perform search request on search endpoint as a user.
|
||||
*
|
||||
* <p>This method is applicable only to endpoints that support HTTP GET requests and return JSON
|
||||
* body as response.
|
||||
*
|
||||
* <p>
|
||||
* This method is applicable only to endpoints that support HTTP GET requests and return JSON body as response.
|
||||
* @param searchEndpoint
|
||||
* @param searchUser
|
||||
* @param searchPassword
|
||||
* @return search results as a {@link JSONObject}, please refer to API documentation for details
|
||||
*/
|
||||
private JSONObject doSearch(String searchEndpoint, String searchUser, String searchPassword) {
|
||||
private JSONObject doSearch(
|
||||
String searchEndpoint,
|
||||
String searchUser,
|
||||
String searchPassword
|
||||
) {
|
||||
return facetedRequest(searchUser, searchPassword, null, searchEndpoint);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic rm search.
|
||||
*
|
||||
* @param username
|
||||
* @param password
|
||||
* @param site
|
||||
@@ -94,12 +97,13 @@ public class SearchAPI extends BaseAPI {
|
||||
* @return search results (see API reference for more details), null for any errors
|
||||
*/
|
||||
public JSONObject rmSearch(
|
||||
String username,
|
||||
String password,
|
||||
String site,
|
||||
String query,
|
||||
String filters,
|
||||
String sortby) {
|
||||
String username,
|
||||
String password,
|
||||
String site,
|
||||
String query,
|
||||
String filters,
|
||||
String sortby
|
||||
) {
|
||||
List<BasicNameValuePair> searchParameters = new ArrayList<>();
|
||||
searchParameters.add(new BasicNameValuePair("query", query));
|
||||
searchParameters.add(new BasicNameValuePair("filters", filters));
|
||||
@@ -107,19 +111,20 @@ public class SearchAPI extends BaseAPI {
|
||||
searchParameters.add(new BasicNameValuePair("sortby", sortby));
|
||||
}
|
||||
|
||||
String requestURL =
|
||||
MessageFormat.format(
|
||||
RM_SEARCH_ENDPOINT,
|
||||
alfrescoHttpClientFactory.getObject().getAlfrescoUrl(),
|
||||
(site != null) ? site : RM_SITE_ID,
|
||||
URLEncodedUtils.format(searchParameters, "UTF-8"));
|
||||
String requestURL = MessageFormat.format(
|
||||
RM_SEARCH_ENDPOINT,
|
||||
alfrescoHttpClientFactory.getObject().getAlfrescoUrl(),
|
||||
(site != null) ? site : RM_SITE_ID,
|
||||
URLEncodedUtils.format(searchParameters, "UTF-8")
|
||||
);
|
||||
|
||||
return doSearch(requestURL, username, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search as a user for nodes on site "rm" matching query, using
|
||||
* SearchAPI.RM_DEFAULT_RECORD_FILTERS and sorted by sortby <br>
|
||||
* Search as a user for nodes on site "rm" matching query, using SearchAPI.RM_DEFAULT_RECORD_FILTERS and sorted
|
||||
* by sortby
|
||||
* <br>
|
||||
*
|
||||
* @param username
|
||||
* @param password
|
||||
@@ -127,27 +132,36 @@ public class SearchAPI extends BaseAPI {
|
||||
* @param sortby
|
||||
* @return list of node names
|
||||
*/
|
||||
|
||||
public List<String> searchForNodeNamesAsUser(
|
||||
String username,
|
||||
String password,
|
||||
String query,
|
||||
String sortby,
|
||||
boolean includeCategories,
|
||||
boolean includeFolders) {
|
||||
String searchFilterParamaters =
|
||||
MessageFormat.format(
|
||||
RM_DEFAULT_NODES_FILTERS,
|
||||
Boolean.toString(includeFolders),
|
||||
Boolean.toString(includeCategories));
|
||||
String username,
|
||||
String password,
|
||||
String query,
|
||||
String sortby,
|
||||
boolean includeCategories,
|
||||
boolean includeFolders
|
||||
) {
|
||||
String searchFilterParamaters = MessageFormat.format(
|
||||
RM_DEFAULT_NODES_FILTERS,
|
||||
Boolean.toString(includeFolders),
|
||||
Boolean.toString(includeCategories)
|
||||
);
|
||||
|
||||
return getItemNames(
|
||||
rmSearch(username, password, "rm", query, searchFilterParamaters, sortby));
|
||||
rmSearch(
|
||||
username,
|
||||
password,
|
||||
"rm",
|
||||
query,
|
||||
searchFilterParamaters,
|
||||
sortby
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search as a user for nodes on site "rm" matching query, using
|
||||
* SearchAPI.RM_DEFAULT_RECORD_FILTERS and sorted by sortby and returns the property value for
|
||||
* the given nodeRef and property name
|
||||
* Search as a user for nodes on site "rm" matching query, using SearchAPI.RM_DEFAULT_RECORD_FILTERS and sorted
|
||||
* by sortby and returns the property value for the given nodeRef and property name
|
||||
*
|
||||
* @param username
|
||||
* @param password
|
||||
@@ -158,36 +172,52 @@ public class SearchAPI extends BaseAPI {
|
||||
* @return list of node properties
|
||||
*/
|
||||
public String searchForNodePropertyAsUser(
|
||||
String username,
|
||||
String password,
|
||||
String nodeRef,
|
||||
String propertyName,
|
||||
String query,
|
||||
String sortby,
|
||||
boolean includeCategories,
|
||||
boolean includeFolders) {
|
||||
String searchFilterParamaters =
|
||||
MessageFormat.format(
|
||||
RM_DEFAULT_NODES_FILTERS,
|
||||
Boolean.toString(includeFolders),
|
||||
Boolean.toString(includeCategories));
|
||||
String username,
|
||||
String password,
|
||||
String nodeRef,
|
||||
String propertyName,
|
||||
String query,
|
||||
String sortby,
|
||||
boolean includeCategories,
|
||||
boolean includeFolders
|
||||
) {
|
||||
String searchFilterParamaters = MessageFormat.format(
|
||||
RM_DEFAULT_NODES_FILTERS,
|
||||
Boolean.toString(includeFolders),
|
||||
Boolean.toString(includeCategories)
|
||||
);
|
||||
return getItemProperty(
|
||||
rmSearch(username, password, "rm", query, searchFilterParamaters, sortby),
|
||||
nodeRef,
|
||||
propertyName);
|
||||
rmSearch(
|
||||
username,
|
||||
password,
|
||||
"rm",
|
||||
query,
|
||||
searchFilterParamaters,
|
||||
sortby
|
||||
),
|
||||
nodeRef,
|
||||
propertyName
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic faceted search.
|
||||
*
|
||||
* @param username
|
||||
* @param password
|
||||
* @param parameters
|
||||
* @return search results (see API reference for more details), null for any errors
|
||||
*/
|
||||
public JSONObject facetedSearch(
|
||||
String username, String password, List<NameValuePair> parameters) {
|
||||
return facetedRequest(username, password, parameters, FACETED_SEARCH_ENDPOINT);
|
||||
String username,
|
||||
String password,
|
||||
List<NameValuePair> parameters
|
||||
) {
|
||||
return facetedRequest(
|
||||
username,
|
||||
password,
|
||||
parameters,
|
||||
FACETED_SEARCH_ENDPOINT
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -199,53 +229,69 @@ public class SearchAPI extends BaseAPI {
|
||||
* @return search results (see API reference for more details)
|
||||
*/
|
||||
public JSONObject liveSearchForDocuments(
|
||||
String searchUser, String searchPassword, String searchTerm) {
|
||||
String searchUser,
|
||||
String searchPassword,
|
||||
String searchTerm
|
||||
) {
|
||||
return facetedRequest(
|
||||
searchUser,
|
||||
searchPassword,
|
||||
Arrays.asList(new BasicNameValuePair("t", searchTerm)),
|
||||
SHARE_LIVE_SEARCH_DOCS_ENDPOINT);
|
||||
searchUser,
|
||||
searchPassword,
|
||||
Arrays.asList(new BasicNameValuePair("t", searchTerm)),
|
||||
SHARE_LIVE_SEARCH_DOCS_ENDPOINT
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute faceted search for term.
|
||||
*
|
||||
* @param searchUser
|
||||
* @param searchPassword
|
||||
* @param searchTerm
|
||||
* @return search results (see API reference for more details)
|
||||
*/
|
||||
public JSONObject facetedSearchForTerm(
|
||||
String searchUser, String searchPassword, String searchTerm) {
|
||||
String searchUser,
|
||||
String searchPassword,
|
||||
String searchTerm
|
||||
) {
|
||||
return facetedSearch(
|
||||
searchUser,
|
||||
searchPassword,
|
||||
Arrays.asList(new BasicNameValuePair("term", searchTerm)));
|
||||
searchUser,
|
||||
searchPassword,
|
||||
Arrays.asList(new BasicNameValuePair("term", searchTerm))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to search for documents as a user using faceted search.
|
||||
*
|
||||
* @param username to search as
|
||||
* @param password for username
|
||||
* @param term search term
|
||||
* @return list of document names found
|
||||
*/
|
||||
public List<String> searchForDocumentsAsUser(String username, String password, String term) {
|
||||
public List<String> searchForDocumentsAsUser(
|
||||
String username,
|
||||
String password,
|
||||
String term
|
||||
) {
|
||||
return getItemNames(facetedSearchForTerm(username, password, term));
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to search for documents as a user using share live search.
|
||||
*
|
||||
* @param username to search as
|
||||
* @param password for username
|
||||
* @param term search term
|
||||
* @return list of document names found
|
||||
*/
|
||||
public List<String> liveSearchForDocumentsAsUser(String username, String password, String term)
|
||||
throws JSONException {
|
||||
JSONObject searchResult = liveSearchForDocuments(username, password, term);
|
||||
public List<String> liveSearchForDocumentsAsUser(
|
||||
String username,
|
||||
String password,
|
||||
String term
|
||||
) throws JSONException {
|
||||
JSONObject searchResult = liveSearchForDocuments(
|
||||
username,
|
||||
password,
|
||||
term
|
||||
);
|
||||
LOGGER.info(searchResult.toString(3));
|
||||
return getItemNames(searchResult);
|
||||
}
|
||||
@@ -278,7 +324,11 @@ public class SearchAPI extends BaseAPI {
|
||||
* @param propertyName
|
||||
* @return
|
||||
*/
|
||||
private String getItemProperty(JSONObject searchResult, String nodeRef, String propertyName) {
|
||||
private String getItemProperty(
|
||||
JSONObject searchResult,
|
||||
String nodeRef,
|
||||
String propertyName
|
||||
) {
|
||||
return getPropertyValue(searchResult, nodeRef, propertyName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,9 @@ import org.springframework.stereotype.Component;
|
||||
*/
|
||||
@Component
|
||||
public class UserTrashcanAPI extends BaseAPI {
|
||||
private static final String EMPTY_TRASHCAN = "{0}archive/workspace/SpacesStore";
|
||||
|
||||
private static final String EMPTY_TRASHCAN =
|
||||
"{0}archive/workspace/SpacesStore";
|
||||
|
||||
/**
|
||||
* Clears the trashcan for the current user
|
||||
@@ -50,7 +52,8 @@ public class UserTrashcanAPI extends BaseAPI {
|
||||
*/
|
||||
public void emptyTrashcan(String username, String password) {
|
||||
assertNotNull(
|
||||
"Emptying trashcan failed for user " + username,
|
||||
doDeleteRequest(username, password, EMPTY_TRASHCAN));
|
||||
"Emptying trashcan failed for user " + username,
|
||||
doDeleteRequest(username, password, EMPTY_TRASHCAN)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ package org.alfresco.rest.v0.service;
|
||||
|
||||
import static org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty.CUT_OFF_DATE;
|
||||
|
||||
import java.util.HashMap;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty;
|
||||
import org.alfresco.rest.v0.RecordCategoriesAPI;
|
||||
@@ -36,8 +37,6 @@ import org.alfresco.utility.model.UserModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Service for different disposition schedule actions
|
||||
*
|
||||
@@ -46,165 +45,223 @@ import java.util.HashMap;
|
||||
*/
|
||||
@Service
|
||||
public class DispositionScheduleService extends BaseAPI {
|
||||
@Autowired private RecordCategoriesAPI recordCategoriesAPI;
|
||||
|
||||
@Autowired private DataUserAIS dataUser;
|
||||
@Autowired
|
||||
private RecordCategoriesAPI recordCategoriesAPI;
|
||||
|
||||
@Autowired
|
||||
private DataUserAIS dataUser;
|
||||
|
||||
/**
|
||||
* Helper method for adding a retain after period step
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period for what period the item will be retained
|
||||
* @param period for what period the item will be retained
|
||||
*/
|
||||
public void addRetainAfterPeriodStep(String categoryName, String period) {
|
||||
HashMap<RETENTION_SCHEDULE, String> retainStep = new HashMap<>();
|
||||
retainStep.put(RETENTION_SCHEDULE.NAME, "retain");
|
||||
retainStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, period);
|
||||
retainStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Retain after a period step");
|
||||
retainStep.put(
|
||||
RETENTION_SCHEDULE.DESCRIPTION,
|
||||
"Retain after a period step"
|
||||
);
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
retainStep);
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
retainStep
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a cut off immediately after created date step
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
*/
|
||||
public void addCutOffImmediatelyStep(String categoryName) {
|
||||
HashMap<RETENTION_SCHEDULE, String> cutOffStep = new HashMap<>();
|
||||
cutOffStep.put(RETENTION_SCHEDULE.NAME, "cutoff");
|
||||
cutOffStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, "immediately");
|
||||
cutOffStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Cut off immediately step");
|
||||
cutOffStep.put(
|
||||
RETENTION_SCHEDULE.DESCRIPTION,
|
||||
"Cut off immediately step"
|
||||
);
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
cutOffStep);
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
cutOffStep
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a cut off after period step
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period the period that needs to pass from periodProperty for cut off to be available
|
||||
* @param periodProperty the property of the dispositioned item that is used to calculate the
|
||||
* "as of" period
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period the period that needs to pass from periodProperty for cut off to be available
|
||||
* @param periodProperty the property of the dispositioned item that is used to calculate the "as of" period
|
||||
*/
|
||||
public void addCutOffAfterPeriodStep(
|
||||
String categoryName, String period, RetentionPeriodProperty periodProperty) {
|
||||
String categoryName,
|
||||
String period,
|
||||
RetentionPeriodProperty periodProperty
|
||||
) {
|
||||
HashMap<RETENTION_SCHEDULE, String> cutOffStep = new HashMap<>();
|
||||
cutOffStep.put(RETENTION_SCHEDULE.NAME, "cutoff");
|
||||
cutOffStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, period);
|
||||
cutOffStep.put(
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY, periodProperty.getPeriodProperty());
|
||||
cutOffStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Cut off after a period step");
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY,
|
||||
periodProperty.getPeriodProperty()
|
||||
);
|
||||
cutOffStep.put(
|
||||
RETENTION_SCHEDULE.DESCRIPTION,
|
||||
"Cut off after a period step"
|
||||
);
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
cutOffStep);
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
cutOffStep
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a destroy step with ghosting immediately after CUT OFF date
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
*/
|
||||
public void addDestroyWithGhostingImmediatelyAfterCutOff(String categoryName) {
|
||||
addDestroyWithGhostingAfterPeriodStep(categoryName, "immediately", CUT_OFF_DATE);
|
||||
public void addDestroyWithGhostingImmediatelyAfterCutOff(
|
||||
String categoryName
|
||||
) {
|
||||
addDestroyWithGhostingAfterPeriodStep(
|
||||
categoryName,
|
||||
"immediately",
|
||||
CUT_OFF_DATE
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a destroy step with ghosting after period
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period the period that needs to pass for destroy to be available
|
||||
* @param periodProperty the property of the dispositioned item that is used to calculate the
|
||||
* "as of" period
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period the period that needs to pass for destroy to be available
|
||||
* @param periodProperty the property of the dispositioned item that is used to calculate the "as of" period
|
||||
*/
|
||||
public void addDestroyWithGhostingAfterPeriodStep(
|
||||
String categoryName, String period, RetentionPeriodProperty periodProperty) {
|
||||
String categoryName,
|
||||
String period,
|
||||
RetentionPeriodProperty periodProperty
|
||||
) {
|
||||
HashMap<RETENTION_SCHEDULE, String> destroyStep = new HashMap<>();
|
||||
destroyStep.put(RETENTION_SCHEDULE.NAME, "destroy");
|
||||
destroyStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, period);
|
||||
destroyStep.put(
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY, periodProperty.getPeriodProperty());
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY,
|
||||
periodProperty.getPeriodProperty()
|
||||
);
|
||||
destroyStep.put(
|
||||
RETENTION_SCHEDULE.DESCRIPTION, "Destroy after a period step with keep metadata");
|
||||
RETENTION_SCHEDULE.DESCRIPTION,
|
||||
"Destroy after a period step with keep metadata"
|
||||
);
|
||||
destroyStep.put(RETENTION_SCHEDULE.RETENTION_GHOST, "on");
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
destroyStep);
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
destroyStep
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a destroy step without ghosting after period
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period the period that needs to pass for destroy to be available
|
||||
* @param periodProperty the property of the dispositioned item that is used to calculate the
|
||||
* "as of" period
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period the period that needs to pass for destroy to be available
|
||||
* @param periodProperty the property of the dispositioned item that is used to calculate the "as of" period
|
||||
*/
|
||||
public void addDestroyWithoutGhostingAfterPeriodStep(
|
||||
String categoryName, String period, RetentionPeriodProperty periodProperty) {
|
||||
String categoryName,
|
||||
String period,
|
||||
RetentionPeriodProperty periodProperty
|
||||
) {
|
||||
HashMap<RETENTION_SCHEDULE, String> destroyStep = new HashMap<>();
|
||||
destroyStep.put(RETENTION_SCHEDULE.NAME, "destroy");
|
||||
destroyStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, period);
|
||||
destroyStep.put(
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY, periodProperty.getPeriodProperty());
|
||||
destroyStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Destroy after a period step");
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY,
|
||||
periodProperty.getPeriodProperty()
|
||||
);
|
||||
destroyStep.put(
|
||||
RETENTION_SCHEDULE.DESCRIPTION,
|
||||
"Destroy after a period step"
|
||||
);
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
destroyStep);
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
destroyStep
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a cut off after an event occurs step
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param events the events that need to occur for cut off to be available
|
||||
* @param events the events that need to occur for cut off to be available
|
||||
*/
|
||||
public void addCutOffAfterEventStep(String categoryName, String events) {
|
||||
HashMap<RETENTION_SCHEDULE, String> cutOffStep = new HashMap<>();
|
||||
cutOffStep.put(RETENTION_SCHEDULE.NAME, "cutoff");
|
||||
cutOffStep.put(RETENTION_SCHEDULE.RETENTION_EVENTS, events);
|
||||
cutOffStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Cut off after event step");
|
||||
cutOffStep.put(
|
||||
RETENTION_SCHEDULE.DESCRIPTION,
|
||||
"Cut off after event step"
|
||||
);
|
||||
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
cutOffStep);
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
cutOffStep
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a transfer after an event occurs step
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param location the transfer location
|
||||
* @param events the events that need to occur for transfer to be available
|
||||
* @param location the transfer location
|
||||
* @param events the events that need to occur for transfer to be available
|
||||
*/
|
||||
public void addTransferAfterEventStep(String categoryName, String location, String events) {
|
||||
public void addTransferAfterEventStep(
|
||||
String categoryName,
|
||||
String location,
|
||||
String events
|
||||
) {
|
||||
HashMap<RETENTION_SCHEDULE, String> transferStep = new HashMap<>();
|
||||
transferStep.put(RETENTION_SCHEDULE.NAME, "transfer");
|
||||
transferStep.put(RETENTION_SCHEDULE.RETENTION_LOCATION, location);
|
||||
transferStep.put(RETENTION_SCHEDULE.RETENTION_EVENTS, events);
|
||||
transferStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Transfer after event step");
|
||||
transferStep.put(RETENTION_SCHEDULE.COMBINE_DISPOSITION_STEP_CONDITIONS, "false");
|
||||
transferStep.put(RETENTION_SCHEDULE.RETENTION_ELIGIBLE_FIRST_EVENT, "true");
|
||||
transferStep.put(
|
||||
RETENTION_SCHEDULE.DESCRIPTION,
|
||||
"Transfer after event step"
|
||||
);
|
||||
transferStep.put(
|
||||
RETENTION_SCHEDULE.COMBINE_DISPOSITION_STEP_CONDITIONS,
|
||||
"false"
|
||||
);
|
||||
transferStep.put(
|
||||
RETENTION_SCHEDULE.RETENTION_ELIGIBLE_FIRST_EVENT,
|
||||
"true"
|
||||
);
|
||||
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
transferStep);
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
transferStep
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -217,73 +274,100 @@ public class DispositionScheduleService extends BaseAPI {
|
||||
* @param combineConditions
|
||||
*/
|
||||
public void addAccessionStep(
|
||||
String categoryName,
|
||||
Boolean timeOrEvent,
|
||||
String events,
|
||||
String period,
|
||||
RetentionPeriodProperty periodProperty,
|
||||
Boolean combineConditions) {
|
||||
String categoryName,
|
||||
Boolean timeOrEvent,
|
||||
String events,
|
||||
String period,
|
||||
RetentionPeriodProperty periodProperty,
|
||||
Boolean combineConditions
|
||||
) {
|
||||
HashMap<RETENTION_SCHEDULE, String> accessionStep = new HashMap<>();
|
||||
accessionStep.put(RETENTION_SCHEDULE.NAME, "accession");
|
||||
accessionStep.put(
|
||||
RETENTION_SCHEDULE.COMBINE_DISPOSITION_STEP_CONDITIONS,
|
||||
Boolean.toString(combineConditions));
|
||||
RETENTION_SCHEDULE.COMBINE_DISPOSITION_STEP_CONDITIONS,
|
||||
Boolean.toString(combineConditions)
|
||||
);
|
||||
accessionStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, period);
|
||||
accessionStep.put(
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY, periodProperty.getPeriodProperty());
|
||||
RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY,
|
||||
periodProperty.getPeriodProperty()
|
||||
);
|
||||
if (!timeOrEvent) {
|
||||
accessionStep.put(
|
||||
RETENTION_SCHEDULE.RETENTION_ELIGIBLE_FIRST_EVENT,
|
||||
Boolean.toString(timeOrEvent));
|
||||
RETENTION_SCHEDULE.RETENTION_ELIGIBLE_FIRST_EVENT,
|
||||
Boolean.toString(timeOrEvent)
|
||||
);
|
||||
}
|
||||
accessionStep.put(RETENTION_SCHEDULE.RETENTION_EVENTS, events);
|
||||
accessionStep.put(
|
||||
RETENTION_SCHEDULE.DESCRIPTION, "Accession step with time and event conditions.");
|
||||
RETENTION_SCHEDULE.DESCRIPTION,
|
||||
"Accession step with time and event conditions."
|
||||
);
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
accessionStep);
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName,
|
||||
accessionStep
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create retention schedule with general fields for the given category as user
|
||||
* and apply it to the records/ record folders
|
||||
*
|
||||
* @param user the user who creates the retention schedule
|
||||
* @param categoryName the category on which is created the retention schedule
|
||||
* @param user the user who creates the retention schedule
|
||||
* @param categoryName the category on which is created the retention schedule
|
||||
* @param appliedToRecords true if is applied on records, false if is applied on folders
|
||||
*/
|
||||
public void createCategoryRetentionSchedule(
|
||||
UserModel user, String categoryName, Boolean appliedToRecords) {
|
||||
UserModel user,
|
||||
String categoryName,
|
||||
Boolean appliedToRecords
|
||||
) {
|
||||
recordCategoriesAPI.createRetentionSchedule(
|
||||
user.getUsername(), user.getPassword(), categoryName);
|
||||
String retentionScheduleNodeRef =
|
||||
recordCategoriesAPI.getDispositionScheduleNodeRef(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName);
|
||||
user.getUsername(),
|
||||
user.getPassword(),
|
||||
categoryName
|
||||
);
|
||||
String retentionScheduleNodeRef = recordCategoriesAPI.getDispositionScheduleNodeRef(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
categoryName
|
||||
);
|
||||
|
||||
HashMap<RETENTION_SCHEDULE, String> retentionScheduleGeneralFields = new HashMap<>();
|
||||
retentionScheduleGeneralFields.put(RETENTION_SCHEDULE.RETENTION_AUTHORITY, "Authority");
|
||||
retentionScheduleGeneralFields.put(
|
||||
RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS, "Instructions");
|
||||
RETENTION_SCHEDULE.RETENTION_AUTHORITY,
|
||||
"Authority"
|
||||
);
|
||||
retentionScheduleGeneralFields.put(
|
||||
RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS,
|
||||
"Instructions"
|
||||
);
|
||||
recordCategoriesAPI.setRetentionScheduleGeneralFields(
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
retentionScheduleNodeRef,
|
||||
retentionScheduleGeneralFields,
|
||||
appliedToRecords);
|
||||
dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(),
|
||||
retentionScheduleNodeRef,
|
||||
retentionScheduleGeneralFields,
|
||||
appliedToRecords
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create retention schedule with general fields for the given category as
|
||||
* admin and apply it to the records/record folders
|
||||
* Helper method to create retention schedule with general fields for the given category as admin
|
||||
* and apply it to the records/record folders
|
||||
*
|
||||
* @param categoryName the category on which is created the retention schedule
|
||||
* @param categoryName the category on which is created the retention schedule
|
||||
* @param appliedToRecords true if is applied on records, false if is applied on folders
|
||||
*/
|
||||
public void createCategoryRetentionSchedule(String categoryName, Boolean appliedToRecords) {
|
||||
createCategoryRetentionSchedule(dataUser.getAdminUser(), categoryName, appliedToRecords);
|
||||
public void createCategoryRetentionSchedule(
|
||||
String categoryName,
|
||||
Boolean appliedToRecords
|
||||
) {
|
||||
createCategoryRetentionSchedule(
|
||||
dataUser.getAdminUser(),
|
||||
categoryName,
|
||||
appliedToRecords
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user