diff --git a/.github/workflows/api-doc.yml b/.github/workflows/api-doc.yml deleted file mode 100644 index a308c9a..0000000 --- a/.github/workflows/api-doc.yml +++ /dev/null @@ -1,91 +0,0 @@ -name: api-doc - -# https://dev.folio.org/guides/api-doc/ - -# API_TYPES: string: The space-separated list of types to consider. -# One or more of 'RAML OAS'. -# e.g. 'OAS' -# -# API_DIRECTORIES: string: The space-separated list of directories to search -# for API description files. -# e.g. 'src/main/resources/openapi' -# NOTE: -- Also add each separate path to each of the "on: paths:" sections. -# e.g. 'src/main/resources/openapi/**' -# -# API_EXCLUDES: string: The space-separated list of directories and files -# to exclude from traversal, in addition to the default exclusions. -# e.g. '' - -env: - API_TYPES: 'RAML' - API_DIRECTORIES: 'ramls' - API_EXCLUDES: '' - OUTPUT_DIR: 'folio-api-docs' - AWS_S3_BUCKET: 'foliodocs' - AWS_S3_FOLDER: 'api' - AWS_S3_REGION: 'us-east-1' - AWS_S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }} - AWS_S3_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }} - -on: - push: - branches: [ main, master ] - paths: - - 'ramls/**' - tags: '[vV][0-9]+.[0-9]+.[0-9]+*' - -jobs: - api-doc: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - ref: ${{ github.REF }} - submodules: recursive - - name: Prepare folio-tools - run: | - git clone https://github.com/folio-org/folio-tools - cd folio-tools/api-doc \ - && yarn install \ - && pip3 install -r requirements.txt - - name: Obtain version if release tag - if: ${{ startsWith(github.ref, 'refs/tags/v') }} - run: | - version=$(echo ${GITHUB_REF#refs/tags/[vV]} | awk -F'.' '{ printf("%d.%d", $1, $2) }') - echo "VERSION_MAJ_MIN=${version}" >> $GITHUB_ENV - - name: Set some vars - run: | - echo "REPO_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV - - name: Report some info - run: | - echo "REPO_NAME=${{ env.REPO_NAME }}" - - name: Do api-doc - run: | - if test -n "${{ env.VERSION_MAJ_MIN }}"; then - echo "Docs for release version ${{ env.VERSION_MAJ_MIN }}" - option_release=$(echo "--version ${{ env.VERSION_MAJ_MIN }}") - else - option_release="" - fi - python3 folio-tools/api-doc/api_doc.py \ - --loglevel info \ - --types ${{ env.API_TYPES }} \ - --directories ${{ env.API_DIRECTORIES }} \ - --excludes ${{ env.API_EXCLUDES }} \ - --output ${{ env.OUTPUT_DIR }} $option_release - - name: Show generated files - working-directory: ${{ env.OUTPUT_DIR }} - run: ls -R - - name: Publish to AWS S3 - uses: sai-sharan/aws-s3-sync-action@v0.1.0 - with: - access_key: ${{ env.AWS_S3_ACCESS_KEY_ID }} - secret_access_key: ${{ env.AWS_S3_ACCESS_KEY }} - region: ${{ env.AWS_S3_REGION }} - source: ${{ env.OUTPUT_DIR }} - destination_bucket: ${{ env.AWS_S3_BUCKET }} - destination_prefix: ${{ env.AWS_S3_FOLDER }} - delete: false - quiet: false - diff --git a/.github/workflows/api-lint.yml b/.github/workflows/api-lint.yml deleted file mode 100644 index de292de..0000000 --- a/.github/workflows/api-lint.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: api-lint - -# https://dev.folio.org/guides/api-lint/ - -# API_TYPES: string: The space-separated list of types to consider. -# One or more of 'RAML OAS'. -# e.g. 'OAS' -# -# API_DIRECTORIES: string: The space-separated list of directories to search -# for API description files. -# e.g. 'src/main/resources/openapi' -# NOTE: -- Also add each separate path to each of the "on: paths:" sections. -# e.g. 'src/main/resources/openapi/**' -# -# API_EXCLUDES: string: The space-separated list of directories and files -# to exclude from traversal, in addition to the default exclusions. -# e.g. '' -# -# API_WARNINGS: boolean: Whether to cause Warnings to be displayed, -# and to fail the workflow. -# e.g. false - -env: - API_TYPES: 'RAML' - API_DIRECTORIES: 'ramls' - API_EXCLUDES: '' - API_WARNINGS: false - -on: - push: - paths: - - 'ramls/**' - pull_request: - paths: - - 'ramls/**' - -jobs: - api-lint: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - submodules: recursive - - name: Prepare folio-tools - run: | - git clone https://github.com/folio-org/folio-tools - cd folio-tools/api-lint \ - && yarn install \ - && pip3 install -r requirements.txt - - name: Configure default options - run: | - echo "OPTION_WARNINGS=''" >> $GITHUB_ENV - - name: Configure option warnings - if: ${{ env.API_WARNINGS == 'true' }} - run: | - echo "OPTION_WARNINGS=--warnings" >> $GITHUB_ENV - - name: Do api-lint - run: | - python3 folio-tools/api-lint/api_lint.py \ - --loglevel info \ - --types ${{ env.API_TYPES }} \ - --directories ${{ env.API_DIRECTORIES }} \ - --excludes ${{ env.API_EXCLUDES }} \ - ${{ env.OPTION_WARNINGS }} diff --git a/.github/workflows/api-schema-lint.yml b/.github/workflows/api-schema-lint.yml deleted file mode 100644 index 7a08b5a..0000000 --- a/.github/workflows/api-schema-lint.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: api-schema-lint - -# https://dev.folio.org/guides/describe-schema/ - -# API_DIRECTORIES: string: The space-separated list of directories to search -# for JSON Schema files. -# e.g. 'src/main/resources/openapi' -# NOTE: -- Also add each separate path to each of the "on: paths:" sections. -# e.g. 'src/main/resources/openapi/**' -# -# API_EXCLUDES: string: The space-separated list of directories and files -# to exclude from traversal, in addition to the default exclusions. -# e.g. '' - -env: - API_DIRECTORIES: 'ramls' - API_EXCLUDES: '' - -on: - push: - paths: - - 'ramls/**' - pull_request: - paths: - - 'ramls/**' - -jobs: - api-schema-lint: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - submodules: recursive - - name: Prepare folio-tools - run: | - git clone https://github.com/folio-org/folio-tools - cd folio-tools/api-schema-lint \ - && yarn install \ - && pip3 install -r requirements.txt - - name: Do api-schema-lint - run: | - python3 folio-tools/api-schema-lint/api_schema_lint.py \ - --loglevel info \ - --directories ${{ env.API_DIRECTORIES }} \ - --excludes ${{ env.API_EXCLUDES }} diff --git a/.github/workflows/validate-module.yml b/.github/workflows/validate-module.yml new file mode 100644 index 0000000..9c9a071 --- /dev/null +++ b/.github/workflows/validate-module.yml @@ -0,0 +1,71 @@ +name: Validate module + +on: + push: + +jobs: + run: + name: Validate module descriptor + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Get Pull Request Number + id: pr_number + run: echo "pull_request_number=$(gh pr view --json number -q .number || echo "")" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Setup java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' # See 'Supported distributions' for available options + java-version: '17' + - name: Set up Maven + uses: stCarolas/setup-maven@v5 + with: + maven-version: 3.8.2 + - name: Set up settings file + uses: 1arp/create-a-file-action@0.4.5 + with: + path: 'service' + file: 'settings.xml' + content: + + + + folioMavenProfile + + + folio-nexus + FOLIO Maven repository + https://repository.folio.org/repository/maven-folio + + + + + + folioMavenProfile + + + - name: Run validator + run: mvn org.folio:folio-module-descriptor-validator:1.0.0:validate -DmoduleDescriptorFile=service/src/main/okapi/ModuleDescriptor-template.json -s service/settings.xml -l validate_module_descriptor_output.txt + - name: Upload validator result + uses: actions/upload-artifact@v4 + if: always() + with: + name: validate_module_descriptor_output + path: | + validate_module_descriptor_output.txt + retention-days: 1 + - name: Setup validate_module_descriptor_errors file + if: failure() + run: echo "$(cat validate_module_descriptor_output.txt)" | egrep "\[ERROR\]\s*(\"key\"|\"value\")" | sed 's/\[ERROR\]\(\s*\)//;s/\"value\"\(\s*\):\(\s*\)\(.*\)/\3\n/;s/"key\"\(\s*\):\(\s*\)\(.*\)/\3/' | tee validate_module_descriptor_errors.txt + - name: Comment failures on PR + if: failure() + run: | + # Use GitHub API to create a comment on the PR + PR_NUMBER=${{ steps.pr_number.outputs.pull_request_number }} + GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} + COMMENT_URL="https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/comments" + echo "SENDING TO: $COMMENT_URL" + curl -s -H "Authorization: token ${GITHUB_TOKEN}" -X POST $COMMENT_URL --data "{ \"body\": $(cat validate_module_descriptor_errors.txt | jq -Rs) }" \ No newline at end of file diff --git a/service/src/main/okapi/ModuleDescriptor-template.json b/service/src/main/okapi/ModuleDescriptor-template.json index a3ef7c9..6aebd89 100644 --- a/service/src/main/okapi/ModuleDescriptor-template.json +++ b/service/src/main/okapi/ModuleDescriptor-template.json @@ -5,204 +5,403 @@ { "id": "licenses", "version": "${info.app.minorVersion}", - "handlers" : [ + "handlers": [ { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/licenses", - "permissionsRequired": [ "licenses.licenses.collection.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.licenses.collection.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/licenses/{id}", - "permissionsRequired": [ "licenses.licenses.item.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.licenses.item.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/licenses/{id}/linkedAgreements", - "permissionsRequired": [ "licenses.licenses.item.linkedAgreements.get" ], + "permissionsRequired": [ + "licenses.licenses.item.linkedAgreements.get" + ], "modulePermissions": [ - "erm.agreements.item.get", - "erm.agreements.linkedLicenses.get" - ] - },{ - "methods": ["POST"], + "erm.agreements.item.get", + "erm.agreements.linkedLicenses.get" + ] + }, + { + "methods": [ + "POST" + ], "pathPattern": "/licenses/licenses", - "permissionsRequired": [ "licenses.licenses.item.post" ] - },{ - "methods": ["PUT"], + "permissionsRequired": [ + "licenses.licenses.item.post" + ] + }, + { + "methods": [ + "PUT" + ], "pathPattern": "/licenses/licenses/{id}", - "permissionsRequired": [ "licenses.licenses.item.put" ] - },{ - "methods": ["POST"], + "permissionsRequired": [ + "licenses.licenses.item.put" + ] + }, + { + "methods": [ + "POST" + ], "pathPattern": "/licenses/licenses/{id}/clone", - "permissionsRequired": [ "licenses.licenses.item.clone" ] - },{ - "methods": ["DELETE"], + "permissionsRequired": [ + "licenses.licenses.clone.execute" + ] + }, + { + "methods": [ + "DELETE" + ], "pathPattern": "/licenses/licenses/{id}", - "permissionsRequired": [ "licenses.licenses.item.delete" ], - "modulePermissions": [ "erm.agreements.linkedLicenses.get" ] + "permissionsRequired": [ + "licenses.licenses.item.delete" + ], + "modulePermissions": [ + "erm.agreements.linkedLicenses.get" + ] }, { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/amendments", - "permissionsRequired": [ "licenses.licenses.collection.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.amendments.collection.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/amendments/{id}", - "permissionsRequired": [ "licenses.licenses.item.get" ] - },{ - "methods": ["POST"], + "permissionsRequired": [ + "licenses.amendments.item.get" + ] + }, + { + "methods": [ + "POST" + ], "pathPattern": "/licenses/amendments", - "permissionsRequired": [ "licenses.licenses.item.post" ] - },{ - "methods": ["PUT"], + "permissionsRequired": [ + "licenses.amendments.item.post" + ] + }, + { + "methods": [ + "PUT" + ], "pathPattern": "/licenses/amendments/{id}", - "permissionsRequired": [ "licenses.licenses.item.put" ] - },{ - "methods": ["POST"], + "permissionsRequired": [ + "licenses.amendments.item.put" + ] + }, + { + "methods": [ + "POST" + ], "pathPattern": "/licenses/amendments/{id}/clone", - "permissionsRequired": [ "licenses.licenses.item.clone" ] - },{ - "methods": ["DELETE"], + "permissionsRequired": [ + "licenses.amendments.clone.execute" + ] + }, + { + "methods": [ + "DELETE" + ], "pathPattern": "/licenses/amendments/{id}", - "permissionsRequired": [ "licenses.licenses.item.delete" ], - "modulePermissions": [ "erm.agreements.linkedLicenses.get" ] + "permissionsRequired": [ + "licenses.amendments.item.delete" + ], + "modulePermissions": [ + "erm.agreements.linkedLicenses.get" + ] }, { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/files", - "permissionsRequired": [ "licenses.files.collection.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.files.collection.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/files/{id}", - "permissionsRequired": [ "licenses.files.item.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.files.item.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/files/{id}/raw", - "permissionsRequired": [ "licenses.files.item.download" ] - },{ - "methods": ["POST"], + "permissionsRequired": [ + "licenses.files.item.download" + ] + }, + { + "methods": [ + "POST" + ], "pathPattern": "/licenses/files", - "permissionsRequired": [ "licenses.files.item.post" ] - },{ - "methods": ["PUT"], + "permissionsRequired": [ + "licenses.files.item.post" + ] + }, + { + "methods": [ + "PUT" + ], "pathPattern": "/licenses/files/{id}", - "permissionsRequired": [ "licenses.files.item.put" ] - },{ - "methods": ["DELETE"], + "permissionsRequired": [ + "licenses.files.item.put" + ] + }, + { + "methods": [ + "DELETE" + ], "pathPattern": "/licenses/files/{id}", - "permissionsRequired": [ "licenses.files.item.delete" ] + "permissionsRequired": [ + "licenses.files.item.delete" + ] }, - { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/contacts", - "permissionsRequired": [ "licenses.contacts.collection.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.contacts.collection.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/contacts/{id}", - "permissionsRequired": [ "licenses.contacts.item.get" ] + "permissionsRequired": [ + "licenses.contacts.item.get" + ] }, - { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/org", - "permissionsRequired": [ "licenses.orgs.collection.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.orgs.collection.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/org/{id}", - "permissionsRequired": [ "licenses.orgs.item.get" ] + "permissionsRequired": [ + "licenses.orgs.item.get" + ] }, - { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/refdata", - "permissionsRequired": [ "licenses.refdata.collection.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.refdata.category.collection.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/refdata/{domain}/{property}", - "permissionsRequired": [ "licenses.refdata.collection.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.refdata.value.collection.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/refdata/{id}", - "permissionsRequired": [ "licenses.refdata.item.get" ] - },{ - "methods": ["POST"], + "permissionsRequired": [ + "licenses.refdata.category.item.get" + ] + }, + { + "methods": [ + "POST" + ], "pathPattern": "/licenses/refdata", - "permissionsRequired": [ "licenses.refdata.item.post" ] - },{ - "methods": ["PUT"], + "permissionsRequired": [ + "licenses.refdata.category.item.post" + ] + }, + { + "methods": [ + "PUT" + ], "pathPattern": "/licenses/refdata/{id}", - "permissionsRequired": [ "licenses.refdata.item.put" ] - },{ - "methods": ["DELETE"], + "permissionsRequired": [ + "licenses.refdata.category.item.put" + ] + }, + { + "methods": [ + "DELETE" + ], "pathPattern": "/licenses/refdata/{id}", - "permissionsRequired": [ "licenses.refdata.item.delete" ] + "permissionsRequired": [ + "licenses.refdata.category.item.delete" + ] }, - { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/custprops", - "permissionsRequired": [ "licenses.custprops.collection.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.custprops.collection.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/custprops/{id}", - "permissionsRequired": [ "licenses.custprops.item.get" ] - },{ - "methods": ["POST"], + "permissionsRequired": [ + "licenses.custprops.item.get" + ] + }, + { + "methods": [ + "POST" + ], "pathPattern": "/licenses/custprops", - "permissionsRequired": [ "licenses.custprops.item.post" ] - },{ - "methods": ["PUT"], + "permissionsRequired": [ + "licenses.custprops.item.post" + ] + }, + { + "methods": [ + "PUT" + ], "pathPattern": "/licenses/custprops/{id}", - "permissionsRequired": [ "licenses.custprops.item.put" ] - },{ - "methods": ["DELETE"], + "permissionsRequired": [ + "licenses.custprops.item.put" + ] + }, + { + "methods": [ + "DELETE" + ], "pathPattern": "/licenses/custprops/{id}", - "permissionsRequired": [ "licenses.custprops.item.delete" ] + "permissionsRequired": [ + "licenses.custprops.item.delete" + ] }, { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/custprops/contexts", - "permissionsRequired": [ "licenses.custprops.collection.get" ] + "permissionsRequired": [ + "licenses.custprops.contexts.collection.get" + ] }, { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/licenseLinks", - "permissionsRequired": [ "licenses.licenseLinks.collection.get" ] - },{ - "methods": ["GET"], + "permissionsRequired": [ + "licenses.licenseLinks.collection.get" + ] + }, + { + "methods": [ + "GET" + ], "pathPattern": "/licenses/licenseLinks/{id}", - "permissionsRequired": [ "licenses.licenseLinks.item.get" ] + "permissionsRequired": [ + "licenses.licenseLinks.item.get" + ] }, - { - "methods": ["POST"], + "methods": [ + "POST" + ], "pathPattern": "/licenses/licenses/compareTerms", - "permissionsRequired": [ "licenses.compareTerms" ] + "permissionsRequired": [ + "licenses.custprops.compare.execute" + ] }, { - "methods": ["GET"], + "methods": [ + "GET" + ], "pathPattern": "/licenses/admin/*", - "permissionsRequired": ["licenses.admin.action"] + "permissionsRequired": [ + "licenses.admin.action.execute" + ] }, { - "methods": [ "GET" ], + "methods": [ + "GET" + ], "pathPattern": "/licenses/settings*", - "permissionsRequired": [ "licenses.settings.get" ] + "permissionsRequired": [ + "licenses.settings.get" + ] }, { - "methods": [ "POST" ], + "methods": [ + "POST" + ], "pathPattern": "/licenses/settings*", - "permissionsRequired": [ "licenses.settings.post" ] + "permissionsRequired": [ + "licenses.settings.post" + ] }, { - "methods": [ "PUT" ], + "methods": [ + "PUT" + ], "pathPattern": "/licenses/settings*", - "permissionsRequired": [ "licenses.settings.put" ] + "permissionsRequired": [ + "licenses.settings.put" + ] }, { - "methods": [ "DELETE" ], + "methods": [ + "DELETE" + ], "pathPattern": "/licenses/settings*", - "permissionsRequired": [ "licenses.settings.delete" ] + "permissionsRequired": [ + "licenses.settings.delete" + ] } ] }, @@ -212,22 +411,31 @@ "version": "1.0", "handlers": [ { - "methods": [ "GET" ], + "methods": [ + "GET" + ], "pathPattern": "/dashboard/definitions", "permissionsRequired": [] } ] }, { - "id" : "_tenant", - "version" : "1.2", - "interfaceType" : "system", - "handlers" : [ { - "methods" : [ "POST", "DELETE" ], - "pathPattern" : "/_/tenant" - }, { - "methods" : [ "POST" ], - "pathPattern" : "/_/tenant/disable" + "id": "_tenant", + "version": "1.2", + "interfaceType": "system", + "handlers": [ + { + "methods": [ + "POST", + "DELETE" + ], + "pathPattern": "/_/tenant" + }, + { + "methods": [ + "POST" + ], + "pathPattern": "/_/tenant/disable" } ] }, @@ -237,8 +445,10 @@ "interfaceType": "system", "handlers": [ { - "permissionsRequired" : [], - "methods": [ "GET" ], + "permissionsRequired": [], + "methods": [ + "GET" + ], "pathPattern": "/licenses/admin/triggerHousekeeping", "unit": "hour", "delay": "24" @@ -252,28 +462,43 @@ "displayName": "Licenses collection get", "description": "Get a collection of license records" }, + { + "permissionName": "licenses.amendments.collection.get", + "displayName": "Amendments collection get", + "description": "Get a collection of amendment records" + }, { "permissionName": "licenses.licenses.item.get", "displayName": "Licenses item get", "description": "Get an license record" }, + { + "permissionName": "licenses.amendments.item.get", + "displayName": "Amendment item get", + "description": "Get an amendment record" + }, { "permissionName": "licenses.licenses.item.linkedAgreements.get", "displayName": "Licenses item linked agreements get", "description": "Get an license's linked agreement records" }, { - "permissionName": "licenses.compareTerms", + "permissionName": "licenses.custprops.compare.execute", "displayName": "Licenses compare terms", - "description": "Compare license terms" + "description": "Compare license terms", + "replaces": [ + "licenses.compareTerms" + ] }, { "permissionName": "licenses.licenses.view", "subPermissions": [ "licenses.licenses.collection.get", + "licenses.amendments.collection.get", "licenses.licenses.item.get", + "licenses.amendments.item.get", "licenses.licenses.item.linkedAgreements.get", - "licenses.compareTerms" + "licenses.custprops.compare.execute" ] }, { @@ -281,23 +506,47 @@ "displayName": "Licenses item post", "description": "Post an license record" }, + { + "permissionName": "licenses.amendments.item.post", + "displayName": "Amendment item post", + "description": "Post an amendment record" + }, { "permissionName": "licenses.licenses.item.put", "displayName": "Licenses item put", "description": "Put an license record" }, { - "permissionName": "licenses.licenses.item.clone", + "permissionName": "licenses.amendments.item.put", + "displayName": "Amendment item put", + "description": "Put an amendment record" + }, + { + "permissionName": "licenses.licenses.clone.execute", "displayName": "Licenses item clone", - "description": "Clone an license record" + "description": "Clone an license record", + "replaces": [ + "licenses.licenses.item.clone" + ] + }, + { + "permissionName": "licenses.amendments.clone.execute", + "displayName": "Amendment item clone", + "description": "Clone an amendment record", + "replaces": [ + "licenses.licenses.item.clone" + ] }, { "permissionName": "licenses.licenses.edit", "subPermissions": [ "licenses.licenses.view", "licenses.licenses.item.post", + "licenses.amendments.item.post", "licenses.licenses.item.put", - "licenses.licenses.item.clone" + "licenses.amendments.item.put", + "licenses.licenses.clone.execute", + "licenses.amendments.clone.execute" ] }, { @@ -305,11 +554,17 @@ "displayName": "Licenses item delete", "description": "Delete an license record" }, + { + "permissionName": "licenses.amendments.item.delete", + "displayName": "Amendments item delete", + "description": "Delete an amendment record" + }, { "permissionName": "licenses.licenses.manage", "subPermissions": [ "licenses.licenses.edit", - "licenses.licenses.item.delete" + "licenses.licenses.item.delete", + "licenses.amendments.item.delete" ] }, { @@ -399,50 +654,74 @@ ] }, { - "permissionName": "licenses.refdata.collection.get", - "displayName": "Licenses refdata collection get", - "description": "Get a collection of refdata records" + "permissionName": "licenses.refdata.category.collection.get", + "displayName": "Licenses refdata category collection get", + "description": "Get a collection of refdata category records", + "replaces": [ + "licenses.refdata.collection.get" + ] }, { - "permissionName": "licenses.refdata.item.get", - "displayName": "Licenses refdata item get", - "description": "Get a refdata record" + "permissionName": "licenses.refdata.value.collection.get", + "displayName": "Licenses refdata value collection get", + "description": "Get a collection of refdata value records", + "replaces": [ + "licenses.refdata.collection.get" + ] + }, + { + "permissionName": "licenses.refdata.category.item.get", + "displayName": "Licenses refdata category item get", + "description": "Get a refdata category record", + "replaces": [ + "licenses.refdata.item.get" + ] }, { "permissionName": "licenses.refdata.view", "subPermissions": [ - "licenses.refdata.collection.get", - "licenses.refdata.item.get" + "licenses.refdata.category.collection.get", + "licenses.refdata.value.collection.get", + "licenses.refdata.category.item.get" ] }, { - "permissionName": "licenses.refdata.item.post", - "displayName": "Licenses refdata item post", - "description": "Post a refdata record" + "permissionName": "licenses.refdata.category.item.post", + "displayName": "Licenses refdata category item post", + "description": "Post a refdata category record", + "replaces": [ + "licenses.refdata.item.post" + ] }, { - "permissionName": "licenses.refdata.item.put", - "displayName": "Licenses refdata item put", - "description": "Put a refdata record" + "permissionName": "licenses.refdata.category.item.put", + "displayName": "Licenses refdata category item put", + "description": "Put a refdata category record", + "replaces": [ + "licenses.refdata.item.put" + ] }, { "permissionName": "licenses.refdata.edit", "subPermissions": [ "licenses.refdata.view", - "licenses.refdata.item.post", - "licenses.refdata.item.put" + "licenses.refdata.category.item.post", + "licenses.refdata.category.item.put" ] }, { - "permissionName": "licenses.refdata.item.delete", - "displayName": "Licenses refdata item delete", - "description": "Delete a refdata record" + "permissionName": "licenses.refdata.category.item.delete", + "displayName": "Licenses refdata category item delete", + "description": "Delete a refdata category record", + "replaces": [ + "licenses.refdata.item.delete" + ] }, { "permissionName": "licenses.refdata.manage", "subPermissions": [ "licenses.refdata.edit", - "licenses.refdata.item.delete" + "licenses.refdata.category.item.delete" ] }, { @@ -467,6 +746,11 @@ "displayName": "Licenses custom properties links collection get", "description": "Get a collection of custom property records" }, + { + "permissionName": "licenses.custprops.contexts.collection.get", + "displayName": "Licenses custom properties contexts get", + "description": "Get all contexts for licenses custom properties" + }, { "permissionName": "licenses.custprops.item.get", "displayName": "Licenses custom properties item get", @@ -476,6 +760,7 @@ "permissionName": "licenses.custprops.view", "subPermissions": [ "licenses.custprops.collection.get", + "licenses.custprops.contexts.collection.get", "licenses.custprops.item.get" ] }, @@ -510,16 +795,19 @@ ] }, { - "permissionName": "licenses.admin.action", + "permissionName": "licenses.admin.action.execute", "displayName": "Admin endpoint perform action", - "description": "Performs action from admin endpoint" + "description": "Performs action from admin endpoint", + "replaces": [ + "licenses.admin.action" + ] }, { "permissionName": "licenses.settings.get", "displayName": "settings get", "description": "get settings", "visible": false - }, + }, { "permissionName": "licenses.settings.collection.get", "displayName": "settings collection get", @@ -531,13 +819,13 @@ "displayName": "settings post", "description": "post settings", "visible": false - }, + }, { "permissionName": "licenses.settings.put", "displayName": "settings put", "description": "put settings", "visible": false - }, + }, { "permissionName": "licenses.settings.delete", "displayName": "settings delete", @@ -582,19 +870,44 @@ "HostConfig": { "Memory": 805306368, "PortBindings": { - "8080/tcp": [{ "HostPort": "%p" }] + "8080/tcp": [ + { + "HostPort": "%p" + } + ] } } }, - "dockerPull" : false, + "dockerPull": false, "env": [ - { "name": "JAVA_OPTIONS", "value": "-server -XX:+UseContainerSupport -XX:MaxRAMPercentage=50.0 -XX:+PrintFlagsFinal" }, - { "name": "DB_HOST", "value": "postgres" }, - { "name": "DB_PORT", "value": "5432" }, - { "name": "DB_USERNAME", "value": "folio_admin" }, - { "name": "DB_PASSWORD", "value": "folio_admin" }, - { "name": "DB_DATABASE", "value": "okapi_modules" }, - { "name": "DB_MAXPOOLSIZE", "value": "50" } + { + "name": "JAVA_OPTIONS", + "value": "-server -XX:+UseContainerSupport -XX:MaxRAMPercentage=50.0 -XX:+PrintFlagsFinal" + }, + { + "name": "DB_HOST", + "value": "postgres" + }, + { + "name": "DB_PORT", + "value": "5432" + }, + { + "name": "DB_USERNAME", + "value": "folio_admin" + }, + { + "name": "DB_PASSWORD", + "value": "folio_admin" + }, + { + "name": "DB_DATABASE", + "value": "okapi_modules" + }, + { + "name": "DB_MAXPOOLSIZE", + "value": "50" + } ] } -} +} \ No newline at end of file