diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 89240b8e..dc35cf2b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -13,10 +13,6 @@ updates: time: "22:00" timezone: Europe/London open-pull-requests-limit: 99 - ignore: - - dependency-name: io.fabric8:fabric8-maven-plugin - versions: - - "> 4.4.0, < 4.5" registries: - maven-alfresco-internal - package-ecosystem: docker diff --git a/.travis.yml b/.travis.yml index addb85c7..f18d59b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,6 @@ branches: - master - /^SP\/.+$/ - /^HF\/.+$/ - - company_release - /^ATS-.*$/ - /^ACS-.*$/ @@ -30,7 +29,6 @@ stages: if: branch = master - build and test - release - - company_release before_install: bash _ci/init.sh @@ -47,6 +45,7 @@ jobs: before_script: travis_wait bash _ci/cache_artifacts.sh install: travis_wait 20 mvn -B -U -q clean install -DadditionalOption=-Xdoclint:none -DskipTests -Dmaven.javadoc.skip=true -Dmaven.wagon.http.pool=false -Pbase script: mvn -B -U clean deploy -DadditionalOption=-Xdoclint:none -Dmaven.javadoc.skip=true -Dmaven.wagon.http.pool=false -Pbase + # TODO PoC for Video/Audio transforms (using FFmpeg) - name: "Transform Video/Audio (FFmpeg)" stage: build and test @@ -54,54 +53,36 @@ jobs: before_script: travis_wait bash _ci/cache_artifacts.sh install: _ci/build.sh ffmpeg script: bash _ci/test.sh ffmpeg -# - name: "ImageMagick" -# stage: build and test -# if: branch NOT IN (company_release) -# before_script: travis_wait bash _ci/cache_artifacts.sh -# install: _ci/build.sh imagemagick -# script: bash _ci/test.sh imagemagick -# - name: "LibreOffice" -# stage: build and test -# if: branch NOT IN (company_release) -# before_script: travis_wait bash _ci/cache_artifacts.sh -# install: _ci/build.sh libreoffice -# script: bash _ci/test.sh libreoffice -# - name: "Transform Misc" -# stage: build and test -# if: branch NOT IN (company_release) -# before_script: travis_wait bash _ci/cache_artifacts.sh -# install: _ci/build.sh misc -# script: bash _ci/test.sh misc -# - name: "PDF Renderer" -# stage: build and test -# if: branch NOT IN (company_release) -# before_script: travis_wait bash _ci/cache_artifacts.sh -# install: _ci/build.sh pdf-renderer -# script: bash _ci/test.sh pdf-renderer -# - name: "Tika" -# stage: build and test -# if: branch NOT IN (company_release) -# before_script: travis_wait bash _ci/cache_artifacts.sh -# install: _ci/build.sh tika -# script: bash _ci/test.sh tika -# - name: "All in One Transformer" -# stage: build and test -# if: branch NOT IN (company_release) -# before_script: travis_wait bash _ci/cache_artifacts.sh -# install: _ci/build.sh full-build -# script: travis_wait 30 bash _ci/test.sh aio-test - # - name: "WhiteSource" - # stage: build and test - # if: branch NOT IN (company_release) - # script: bash _ci/whitesource.sh - # - name: "Source Clear Scan (SCA)" - # if: branch NOT IN (company_release) - # install: skip - # script: travis_wait 30 bash _ci/sourceclear.sh + + - name: "ImageMagick" + before_script: travis_wait bash _ci/cache_artifacts.sh + install: _ci/build.sh imagemagick + script: bash _ci/test.sh imagemagick + - name: "LibreOffice" + before_script: travis_wait bash _ci/cache_artifacts.sh + install: _ci/build.sh libreoffice + script: bash _ci/test.sh libreoffice + - name: "Transform Misc" + before_script: travis_wait bash _ci/cache_artifacts.sh + install: _ci/build.sh misc + script: bash _ci/test.sh misc + - name: "PDF Renderer" + before_script: travis_wait bash _ci/cache_artifacts.sh + install: _ci/build.sh pdf-renderer + script: bash _ci/test.sh pdf-renderer + - name: "Tika" + before_script: travis_wait bash _ci/cache_artifacts.sh + install: _ci/build.sh tika + script: bash _ci/test.sh tika + - name: "All in One Transformer" + before_script: travis_wait bash _ci/cache_artifacts.sh + install: _ci/build.sh full-build + script: travis_wait 30 bash _ci/test.sh aio-test + # - name: "Static Analysis (SAST)" # stage: build and test # TODO ATS-721: comment out until it is possible to run concurrent SAST scans -# if: branch NOT IN (company_release) AND type != pull_request +# if: type != pull_request # if: branch = master AND type != pull_request # before_install: # - bash _ci/static_analysis_init.sh @@ -113,34 +94,3 @@ jobs: if: commit_message ~= /\[trigger release\]/ AND branch ~= /^(master|SP\/.+|HF\/.+)$/ before_script: travis_wait bash _ci/cache_artifacts.sh script: travis_wait 55 bash _ci/release.sh - before_deploy: source _ci/prepare_staging_deploy.sh - deploy: - provider: s3 - access_key_id: "${STAGING_AWS_ACCESS_KEY}" - secret_access_key: "${STAGING_AWS_SECRET_KEY}" - bucket: "alfresco-artefacts-staging" - skip_cleanup: true - region: "eu-west-1" - local_dir: "deploy_dir" - upload-dir: "enterprise/AlfrescoTransformServices/TransformEngines/${VERSION}" - on: - all_branches: true - - - name: "Company Release" - stage: company_release - if: branch = company_release - before_install: bash _ci/init.sh - install: echo "NoOp" - script: echo "NoOp" - before_deploy: source _ci/prepare_release_deploy.sh - deploy: - provider: s3 - access_key_id: "${RELEASE_AWS_ACCESS_KEY}" - secret_access_key: "${RELEASE_AWS_SECRET_KEY}" - bucket: "eu.dl.alfresco.com" - skip_cleanup: true - region: "eu-west-1" - local_dir: "deploy_dir" - upload-dir: "release/enterprise/AlfrescoTransformServices/TransformEngines/${VERSION}" - on: - branch: company_release diff --git a/.whitesource b/.whitesource deleted file mode 100644 index f0569521..00000000 --- a/.whitesource +++ /dev/null @@ -1,8 +0,0 @@ -{ - "generalSettings": { - "shouldScanRepo": true - }, - "checkRunSettings": { - "vulnerableCheckRunConclusionLevel": "failure" - } -} \ No newline at end of file diff --git a/README.md b/README.md index 2093f3e2..4723c2b2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Contains the common transformer (T-Engine) code, plus a few actual implementatio ### Documentation -In addition to the sub-projects (such as `alfresco-transformer-base` README above) some additional documentation can be found in: +In addition to the subprojects (such as `alfresco-transformer-base` README above) some additional documentation can be found in: * [this project's docs](docs) folder * [ACS Packaging docs](https://github.com/Alfresco/acs-packaging/tree/master/docs) folder @@ -68,7 +68,7 @@ You can find examples of using Core AIO in the reference ACS Deployment for Dock * [ACS Community](https://github.com/Alfresco/acs-deployment/blob/master/docker-compose/community-docker-compose.yml) * [ACS Enterprise](https://github.com/Alfresco/acs-deployment/blob/master/docker-compose/docker-compose.yml) -You can find examples of using the indivudal T-Engines in the reference ACS Deployment for Helm / Kubernetes: +You can find examples of using the individual T-Engines in the reference ACS Deployment for Helm / Kubernetes: * [ACS Community](https://github.com/Alfresco/acs-deployment/blob/master/helm/alfresco-content-services/community_values.yaml) * [ACS Enterprise](https://github.com/Alfresco/acs-deployment/blob/master/helm/alfresco-content-services/values.yaml) diff --git a/_ci/cache_artifacts.sh b/_ci/cache_artifacts.sh index 2b7fc5e8..2c0f9abd 100644 --- a/_ci/cache_artifacts.sh +++ b/_ci/cache_artifacts.sh @@ -5,7 +5,7 @@ PS4="\[\e[35m\]+ \[\e[m\]" set -vex pushd "$(dirname "${BASH_SOURCE[0]}")/../" -LIBREOFFICE_VERSION=6.3.5 +LIBREOFFICE_VERSION=7.0.6 # Cache the LibreOffice distribution, as it is takes a long time to download and it can cause the # build to fail (no output for more than 10 minutes) diff --git a/_ci/prepare_release_deploy.sh b/_ci/prepare_release_deploy.sh deleted file mode 100644 index 7ea6308b..00000000 --- a/_ci/prepare_release_deploy.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -echo "========================== Starting Prepare Release Deploy Script ===========================" -PS4="\[\e[35m\]+ \[\e[m\]" -set -vex -pushd "$(dirname "${BASH_SOURCE[0]}")/../" - -# Identify latest annotated tag (latest version) -export VERSION=$(git describe --abbrev=0 --tags) - -mkdir -p deploy_dir - -# Download the WhiteSource report -# mvn -B org.alfresco:whitesource-downloader-plugin:inventoryReport \ -# -N \ -# "-Dorg.whitesource.product=Transform Service" \ -# -DsaveReportAs=deploy_dir/3rd-party.xlsx - -echo "Local deploy directory content:" -ls -lA deploy_dir - -popd -set +vex -echo "========================== Finishing Prepare Release Deploy Script ==========================" diff --git a/_ci/prepare_staging_deploy.sh b/_ci/prepare_staging_deploy.sh deleted file mode 100644 index 82237779..00000000 --- a/_ci/prepare_staging_deploy.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -echo "========================== Starting Prepare Staging Deploy Script ===========================" -PS4="\[\e[35m\]+ \[\e[m\]" -set -vex -pushd "$(dirname "${BASH_SOURCE[0]}")/../" - -# Identify latest annotated tag (latest version) -export VERSION=$(git describe --abbrev=0 --tags) - -mkdir -p deploy_dir - -# Download the WhiteSource report -# mvn -B org.alfresco:whitesource-downloader-plugin:inventoryReport \ -# -N \ -# "-Dorg.whitesource.product=Transform Service" \ -# -DsaveReportAs=deploy_dir/3rd-party.xlsx - -echo "Local deploy directory content:" -ls -lA deploy_dir - -popd -set +vex -echo "========================== Finishing Prepare Staging Deploy Script ==========================" diff --git a/_ci/settings.xml b/_ci/settings.xml index 70a190a1..3f6e03bd 100644 --- a/_ci/settings.xml +++ b/_ci/settings.xml @@ -28,10 +28,6 @@ https://artifacts.alfresco.com/nexus/content/groups/internal - - - ${env.WHITESOURCE_TOKEN} - diff --git a/_ci/source_clear.sh b/_ci/source_clear.sh index 6ab40f79..7842730b 100644 --- a/_ci/source_clear.sh +++ b/_ci/source_clear.sh @@ -5,7 +5,7 @@ PS4="\[\e[35m\]+ \[\e[m\]" set +e -v -x pushd "$(dirname "${BASH_SOURCE[0]}")/../" -mvn -B -q clean install \ +mvn -B -U -q clean install \ -DskipTests \ -Dmaven.javadoc.skip=true \ com.srcclr:srcclr-maven-plugin:scan \ diff --git a/_ci/whitesource.sh b/_ci/whitesource.sh deleted file mode 100644 index afb465c3..00000000 --- a/_ci/whitesource.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -echo "=========================== Starting WhiteSource Script ===========================" -PS4="\[\e[35m\]+ \[\e[m\]" -set -vex -pushd "$(dirname "${BASH_SOURCE[0]}")/../" - - -mvn -B clean install \ - -DskipTests org.whitesource:whitesource-maven-plugin:update \ - -Dorg.whitesource.failOnError=true \ - -Dorg.whitesource.forceUpdate=true \ - -Dorg.whitesource.checkPolicies=true \ - -Dorg.whitesource.forceCheckAllDependencies=true \ - -Dorg.whitesource.ignorePomModules=false \ - "-Dorg.whitesource.product=Transform Service" \ - -Dmaven.wagon.http.pool=false - -popd -set +vex -echo "=========================== Finishing WhiteSource Script ==========================" - diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/Dockerfile b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/Dockerfile index 6c6cb03d..814491b0 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/Dockerfile +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/Dockerfile @@ -52,6 +52,7 @@ RUN ln /usr/bin/alfresco-transform-core-aio-boot-${env.project_version}.jar /usr make && \ make test && \ make install) && \ + yum -y autoremove perl-ExtUtils-MakeMaker make && rm -rf ${EXIFTOOL_FOLDER} ${EXIFTOOL_FOLDER}.tgz && \ yum clean all ADD target/generated-resources/licenses /licenses diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/pom.xml b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/pom.xml index 6f338a14..3ab5cd16 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/pom.xml +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/pom.xml @@ -1,15 +1,13 @@ - 4.0.0 alfresco-transform-core-aio-boot Alfresco Core All-In-One Transformer Spring Boot - jar org.alfresco alfresco-transform-core - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -104,89 +102,83 @@ org.springframework.boot spring-boot-maven-plugin - - - - repackage - - - org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - - docker-it-setup + + org.apache.maven.plugins + maven-failsafe-plugin + io.fabric8 docker-maven-plugin - - - - activemq - alfresco/alfresco-activemq:5.16.1 - - activemq - - 8161:8161 - 5672:5672 - 61616:61616 - - - Apache ActiveMQ 5.16.1 .* started - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - - aio - ${image.name}:${image.tag} - - - 8090:8090 - - - - http://localhost:8090/transform/config - GET - 200...299 - - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - + + + integration-tests + + start + stop + + + + + alfresco/alfresco-activemq:5.16.1 + + activemq + + 8161:8161 + 5672:5672 + 61616:61616 + + + Apache ActiveMQ .* started + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + ${image.name}:${image.tag} + + + 8090:8090 + + + + http://localhost:8090/transform/config + GET + 200...299 + + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + + + @@ -198,20 +190,7 @@ io.fabric8 - fabric8-maven-plugin - - - - ${image.name}:${image.tag} - - ${project.basedir}/ - - true - - - - - + docker-maven-plugin build-image @@ -219,6 +198,19 @@ build + + + + ${image.name}:${image.tag} + + ${project.basedir} + + true + + + + + @@ -232,7 +224,7 @@ io.fabric8 - fabric8-maven-plugin + docker-maven-plugin @@ -240,7 +232,7 @@ ${image.name}:${image.tag} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -250,7 +242,7 @@ ${image.name}:${image.tag} - ${project.basedir}/ + ${project.basedir} true @@ -260,16 +252,9 @@ - build-image - package - - build - - - - push-image install + build push @@ -285,15 +270,15 @@ io.fabric8 - fabric8-maven-plugin - + docker-maven-plugin + ${image.name}:${project.version} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -303,7 +288,7 @@ ${image.name}:${project.version} - ${project.basedir}/ + ${project.basedir} true @@ -313,8 +298,6 @@ - build-push-image - deploy build push @@ -326,4 +309,4 @@ - \ No newline at end of file + diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/license/THIRD-PARTY.properties b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/license/THIRD-PARTY.properties deleted file mode 100644 index 0a88bf91..00000000 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/license/THIRD-PARTY.properties +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by org.codehaus.mojo.license.AddThirdPartyMojo -#------------------------------------------------------------------------------- -# Already used licenses in project : -# - (MIT-style) netCDF C library license -# - 3-Clause BSD License -# - Apache 2.0 -# - Apache License 2.0 -# - Apache License v2 -# - Apache License v2.0 -# - Apache License, Version 2.0 -# - Apache License, version 2.0 -# - Apache Software License - Version 2.0 -# - BSD -# - BSD 3-clause License w/nuclear disclaimer -# - BSD 3-clause New License -# - BSD License -# - BSD-2-Clause -# - Bouncy Castle Licence -# - CDDL + GPLv2 with classpath exception -# - CDDL, v1.0 -# - CDDL/GPLv2+CE -# - Common Development and Distribution License (CDDL) v1.0 -# - Common Public License -# - EDL 1.0 -# - EPL 2.0 -# - Eclipse Distribution License - v 1.0 -# - Eclipse Public License - v 1.0 -# - Eclipse Public License 2.0 -# - GNU General Public License, version 2 with the GNU Classpath Exception -# - GNU Lesser General Public License -# - GPL2 w/ CPE -# - LGPL, v2.1 or later -# - LGPL, version 2.1 -# - MIT License -# - MIT License (MIT) -# - Mozilla Public License 1.1 (MPL 1.1) -# - OGC copyright -# - Public Domain -# - Public Domain, per Creative Commons CC0 -# - Similar to Apache License but with the acknowledgment clause removed -# - The Apache License, Version 2.0 -# - The Apache Software License, Version 2.0 -# - The BSD License -# - The MIT License -# - The SAX License -# - The W3C License -# - UnRar License -# - lgpl -#------------------------------------------------------------------------------- -# Please fill the missing licenses for dependencies : -# -# -#Thu Apr 09 10:34:00 BST 2020 -net.jcip--jcip-annotations--1.0=Public diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOController.java b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOController.java index 5d1beca4..c373fafe 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOController.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOController.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -35,6 +35,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestParam; import java.io.File; import java.util.HashMap; @@ -42,6 +43,9 @@ import java.util.Map; import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_HTML; import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_TEXT_PLAIN; +import static org.alfresco.transform.client.model.config.CoreVersionDecorator.setOrClearCoreVersion; +import static org.alfresco.transform.client.util.RequestParamMap.CONFIG_VERSION_DEFAULT; +import static org.alfresco.transformer.util.RequestParamMap.CONFIG_VERSION; import static org.alfresco.transformer.util.RequestParamMap.SOURCE_ENCODING; import static org.alfresco.transformer.util.RequestParamMap.TRANSFORM_NAME_PARAMETER; import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; @@ -88,10 +92,12 @@ public class AIOController extends AbstractTransformerController } @Override - public ResponseEntity info() + public ResponseEntity info( + @RequestParam(value = CONFIG_VERSION, defaultValue = CONFIG_VERSION_DEFAULT) int configVersion) { - logger.info("GET Transform Config."); + logger.info("GET Transform Config version: " + configVersion); TransformConfig transformConfig = transformRegistry.getTransformConfig(); + transformConfig = setOrClearCoreVersion(transformConfig, configVersion); return new ResponseEntity<>(transformConfig, OK); } @@ -105,7 +111,7 @@ public class AIOController extends AbstractTransformerController Transformer transformer = transformRegistry.getByTransformName(transformName); if (transformer == null) { - new TransformException(INTERNAL_SERVER_ERROR.value(), "No transformer mapping for - transform:" + throw new TransformException(INTERNAL_SERVER_ERROR.value(), "No transformer mapping for - transform:" + transformName + " sourceMimetype:" + sourceMimetype + " targetMimetype:" + targetMimetype); } diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOCustomConfig.java b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOCustomConfig.java index fb5ceb67..7f01dc9c 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOCustomConfig.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOCustomConfig.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -85,6 +85,9 @@ public class AIOCustomConfig @Value("${transform.core.tika.pdfBox.notExtractBookmarksTextDefault:false}") private boolean notExtractBookmarksTextDefault; + @Value("${transform.core.version}") + private String coreVersion; + /** * * @return Override the TransformRegistryImpl used in {@link AbstractTransformerController} @@ -94,13 +97,14 @@ public class AIOCustomConfig public TransformServiceRegistry aioTransformRegistry() throws Exception { AIOTransformRegistry aioTransformRegistry = new AIOTransformRegistry(); + aioTransformRegistry.setCoreVersion(coreVersion); // T-Engines are sorted by name so they are combined in the same order as in the T-Router // and Content Repository with individual T-Engines. See TransformersConfigRegistry#retrieveRemoteConfig and // LocalTransformServiceRegistry#getTEngineUrlsSortedByName. for (Transformer tEngine : getTEnginesSortedByName()) { - aioTransformRegistry.registerTransformer(tEngine); // now a poor name - should be combinedTransformers + aioTransformRegistry.registerTransformer(tEngine); // now a poor name - should be combineTransformers } aioTransformRegistry.registerCombinedTransformers(); return aioTransformRegistry; diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/resources/application-default.yaml b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/resources/application-default.yaml index 3a55ed6b..da6e68a3 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/resources/application-default.yaml @@ -2,6 +2,7 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.aio.acs} transform: core: + version: @project.version@ pdfrenderer: exe: ${PDFRENDERER_EXE:/usr/bin/alfresco-pdf-renderer} libreoffice: diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerImageMagickTest.java b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerImageMagickTest.java index 0be23b4b..04ba2954 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerImageMagickTest.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerImageMagickTest.java @@ -106,6 +106,14 @@ public class AIOControllerImageMagickTest extends ImageMagickControllerTest } + + @Test + @Override + public void testGetTransformConfigInfoExcludingCoreVersion() + { + // Ignore the test in super class as the way the AIO transformer provides config is fundamentally different. + } + @Test @Override public void testGetInfoFromConfigWithDuplicates() diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerLibreOfficeTest.java b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerLibreOfficeTest.java index b0613dc4..8bf1a2ef 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerLibreOfficeTest.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerLibreOfficeTest.java @@ -88,6 +88,13 @@ public class AIOControllerLibreOfficeTest extends LibreOfficeControllerTest } + @Test + @Override + public void testGetTransformConfigInfoExcludingCoreVersion() + { + // Ignore the test in super class as the way the AIO transformer provides config is fundamentally different. + } + @Test @Override public void testGetInfoFromConfigWithDuplicates() diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerMiscTest.java b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerMiscTest.java index 5b94df75..4e4be7c4 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerMiscTest.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerMiscTest.java @@ -45,15 +45,22 @@ public class AIOControllerMiscTest extends MiscControllerTest // just test that we are actually testing against the AIOController (instead of MiscController) assertTrue(controller instanceof AIOController, "Wrong controller wired for test"); } - + @Test @Override public void testGetTransformConfigInfo() { - // Ignore the test in super class as the way the AIO transformer provides config is fundamentality different. + // Ignore the test in super class as the way the AIO transformer provides config is fundamentally different. } + @Test + @Override + public void testGetTransformConfigInfoExcludingCoreVersion() + { + // Ignore the test in super class as the way the AIO transformer provides config is fundamentally different. + } + @Test @Override public void testGetInfoFromConfigWithDuplicates() diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerPdfRendererTest.java b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerPdfRendererTest.java index a944aaf4..063cb1db 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerPdfRendererTest.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerPdfRendererTest.java @@ -84,9 +84,15 @@ public class AIOControllerPdfRendererTest extends AlfrescoPdfRendererControllerT public void testGetTransformConfigInfo() { // Ignore the test in super class as the way the AIO transformer provides config is fundamentally different. - - } + + @Test + @Override + public void testGetTransformConfigInfoExcludingCoreVersion() + { + // Ignore the test in super class as the way the AIO transformer provides config is fundamentally different. + } + @Test @Override public void testGetInfoFromConfigWithDuplicates() diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerTest.java b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerTest.java index 2b62642f..1dc97d3b 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerTest.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerTest.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -29,15 +29,25 @@ package org.alfresco.transformer; import java.io.IOException; import org.alfresco.transform.client.model.TransformRequest; +import org.alfresco.transform.client.model.config.TransformConfig; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.context.annotation.Import; +import org.springframework.http.ResponseEntity; + +import static org.alfresco.transform.client.util.RequestParamMap.CONFIG_VERSION_DEFAULT; +import static org.alfresco.transform.client.util.RequestParamMap.CONFIG_VERSION_LATEST; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; @WebMvcTest(AIOController.class) @Import(AIOCustomConfig.class) public class AIOControllerTest //extends AbstractTransformerControllerTest { + @Value("${transform.core.version}") + private String coreVersion; @Autowired AIOController aioController; @@ -64,6 +74,20 @@ public class AIOControllerTest //extends AbstractTransformerControllerTest @Test public void emptyTest() { - aioController.info(); + ResponseEntity responseEntity = aioController.info(Integer.valueOf(CONFIG_VERSION_DEFAULT)); + responseEntity.getBody().getTransformers().forEach(transformer -> { + assertNull(transformer.getCoreVersion(), transformer.getTransformerName() + + " should have had a null coreValue but was " + transformer.getCoreVersion()); + }); + } + + @Test + public void emptyTestWithLatestVersion() + { + ResponseEntity responseEntity = aioController.info(CONFIG_VERSION_LATEST); + responseEntity.getBody().getTransformers().forEach(transformer -> { + assertNotNull(transformer.getCoreVersion(), transformer.getTransformerName() + + " should have had a coreValue but was null. Should have been " + coreVersion); + }); } } \ No newline at end of file diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerTikaTest.java b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerTikaTest.java index 9c720faa..12e62476 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerTikaTest.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/test/java/org/alfresco/transformer/AIOControllerTikaTest.java @@ -57,6 +57,14 @@ public class AIOControllerTikaTest extends TikaControllerTest } + + @Test + @Override + public void testGetTransformConfigInfoExcludingCoreVersion() + { + // Ignore the test in super class as the way the AIO transformer provides config is fundamentally different. + } + @Test @Override public void testGetInfoFromConfigWithDuplicates() diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio/pom.xml b/alfresco-transform-core-aio/alfresco-transform-core-aio/pom.xml index 70bd2f3b..c87aeae0 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio/pom.xml +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio/pom.xml @@ -3,12 +3,11 @@ 4.0.0 alfresco-transform-core-aio Alfresco Core All-In-One Transformer - jar alfresco-transform-core org.alfresco - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -56,21 +55,12 @@ - org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - - \ No newline at end of file + diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/license/THIRD-PARTY.properties b/alfresco-transform-core-aio/alfresco-transform-core-aio/src/license/THIRD-PARTY.properties deleted file mode 100644 index 15698916..00000000 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/license/THIRD-PARTY.properties +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by org.codehaus.mojo.license.AddThirdPartyMojo -#------------------------------------------------------------------------------- -# Already used licenses in project : -# - (MIT-style) netCDF C library license -# - 3-Clause BSD License -# - Apache 2.0 -# - Apache License 2.0 -# - Apache License v2 -# - Apache License v2.0 -# - Apache License, Version 2.0 -# - Apache License, version 2.0 -# - Apache Software License - Version 2.0 -# - BSD -# - BSD 3-clause License w/nuclear disclaimer -# - BSD 3-clause New License -# - BSD License -# - BSD-2-Clause -# - Bouncy Castle Licence -# - CDDL + GPLv2 with classpath exception -# - CDDL, v1.0 -# - CDDL/GPLv2+CE -# - Common Development and Distribution License (CDDL) v1.0 -# - Common Public License -# - EDL 1.0 -# - EPL 2.0 -# - Eclipse Distribution License - v 1.0 -# - Eclipse Public License - v 1.0 -# - Eclipse Public License 2.0 -# - GNU General Public License, version 2 with the GNU Classpath Exception -# - GNU Lesser General Public License -# - GPL2 w/ CPE -# - LGPL, v2.1 or later -# - LGPL, version 2.1 -# - MIT License -# - MIT License (MIT) -# - Mozilla Public License 1.1 (MPL 1.1) -# - OGC copyright -# - Public Domain -# - Public Domain, per Creative Commons CC0 -# - Similar to Apache License but with the acknowledgment clause removed -# - The Apache License, Version 2.0 -# - The Apache Software License, Version 2.0 -# - The BSD License -# - The MIT License -# - The SAX License -# - The W3C License -# - UnRar License -# - lgpl -#------------------------------------------------------------------------------- -# Please fill the missing licenses for dependencies : -# -# -#Thu Apr 09 10:33:33 BST 2020 -net.jcip--jcip-annotations--1.0=Public diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/AIOTransformRegistry.java b/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/AIOTransformRegistry.java index 3e86fc87..0dadfee5 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/AIOTransformRegistry.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/AIOTransformRegistry.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -34,6 +34,7 @@ import org.alfresco.transform.client.registry.TransformCache; import org.alfresco.transformer.executors.Transformer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import java.io.IOException; import java.io.InputStream; @@ -43,6 +44,7 @@ import java.util.HashMap; import java.util.Map; import static java.nio.charset.StandardCharsets.UTF_8; +import static org.alfresco.transform.client.model.config.CoreVersionDecorator.setCoreVersionOnSingleStepTransformers; /** * AIOTransformRegistry manages all of the sub transformers registered to it and provides aggregated TransformConfig. @@ -53,6 +55,8 @@ public class AIOTransformRegistry extends AbstractTransformRegistry private static final String ENGINE_CONFIG_LOCATION_POSTFIX = "_engine_config.json"; + private String coreVersion; + private CombinedTransformConfig combinedTransformConfig = new CombinedTransformConfig(); // Holds the structures used by AbstractTransformRegistry to look up what is supported. @@ -64,20 +68,26 @@ public class AIOTransformRegistry extends AbstractTransformRegistry // Represents the mapping between a transform and a transformer, multiple mappings can point to the same transformer. private Map transformerEngineMapping = new HashMap(); + public void setCoreVersion(String coreVersion) + { + this.coreVersion = coreVersion; + } + /** * Adds a transformer's (T-Engine) config to the configuration and creates a map of transforms to the T-Engine. * The name of this method is now misleading as the registry of transforms takes place in * {@link #registerCombinedTransformers()} . - * @param transformer The transformer implementation, this could be a single transformer + * @param tEngine The transformer implementation, this could be a single transformer * or a transformer managing multiple sub transformers. The transformer's configuration file will * be read based on the {@link Transformer#getTransformerId()} value. */ - public void registerTransformer(final Transformer transformer) throws Exception + public void registerTransformer(final Transformer tEngine) throws Exception { // Load config for the transformer - String location = getTransformConfigLocation(transformer); + String location = getTransformConfigLocation(tEngine); TransformConfig transformConfig = loadTransformConfig(location); - String transformerId = transformer.getTransformerId(); + setCoreVersionOnSingleStepTransformers(transformConfig, coreVersion); + String transformerId = tEngine.getTransformerId(); combinedTransformConfig.addTransformConfig(transformConfig, location, transformerId, this); // Map all of the transforms defined in the config to this Transformer implementation @@ -90,7 +100,7 @@ public class AIOTransformRegistry extends AbstractTransformRegistry { log.debug("Overriding transform with name: '{}' originally defined in '{}'.", transformerName, originalTEngine.getTransformerId()); } - transformerEngineMapping.put(transformerName, transformer); + transformerEngineMapping.put(transformerName, tEngine); log.debug("Registered transform with name: '{}' defined in '{}'.", transformerName, transformerId); } } diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/pom.xml b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/pom.xml index 60e7bdbb..0ac7c067 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/pom.xml +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/pom.xml @@ -9,7 +9,7 @@ org.alfresco alfresco-transform-core - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/pom.xml b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/pom.xml index 9f97783a..db20164e 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/pom.xml +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml diff --git a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/pom.xml b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/pom.xml index e120c545..94efe009 100644 --- a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/pom.xml +++ b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/pom.xml @@ -1,13 +1,13 @@ + 4.0.0 alfresco-transform-imagemagick-boot Alfresco ImageMagick Transformer Spring Boot - jar org.alfresco alfresco-transform-core - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -66,30 +66,14 @@ org.springframework.boot spring-boot-maven-plugin - - - - repackage - - - org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - org.apache.maven.plugins maven-jar-plugin - 3.2.0 @@ -101,66 +85,75 @@ - docker-it-setup + + org.apache.maven.plugins + maven-failsafe-plugin + io.fabric8 docker-maven-plugin - - - - activemq - alfresco/alfresco-activemq:5.16.1 - - activemq - - 8161:8161 - 5672:5672 - 61616:61616 - - - Apache ActiveMQ 5.16.1 .* started - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - - imagemagick - ${image.name}:${image.tag} - - - 8090:8090 - - - - http://localhost:8090/transform/config - GET - 200...299 - - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - + + + integration-tests + + start + stop + + + + + alfresco/alfresco-activemq:5.16.1 + + activemq + + 8161:8161 + 5672:5672 + 61616:61616 + + + Apache ActiveMQ 5.16.1 .* started + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + ${image.name}:${image.tag} + + + 8090:8090 + + + + http://localhost:8090/transform/config + GET + 200...299 + + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + + + @@ -172,20 +165,7 @@ io.fabric8 - fabric8-maven-plugin - - - - ${image.name}:${image.tag} - - ${project.basedir}/ - - true - - - - - + docker-maven-plugin build-image @@ -193,6 +173,19 @@ build + + + + ${image.name}:${image.tag} + + ${project.basedir} + + true + + + + + @@ -206,7 +199,7 @@ io.fabric8 - fabric8-maven-plugin + docker-maven-plugin @@ -214,7 +207,7 @@ ${image.name}:${image.tag} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -224,7 +217,7 @@ ${image.name}:${image.tag} - ${project.basedir}/ + ${project.basedir} true @@ -234,16 +227,9 @@ - build-image - package - - build - - - - push-image install + build push @@ -259,15 +245,15 @@ io.fabric8 - fabric8-maven-plugin - + docker-maven-plugin + ${image.name}:${project.version} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -277,7 +263,7 @@ ${image.name}:${project.version} - ${project.basedir}/ + ${project.basedir} true @@ -287,8 +273,6 @@ - build-push-image - deploy build push @@ -300,4 +284,4 @@ - \ No newline at end of file + diff --git a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/resources/application-default.yaml b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/resources/application-default.yaml index 6b813c68..30851c71 100644 --- a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/resources/application-default.yaml @@ -2,6 +2,7 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.imagemagick.acs} transform: core: + version: @project.version@ config: location: classpath:imagemagick_engine_config.json imagemagick: diff --git a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/test/java/org/alfresco/transformer/ImageMagickControllerTest.java b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/test/java/org/alfresco/transformer/ImageMagickControllerTest.java index 7f1709dd..12d10691 100644 --- a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/test/java/org/alfresco/transformer/ImageMagickControllerTest.java +++ b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/test/java/org/alfresco/transformer/ImageMagickControllerTest.java @@ -26,6 +26,7 @@ */ package org.alfresco.transformer; +import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM; import static org.alfresco.transformer.util.MimetypeMap.PREFIX_IMAGE; import static org.hamcrest.Matchers.containsString; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -227,7 +228,7 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest expectedOptions = "-auto-orient " + "-gravity " + value + " +repage"; mockMvc .perform(MockMvcRequestBuilders - .multipart("/transform") + .multipart(ENDPOINT_TRANSFORM) .file(sourceFile) .param("targetExtension", targetExtension) .param("targetMimetype", targetMimetype) @@ -244,7 +245,7 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest { mockMvc .perform(MockMvcRequestBuilders - .multipart("/transform") + .multipart(ENDPOINT_TRANSFORM) .file(sourceFile) .param("targetExtension", targetExtension) .param("targetMimetype", targetMimetype) @@ -260,7 +261,7 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest expectedSourceSuffix = "[2-3]"; mockMvc .perform(MockMvcRequestBuilders - .multipart("/transform") + .multipart(ENDPOINT_TRANSFORM) .file(sourceFile) .param("targetExtension", targetExtension) .param("targetMimetype", targetMimetype) @@ -298,7 +299,7 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest expectedSourceSuffix = "[2-3]"; mockMvc .perform(MockMvcRequestBuilders - .multipart("/transform") + .multipart(ENDPOINT_TRANSFORM) .file(sourceFile) .param("targetExtension", targetExtension) .param("targetMimetype", targetMimetype) @@ -336,7 +337,7 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest expectedOptions = "( horrible command / ); -auto-orient -resize 321x654"; mockMvc .perform(MockMvcRequestBuilders - .multipart("/transform") + .multipart(ENDPOINT_TRANSFORM) .file(sourceFile) .param("targetExtension", targetExtension) .param("targetMimetype", targetMimetype) @@ -365,7 +366,7 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest { when(mockExecutionResult.getExitValue()).thenReturn(1); - mockMvc.perform(mockMvcRequest("/transform", sourceFile, "targetExtension", "xxx")) + mockMvc.perform(mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", "xxx")) .andExpect(status().is(BAD_REQUEST.value())) .andExpect( status().reason(containsString("Transformer exit code was not 0: \nSTDERR"))); @@ -399,7 +400,7 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest String tr = objectMapper.writeValueAsString(transformRequest); String transformationReplyAsString = mockMvc .perform(MockMvcRequestBuilders - .post("/transform") + .post(ENDPOINT_TRANSFORM) .header(ACCEPT, APPLICATION_JSON_VALUE) .header(CONTENT_TYPE, APPLICATION_JSON_VALUE) .content(tr)) diff --git a/alfresco-transform-imagemagick/alfresco-transform-imagemagick/pom.xml b/alfresco-transform-imagemagick/alfresco-transform-imagemagick/pom.xml index c86798f7..d1ea0893 100644 --- a/alfresco-transform-imagemagick/alfresco-transform-imagemagick/pom.xml +++ b/alfresco-transform-imagemagick/alfresco-transform-imagemagick/pom.xml @@ -3,12 +3,11 @@ 4.0.0 alfresco-transform-imagemagick Alfresco ImageMagick Transformer - jar alfresco-transform-core org.alfresco - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -18,7 +17,6 @@ alfresco-transformer-base ${project.version} - @@ -27,14 +25,6 @@ org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - - \ No newline at end of file + diff --git a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/pom.xml b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/pom.xml index 6de6c55d..1d5e1c6f 100644 --- a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/pom.xml +++ b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/pom.xml @@ -1,13 +1,13 @@ + 4.0.0 alfresco-transform-libreoffice-boot Alfresco LibreOffice Transformer Spring Boot - jar org.alfresco alfresco-transform-core - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -74,30 +74,14 @@ org.springframework.boot spring-boot-maven-plugin - - - - repackage - - - org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - org.apache.maven.plugins maven-jar-plugin - 3.2.0 @@ -109,66 +93,75 @@ - docker-it-setup + + org.apache.maven.plugins + maven-failsafe-plugin + io.fabric8 docker-maven-plugin - - - - activemq - alfresco/alfresco-activemq:5.16.1 - - activemq - - 8161:8161 - 5672:5672 - 61616:61616 - - - Apache ActiveMQ 5.16.1 .* started - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - - libreoffice - ${image.name}:${image.tag} - - - 8090:8090 - - - - http://localhost:8090/transform/config - GET - 200...299 - - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - + + + integration-tests + + start + stop + + + + + alfresco/alfresco-activemq:5.16.1 + + activemq + + 8161:8161 + 5672:5672 + 61616:61616 + + + Apache ActiveMQ 5.16.1 .* started + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + ${image.name}:${image.tag} + + + 8090:8090 + + + + http://localhost:8090/transform/config + GET + 200...299 + + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + + + @@ -180,20 +173,7 @@ io.fabric8 - fabric8-maven-plugin - - - - ${image.name}:${image.tag} - - ${project.basedir}/ - - true - - - - - + docker-maven-plugin build-image @@ -201,6 +181,19 @@ build + + + + ${image.name}:${image.tag} + + ${project.basedir} + + true + + + + + @@ -214,7 +207,7 @@ io.fabric8 - fabric8-maven-plugin + docker-maven-plugin @@ -222,7 +215,7 @@ ${image.name}:${image.tag} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -232,7 +225,7 @@ ${image.name}:${image.tag} - ${project.basedir}/ + ${project.basedir} true @@ -242,16 +235,9 @@ - build-image - package - - build - - - - push-image install + build push @@ -267,15 +253,15 @@ io.fabric8 - fabric8-maven-plugin - + docker-maven-plugin + ${image.name}:${project.version} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -285,7 +271,7 @@ ${image.name}:${project.version} - ${project.basedir}/ + ${project.basedir} true @@ -293,19 +279,9 @@ - - - build-push-image - deploy - - build - push - - - - \ No newline at end of file + diff --git a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/resources/application-default.yaml b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/resources/application-default.yaml index 2c286ef4..53d01728 100644 --- a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/resources/application-default.yaml @@ -2,6 +2,7 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.libreoffice.acs} transform: core: + version: @project.version@ config: location: classpath:libreoffice_engine_config.json libreoffice: diff --git a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/test/java/org/alfresco/transformer/LibreOfficeControllerTest.java b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/test/java/org/alfresco/transformer/LibreOfficeControllerTest.java index c9a71509..298f335a 100644 --- a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/test/java/org/alfresco/transformer/LibreOfficeControllerTest.java +++ b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/test/java/org/alfresco/transformer/LibreOfficeControllerTest.java @@ -27,6 +27,7 @@ package org.alfresco.transformer; import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_PDF; +import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM; import static org.alfresco.transformer.util.RequestParamMap.SOURCE_MIMETYPE; import static org.alfresco.transformer.util.RequestParamMap.TARGET_EXTENSION; import static org.alfresco.transformer.util.RequestParamMap.TARGET_MIMETYPE; @@ -200,7 +201,7 @@ public class LibreOfficeControllerTest extends AbstractTransformerControllerTest mockMvc .perform(MockMvcRequestBuilders - .multipart("/transform") + .multipart(ENDPOINT_TRANSFORM) .file(sourceFile) .param(TARGET_EXTENSION, "xxx") .param(SOURCE_MIMETYPE,sourceMimetype) @@ -247,7 +248,7 @@ public class LibreOfficeControllerTest extends AbstractTransformerControllerTest String tr = objectMapper.writeValueAsString(transformRequest); String transformationReplyAsString = mockMvc .perform(MockMvcRequestBuilders - .post("/transform") + .post(ENDPOINT_TRANSFORM) .header(ACCEPT, APPLICATION_JSON_VALUE) .header(CONTENT_TYPE, APPLICATION_JSON_VALUE) .content(tr)) diff --git a/alfresco-transform-libreoffice/alfresco-transform-libreoffice/pom.xml b/alfresco-transform-libreoffice/alfresco-transform-libreoffice/pom.xml index 31ff7c05..f4ea7103 100644 --- a/alfresco-transform-libreoffice/alfresco-transform-libreoffice/pom.xml +++ b/alfresco-transform-libreoffice/alfresco-transform-libreoffice/pom.xml @@ -3,12 +3,11 @@ 4.0.0 alfresco-transform-libreoffice Alfresco LibreOffice Transformer - jar alfresco-transform-core org.alfresco - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -18,12 +17,10 @@ alfresco-transformer-base ${project.version} - org.dom4j dom4j - org.alfresco alfresco-jodconverter-core @@ -44,15 +41,6 @@ org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - - - \ No newline at end of file + diff --git a/alfresco-transform-misc/alfresco-transform-misc-boot/pom.xml b/alfresco-transform-misc/alfresco-transform-misc-boot/pom.xml index 08624503..bc60d51e 100644 --- a/alfresco-transform-misc/alfresco-transform-misc-boot/pom.xml +++ b/alfresco-transform-misc/alfresco-transform-misc-boot/pom.xml @@ -1,15 +1,13 @@ - 4.0.0 alfresco-transform-misc-boot Alfresco Miscellaneous Transformer Spring Boot - jar org.alfresco alfresco-transform-core - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -64,30 +62,14 @@ org.springframework.boot spring-boot-maven-plugin - - - - repackage - - - org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - org.apache.maven.plugins maven-jar-plugin - 3.2.0 @@ -99,66 +81,75 @@ - docker-it-setup + + org.apache.maven.plugins + maven-failsafe-plugin + io.fabric8 docker-maven-plugin - - - - activemq - alfresco/alfresco-activemq:5.16.1 - - activemq - - 8161:8161 - 5672:5672 - 61616:61616 - - - Apache ActiveMQ 5.16.1 .* started - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - - misc - ${image.name}:${image.tag} - - - 8090:8090 - - - - http://localhost:8090/transform/config - GET - 200...299 - - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - + + + integration-tests + + start + stop + + + + + alfresco/alfresco-activemq:5.16.1 + + activemq + + 8161:8161 + 5672:5672 + 61616:61616 + + + Apache ActiveMQ 5.16.1 .* started + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + ${image.name}:${image.tag} + + + 8090:8090 + + + + http://localhost:8090/transform/config + GET + 200...299 + + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + + + @@ -170,20 +161,7 @@ io.fabric8 - fabric8-maven-plugin - - - - ${image.name}:${image.tag} - - ${project.basedir}/ - - true - - - - - + docker-maven-plugin build-image @@ -191,6 +169,19 @@ build + + + + ${image.name}:${image.tag} + + ${project.basedir} + + true + + + + + @@ -204,7 +195,7 @@ io.fabric8 - fabric8-maven-plugin + docker-maven-plugin @@ -212,7 +203,7 @@ ${image.name}:${image.tag} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -222,7 +213,7 @@ ${image.name}:${image.tag} - ${project.basedir}/ + ${project.basedir} true @@ -232,16 +223,9 @@ - build-image - package - - build - - - - push-image install + build push @@ -257,15 +241,15 @@ io.fabric8 - fabric8-maven-plugin - + docker-maven-plugin + ${image.name}:${project.version} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -275,7 +259,7 @@ ${image.name}:${project.version} - ${project.basedir}/ + ${project.basedir} true @@ -283,19 +267,9 @@ - - - build-push-image - deploy - - build - push - - - - \ No newline at end of file + diff --git a/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/java/org/alfresco/transformer/MiscController.java b/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/java/org/alfresco/transformer/MiscController.java index 6a5498fe..d987a430 100644 --- a/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/java/org/alfresco/transformer/MiscController.java +++ b/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/java/org/alfresco/transformer/MiscController.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -38,7 +38,7 @@ import java.util.Map; import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_HTML; import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_TEXT_PLAIN; -import static org.alfresco.transformer.transformers.HtmlParserContentTransformer.SOURCE_ENCODING; +import static org.alfresco.transformer.util.RequestParamMap.SOURCE_ENCODING; import static org.alfresco.transformer.util.RequestParamMap.TRANSFORM_NAME_PARAMETER; @Controller diff --git a/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/resources/application-default.yaml b/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/resources/application-default.yaml index 30fea7ee..2624c89b 100644 --- a/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/resources/application-default.yaml @@ -2,5 +2,6 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.misc.acs} transform: core: + version: @project.version@ config: location: classpath:misc_engine_config.json \ No newline at end of file diff --git a/alfresco-transform-misc/alfresco-transform-misc-boot/src/test/java/org/alfresco/transformer/MiscControllerTest.java b/alfresco-transform-misc/alfresco-transform-misc-boot/src/test/java/org/alfresco/transformer/MiscControllerTest.java index d4b4ff86..e4dec7e0 100644 --- a/alfresco-transform-misc/alfresco-transform-misc-boot/src/test/java/org/alfresco/transformer/MiscControllerTest.java +++ b/alfresco-transform-misc/alfresco-transform-misc-boot/src/test/java/org/alfresco/transformer/MiscControllerTest.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -35,6 +35,7 @@ import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_OPENXML_WORD import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_PDF; import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_RFC822; import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_TEXT_PLAIN; +import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -490,7 +491,7 @@ public class MiscControllerTest extends AbstractTransformerControllerTest "test_file." + sourceExtension, sourceMimetype, content); final MockHttpServletRequestBuilder requestBuilder = super - .mockMvcRequest("/transform", sourceFile) + .mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile) .param("targetExtension", targetExtension) .param("targetMimetype", targetMimetype) .param("sourceMimetype", sourceMimetype); @@ -531,4 +532,12 @@ public class MiscControllerTest extends AbstractTransformerControllerTest text = text.replaceAll("\\n", ""); return text; } + + @Test + @Override + public void queueTransformRequestUsingDirectAccessUrlTest() throws Exception + { + super.targetMimetype = this.targetMimetype; + super.queueTransformRequestUsingDirectAccessUrlTest(); + } } \ No newline at end of file diff --git a/alfresco-transform-misc/alfresco-transform-misc/pom.xml b/alfresco-transform-misc/alfresco-transform-misc/pom.xml index 71fad537..b14ad669 100644 --- a/alfresco-transform-misc/alfresco-transform-misc/pom.xml +++ b/alfresco-transform-misc/alfresco-transform-misc/pom.xml @@ -1,15 +1,13 @@ - 4.0.0 alfresco-transform-misc Alfresco Miscellaneous Transformer - jar alfresco-transform-core org.alfresco - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -42,7 +40,7 @@ org.apache.pdfbox pdfbox-tools - 2.0.24 + 2.0.25 @@ -83,14 +81,6 @@ org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - - \ No newline at end of file + diff --git a/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/HtmlParserContentTransformer.java b/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/HtmlParserContentTransformer.java index 4c64016d..eb84e5f8 100644 --- a/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/HtmlParserContentTransformer.java +++ b/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/HtmlParserContentTransformer.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -42,6 +42,8 @@ import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; import java.util.Map; +import static org.alfresco.transform.client.util.RequestParamMap.SOURCE_ENCODING; + /** * Content transformer which wraps the HTML Parser library for * parsing HTML content. diff --git a/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/SelectableTransformer.java b/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/SelectableTransformer.java index dd9c712f..af89da91 100644 --- a/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/SelectableTransformer.java +++ b/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/SelectableTransformer.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -36,9 +36,6 @@ import java.util.Map; */ public interface SelectableTransformer { - String SOURCE_ENCODING = "sourceEncoding"; - String TARGET_ENCODING = "targetEncoding"; - default void transform(String sourceMimetype, String targetMimetype, Map parameters, File sourceFile, File targetFile) throws Exception { diff --git a/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/StringExtractingContentTransformer.java b/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/StringExtractingContentTransformer.java index 0c006de9..0a1760a6 100644 --- a/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/StringExtractingContentTransformer.java +++ b/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/StringExtractingContentTransformer.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -42,6 +42,9 @@ import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; import java.util.Map; +import static org.alfresco.transform.client.util.RequestParamMap.SOURCE_ENCODING; +import static org.alfresco.transform.client.util.RequestParamMap.TARGET_ENCODING; + /** * Converts any textual format to plain text. *

diff --git a/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/TextToPdfContentTransformer.java b/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/TextToPdfContentTransformer.java index 1cf823bd..253d1c88 100644 --- a/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/TextToPdfContentTransformer.java +++ b/alfresco-transform-misc/alfresco-transform-misc/src/main/java/org/alfresco/transformer/transformers/TextToPdfContentTransformer.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -50,6 +50,8 @@ import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; +import static org.alfresco.transform.client.util.RequestParamMap.SOURCE_ENCODING; + /** *

* This code is based on a class of the same name originally implemented in alfresco-repository. diff --git a/alfresco-transform-misc/alfresco-transform-misc/src/test/java/org/alfresco/transformer/transformers/HtmlParserContentTransformerTest.java b/alfresco-transform-misc/alfresco-transform-misc/src/test/java/org/alfresco/transformer/transformers/HtmlParserContentTransformerTest.java index c41b7220..775a4408 100644 --- a/alfresco-transform-misc/alfresco-transform-misc/src/test/java/org/alfresco/transformer/transformers/HtmlParserContentTransformerTest.java +++ b/alfresco-transform-misc/alfresco-transform-misc/src/test/java/org/alfresco/transformer/transformers/HtmlParserContentTransformerTest.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -35,7 +35,7 @@ import java.nio.file.Files; import java.util.HashMap; import java.util.Map; -import static org.alfresco.transformer.transformers.StringExtractingContentTransformer.SOURCE_ENCODING; +import static org.alfresco.transform.client.util.RequestParamMap.SOURCE_ENCODING; import static org.junit.jupiter.api.Assertions.assertEquals; public class HtmlParserContentTransformerTest diff --git a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/pom.xml b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/pom.xml index 2c90c250..7d1a1e0b 100644 --- a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/pom.xml +++ b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/pom.xml @@ -1,15 +1,13 @@ + - - 4.0.0 alfresco-transform-pdf-renderer-boot Alfresco Pdf Renderer Spring Boot - jar org.alfresco alfresco-transform-core - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -64,30 +62,14 @@ org.springframework.boot spring-boot-maven-plugin - - - - repackage - - - org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - org.apache.maven.plugins maven-jar-plugin - 3.2.0 @@ -99,66 +81,75 @@ - docker-it-setup + + org.apache.maven.plugins + maven-failsafe-plugin + io.fabric8 docker-maven-plugin - - - - activemq - alfresco/alfresco-activemq:5.16.1 - - activemq - - 8161:8161 - 5672:5672 - 61616:61616 - - - Apache ActiveMQ 5.16.1 .* started - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - - alfresco-pdf-renderer - ${image.name}:${image.tag} - - - 8090:8090 - - - - http://localhost:8090/transform/config - GET - 200...299 - - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - + + + integration-tests + + start + stop + + + + + alfresco/alfresco-activemq:5.16.1 + + activemq + + 8161:8161 + 5672:5672 + 61616:61616 + + + Apache ActiveMQ 5.16.1 .* started + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + ${image.name}:${image.tag} + + + 8090:8090 + + + + http://localhost:8090/transform/config + GET + 200...299 + + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + + + @@ -170,20 +161,7 @@ io.fabric8 - fabric8-maven-plugin - - - - ${image.name}:${image.tag} - - ${project.basedir}/ - - true - - - - - + docker-maven-plugin build-image @@ -191,6 +169,19 @@ build + + + + ${image.name}:${image.tag} + + ${project.basedir} + + true + + + + + @@ -204,7 +195,7 @@ io.fabric8 - fabric8-maven-plugin + docker-maven-plugin @@ -212,7 +203,7 @@ ${image.name}:${image.tag} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -222,7 +213,7 @@ ${image.name}:${image.tag} - ${project.basedir}/ + ${project.basedir} true @@ -232,16 +223,9 @@ - build-image - package - - build - - - - push-image install + build push @@ -257,15 +241,15 @@ io.fabric8 - fabric8-maven-plugin - + docker-maven-plugin + ${image.name}:${project.version} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -275,7 +259,7 @@ ${image.name}:${project.version} - ${project.basedir}/ + ${project.basedir} true @@ -285,8 +269,6 @@ - build-push-image - deploy build push diff --git a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/resources/application-default.yaml b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/resources/application-default.yaml index 75860056..1602d74e 100644 --- a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/resources/application-default.yaml @@ -2,6 +2,7 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.alfresco-pdf-renderer.acs} transform: core: + version: @project.version@ config: location: classpath:pdfrenderer_engine_config.json pdfrenderer: diff --git a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/test/java/org/alfresco/transformer/AlfrescoPdfRendererControllerTest.java b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/test/java/org/alfresco/transformer/AlfrescoPdfRendererControllerTest.java index 0f729862..22a38754 100644 --- a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/test/java/org/alfresco/transformer/AlfrescoPdfRendererControllerTest.java +++ b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/test/java/org/alfresco/transformer/AlfrescoPdfRendererControllerTest.java @@ -26,6 +26,7 @@ */ package org.alfresco.transformer; +import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM; import static org.hamcrest.Matchers.containsString; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -221,7 +222,7 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro expectedOptions = "--width=321 --height=654 --allow-enlargement --maintain-aspect-ratio --page=2"; mockMvc .perform(MockMvcRequestBuilders - .multipart("/transform") + .multipart(ENDPOINT_TRANSFORM) .file(sourceFile) .param("targetExtension", targetExtension) .param("targetMimetype", targetMimetype) @@ -245,7 +246,7 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro expectedOptions = "--width=321 --height=654 --page=2"; mockMvc .perform(MockMvcRequestBuilders - .multipart("/transform") + .multipart(ENDPOINT_TRANSFORM) .file(sourceFile) .param("targetExtension", targetExtension) .param("targetMimetype", targetMimetype) @@ -277,7 +278,7 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro { when(mockExecutionResult.getExitValue()).thenReturn(1); - mockMvc.perform(mockMvcRequest("/transform", sourceFile, "targetExtension", "xxx")) + mockMvc.perform(mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", "xxx")) .andExpect(status().is(BAD_REQUEST.value())) .andExpect(status() .reason(containsString("Transformer exit code was not 0: \nSTDERR"))); @@ -311,7 +312,7 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro String tr = objectMapper.writeValueAsString(transformRequest); String transformationReplyAsString = mockMvc .perform(MockMvcRequestBuilders - .post("/transform") + .post(ENDPOINT_TRANSFORM) .header(ACCEPT, APPLICATION_JSON_VALUE) .header(CONTENT_TYPE, APPLICATION_JSON_VALUE) .content(tr)) diff --git a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer/pom.xml b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer/pom.xml index 1e220f8b..62ac5aff 100644 --- a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer/pom.xml +++ b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer/pom.xml @@ -1,13 +1,13 @@ + 4.0.0 alfresco-transform-pdf-renderer Alfresco Pdf Renderer Transformer - jar org.alfresco alfresco-transform-core - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -25,14 +25,6 @@ org.codehaus.mojo license-maven-plugin - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - - + diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/Dockerfile b/alfresco-transform-tika/alfresco-transform-tika-boot/Dockerfile index cf51974c..40aa1cf7 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/Dockerfile +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/Dockerfile @@ -27,6 +27,7 @@ RUN ln /usr/bin/${env.project_artifactId}-${env.project_version}.jar /usr/bin/${ make && \ make test && \ make install) && \ + yum -y autoremove perl-ExtUtils-MakeMaker make && rm -rf ${EXIFTOOL_FOLDER} ${EXIFTOOL_FOLDER}.tgz && \ yum clean all ADD target/generated-resources/licenses /licenses diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/pom.xml b/alfresco-transform-tika/alfresco-transform-tika-boot/pom.xml index e60698f0..98962274 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/pom.xml +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/pom.xml @@ -1,13 +1,13 @@ + 4.0.0 alfresco-transform-tika-boot Alfresco Tika Transformer Spring Boot - jar org.alfresco alfresco-transform-core - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -65,13 +65,9 @@ org.apache.tika - tika-parsers + tika-parsers-standard-package ${dependency.tika.version} - - com.tdunning - json - org.bouncycastle bcprov-jdk15on @@ -80,10 +76,9 @@ org.bouncycastle bcmail-jdk15on - - org.quartz-scheduler - quartz + xml-apis + xml-apis @@ -151,21 +146,6 @@ org.springframework.boot spring-boot-maven-plugin - - - - repackage - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin org.codehaus.mojo @@ -174,7 +154,6 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 @@ -186,66 +165,75 @@ - docker-it-setup + + org.apache.maven.plugins + maven-failsafe-plugin + io.fabric8 docker-maven-plugin - - - - activemq - alfresco/alfresco-activemq:5.16.1 - - activemq - - 8161:8161 - 5672:5672 - 61616:61616 - - - Apache ActiveMQ 5.16.1 .* started - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - - tika - ${image.name}:${image.tag} - - - 8090:8090 - - - - http://localhost:8090/transform/config - GET - 200...299 - - - 500 - 100 - - kill 1 - kill -9 1 - - - - - - + + + integration-tests + + start + stop + + + + + alfresco/alfresco-activemq:5.16.1 + + activemq + + 8161:8161 + 5672:5672 + 61616:61616 + + + Apache ActiveMQ 5.16.1 .* started + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + ${image.name}:${image.tag} + + + 8090:8090 + + + + http://localhost:8090/transform/config + GET + 200...299 + + + 500 + 100 + + kill 1 + kill -9 1 + + + + + + + + @@ -257,20 +245,7 @@ io.fabric8 - fabric8-maven-plugin - - - - ${image.name}:${image.tag} - - ${project.basedir}/ - - true - - - - - + docker-maven-plugin build-image @@ -278,6 +253,19 @@ build + + + + ${image.name}:${image.tag} + + ${project.basedir} + + true + + + + + @@ -291,7 +279,7 @@ io.fabric8 - fabric8-maven-plugin + docker-maven-plugin @@ -299,7 +287,7 @@ ${image.name}:${image.tag} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -309,7 +297,7 @@ ${image.name}:${image.tag} - ${project.basedir}/ + ${project.basedir} true @@ -319,16 +307,9 @@ - build-image - package - - build - - - - push-image install + build push @@ -344,15 +325,15 @@ io.fabric8 - fabric8-maven-plugin - + docker-maven-plugin + ${image.name}:${project.version} ${image.registry} - ${project.basedir}/ + ${project.basedir} true @@ -362,7 +343,7 @@ ${image.name}:${project.version} - ${project.basedir}/ + ${project.basedir} true @@ -372,8 +353,6 @@ - build-push-image - deploy build push @@ -385,4 +364,4 @@ - \ No newline at end of file + diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/license/THIRD-PARTY.properties b/alfresco-transform-tika/alfresco-transform-tika-boot/src/license/THIRD-PARTY.properties deleted file mode 100644 index ccb5f496..00000000 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/license/THIRD-PARTY.properties +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by org.codehaus.mojo.license.AddThirdPartyMojo -#------------------------------------------------------------------------------- -# Already used licenses in project : -# - (MIT-style) netCDF C library license -# - Apache 2.0 -# - Apache License 2.0 -# - Apache License v2.0 -# - Apache License, Version 2.0 -# - Apache License, version 2.0 -# - Apache Software License - Version 2.0 -# - BSD -# - BSD 3-clause New License -# - BSD License -# - Bouncy Castle Licence -# - CDDL + GPLv2 with classpath exception -# - CDDL, v1.0 -# - EPL 2.0 -# - Eclipse Public License - v 1.0 -# - Eclipse Public License, Version 1.0 -# - GNU Lesser General Public License -# - GNU Lesser General Public License, Version 2.1 -# - GPL2 w/ CPE -# - LGPL, v2.1 or later -# - LGPL, version 2.1 -# - MIT License -# - MIT License (MIT) -# - MIT license -# - Mozilla Public License 1.1 (MPL 1.1) -# - New BSD license -# - OGC copyright -# - Public -# - Public Domain -# - Public Domain, per Creative Commons CC0 -# - Similar to Apache License but with the acknowledgment clause removed -# - Specification License -# - The Apache License, Version 2.0 -# - The Apache Software License, Version 2.0 -# - The BSD License -# - The MIT License -# - UnRar License -#------------------------------------------------------------------------------- -# Please fill the missing licenses for dependencies : -# -# -#Mon Aug 19 18:06:38 EEST 2019 -net.jcip--jcip-annotations--1.0=Public diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/application-default.yaml b/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/application-default.yaml index 559c09c3..729549ac 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/application-default.yaml @@ -2,6 +2,7 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.tika.acs} transform: core: + version: @project.version@ config: location: classpath:tika_engine_config.json tika: diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/templates/transformForm.html b/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/templates/transformForm.html index d6d9ba76..6d47ff5f 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/templates/transformForm.html +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/templates/transformForm.html @@ -6,6 +6,7 @@

+ diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaControllerTest.java b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaControllerTest.java index 2727d292..5ee48b2f 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaControllerTest.java +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaControllerTest.java @@ -27,6 +27,7 @@ package org.alfresco.transformer; import static java.nio.file.Files.readAllBytes; +import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM; import static org.alfresco.transformer.executors.Tika.ARCHIVE; import static org.alfresco.transformer.executors.Tika.CSV; import static org.alfresco.transformer.executors.Tika.DOC; @@ -152,6 +153,8 @@ public class TikaControllerTest extends AbstractTransformerControllerTest { sourceExtension = "pdf"; targetExtension = "txt"; + sourceMimetype = MIMETYPE_PDF; + targetMimetype = MIMETYPE_TEXT_PLAIN; } @Override @@ -249,9 +252,9 @@ public class TikaControllerTest extends AbstractTransformerControllerTest System.out.println("Test " + transform + " " + sourceExtension + " to " + targetExtension); MockHttpServletRequestBuilder requestBuilder = includeContents == null - ? mockMvcRequest("/transform", sourceFile, + ? mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", this.targetExtension) - : mockMvcRequest("/transform", sourceFile, + : mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", this.targetExtension, INCLUDE_CONTENTS, includeContents.toString()); MvcResult result = mockMvc.perform(requestBuilder) .andExpect(status().is(OK.value())) @@ -368,7 +371,7 @@ public class TikaControllerTest extends AbstractTransformerControllerTest mockTransformCommand(PDF, TXT, MIMETYPE_PDF, true); targetEncoding = "rubbish"; mockMvc.perform( - mockMvcRequest("/transform", sourceFile, "targetExtension", targetExtension)) + mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", targetExtension)) .andExpect(status().is(INTERNAL_SERVER_ERROR.value())); } @@ -553,7 +556,7 @@ public class TikaControllerTest extends AbstractTransformerControllerTest "\"{http://www.alfresco.org/model/content/1.0}created\":\"created1\"}"; MockHttpServletRequestBuilder requestBuilder = - super.mockMvcRequest("/transform", sourceFile, + super.mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", XSLX, "metadata", metadata, "targetMimetype", MIMETYPE_METADATA_EMBED, @@ -583,7 +586,7 @@ public class TikaControllerTest extends AbstractTransformerControllerTest { mockTransformCommand(PDF, TXT, MIMETYPE_PDF, true); mockMvc.perform( - mockMvcRequest("/transform", sourceFile, "targetExtension", targetExtension).param( + mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", targetExtension).param( NOT_EXTRACT_BOOKMARKS_TEXT, "true")) .andExpect(status().is(OK.value())) .andExpect(header().string("Content-Disposition", @@ -628,7 +631,7 @@ public class TikaControllerTest extends AbstractTransformerControllerTest String tr = objectMapper.writeValueAsString(transformRequest); String transformationReplyAsString = mockMvc .perform(MockMvcRequestBuilders - .post("/transform") + .post(ENDPOINT_TRANSFORM) .header(ACCEPT, APPLICATION_JSON_VALUE) .header(CONTENT_TYPE, APPLICATION_JSON_VALUE) .content(tr)) @@ -643,4 +646,12 @@ public class TikaControllerTest extends AbstractTransformerControllerTest assertEquals(transformRequest.getClientData(), transformReply.getClientData()); assertEquals(transformRequest.getSchema(), transformReply.getSchema()); } + + @Test + @Override + public void httpTransformRequestUsingDirectAccessUrlTest() throws Exception + { + expectedTargetFileBytes = readTestFile(targetExtension); + super.httpTransformRequestUsingDirectAccessUrlTest(); + } } diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaHttpRequestTest.java b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaHttpRequestTest.java index c972f3b2..56aef563 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaHttpRequestTest.java +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaHttpRequestTest.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -56,18 +56,18 @@ public class TikaHttpRequestTest extends AbstractHttpRequestTest // Override method as Tika requires sourceMimetype // If not provided then sourceMimetype request parameter error will be thrown. @Override - protected void assertTransformError(boolean addFile, String errorMessage) + protected void assertTransformError(boolean addFile, + String errorMessage, + LinkedMultiValueMap additionalParams) { LinkedMultiValueMap parameters = new LinkedMultiValueMap<>(); - if (addFile) - { - parameters.add("file", new ClassPathResource("quick." + getSourceExtension())); - } parameters.add("sourceMimetype", "application/pdf"); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MULTIPART_FORM_DATA); - HttpEntity> entity = new HttpEntity<>(parameters, - headers); - super.sendTranformationRequest(entity, errorMessage); + + if (additionalParams != null) + { + parameters.addAll(additionalParams); + } + + super.assertTransformError(addFile, errorMessage, parameters); } } diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaMetadataExtractsIT.java b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaMetadataExtractsIT.java index b5e35eb2..bcd376d7 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaMetadataExtractsIT.java +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/java/org/alfresco/transformer/TikaMetadataExtractsIT.java @@ -548,4 +548,28 @@ public class TikaMetadataExtractsIT extends AbstractMetadataExtractsIT ); } + + @ParameterizedTest + @MethodSource("tika2_2_1_upgradeFailures") + public void testTika_2_2_1_upgradeFailures(TestFileInfo testFileInfo) + { + super.testTransformation(testFileInfo); + } + + private static Stream tika2_2_1_upgradeFailures() + { + // When we upgraded to Tika 2.2.1 from 2.2.0: + // - the original OfficeOpenXMLCore.SUBJECT raw metadata value started being null. + // - the replacement TikaCoreProperties.SUBJECT raw metadata changed into a multi value + // The following test files were the ones that failed. + return Stream.of( + testFile(MIMETYPE_OPENDOCUMENT_GRAPHICS_TEMPLATE, "otg", "quick.otg"), + testFile(MIMETYPE_OPENOFFICE1_WRITER, "sxw", "quick.sxw"), + testFile(MIMETYPE_OPENDOCUMENT_GRAPHICS, "odg", "quick.odg"), + testFile(MIMETYPE_OPENDOCUMENT_TEXT, "odt", "quick.odt"), + testFile(MIMETYPE_OPENDOCUMENT_TEXT_TEMPLATE, "ott", "quick.ott"), + testFile(MIMETYPE_OPENDOCUMENT_FORMULA, "odf", "quick.odf"), + testFile(MIMETYPE_PDF, "pdf", "quick.pdf") + ); + } } diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.3g2_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.3g2_metadata.json index 75afde88..4aba2f05 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.3g2_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.3g2_metadata.json @@ -2,7 +2,8 @@ "{http://www.alfresco.org/model/content/1.0}description" : null, "{http://www.alfresco.org/model/audio/1.0}releaseDate" : null, "{http://www.alfresco.org/model/content/1.0}created" : null, - "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "1000", + "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "8000", "{http://www.alfresco.org/model/content/1.0}author" : null, - "{http://www.alfresco.org/model/content/1.0}title" : null + "{http://www.alfresco.org/model/content/1.0}title" : null, + "{http://www.alfresco.org/model/audio/1.0}channelType" : "Stereo" } \ No newline at end of file diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.3gp_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.3gp_metadata.json index 75afde88..4aba2f05 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.3gp_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.3gp_metadata.json @@ -2,7 +2,8 @@ "{http://www.alfresco.org/model/content/1.0}description" : null, "{http://www.alfresco.org/model/audio/1.0}releaseDate" : null, "{http://www.alfresco.org/model/content/1.0}created" : null, - "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "1000", + "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "8000", "{http://www.alfresco.org/model/content/1.0}author" : null, - "{http://www.alfresco.org/model/content/1.0}title" : null + "{http://www.alfresco.org/model/content/1.0}title" : null, + "{http://www.alfresco.org/model/audio/1.0}channelType" : "Stereo" } \ No newline at end of file diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.m4v_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.m4v_metadata.json index 75afde88..dc61188e 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.m4v_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.m4v_metadata.json @@ -2,7 +2,8 @@ "{http://www.alfresco.org/model/content/1.0}description" : null, "{http://www.alfresco.org/model/audio/1.0}releaseDate" : null, "{http://www.alfresco.org/model/content/1.0}created" : null, - "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "1000", + "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "22050", "{http://www.alfresco.org/model/content/1.0}author" : null, - "{http://www.alfresco.org/model/content/1.0}title" : null + "{http://www.alfresco.org/model/content/1.0}title" : null, + "{http://www.alfresco.org/model/audio/1.0}channelType" : "Stereo" } \ No newline at end of file diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.mov_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.mov_metadata.json index 75afde88..96545700 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.mov_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.mov_metadata.json @@ -2,7 +2,8 @@ "{http://www.alfresco.org/model/content/1.0}description" : null, "{http://www.alfresco.org/model/audio/1.0}releaseDate" : null, "{http://www.alfresco.org/model/content/1.0}created" : null, - "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "1000", + "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "22050", "{http://www.alfresco.org/model/content/1.0}author" : null, - "{http://www.alfresco.org/model/content/1.0}title" : null + "{http://www.alfresco.org/model/content/1.0}title" : null, + "{http://www.alfresco.org/model/audio/1.0}channelType" : "Mono" } \ No newline at end of file diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.mp4_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.mp4_metadata.json index 39086dfb..96545700 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.mp4_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.mp4_metadata.json @@ -2,7 +2,8 @@ "{http://www.alfresco.org/model/content/1.0}description" : null, "{http://www.alfresco.org/model/audio/1.0}releaseDate" : null, "{http://www.alfresco.org/model/content/1.0}created" : null, - "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "90000", + "{http://www.alfresco.org/model/audio/1.0}sampleRate" : "22050", "{http://www.alfresco.org/model/content/1.0}author" : null, - "{http://www.alfresco.org/model/content/1.0}title" : null + "{http://www.alfresco.org/model/content/1.0}title" : null, + "{http://www.alfresco.org/model/audio/1.0}channelType" : "Mono" } \ No newline at end of file diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odf_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odf_metadata.json index 64a82c12..e185ac01 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odf_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odf_metadata.json @@ -1,5 +1,5 @@ { - "{http://www.alfresco.org/model/content/1.0}description" : "Gym class featuring a brown fox and lazy dog", + "{http://www.alfresco.org/model/content/1.0}description" : "Pangram, fox, dog, Gym class featuring a brown fox and lazy dog", "{http://www.alfresco.org/model/content/1.0}created" : 1138362922000, "{http://www.alfresco.org/model/content/1.0}author" : null, "{http://www.alfresco.org/model/content/1.0}title" : "The quick brown fox jumps over the lazy dog" diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odg_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odg_metadata.json index a542951b..c08f6a81 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odg_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odg_metadata.json @@ -1,5 +1,5 @@ { - "{http://www.alfresco.org/model/content/1.0}description" : "Gym class featuring a brown fox and lazy dog", + "{http://www.alfresco.org/model/content/1.0}description" : "Pangram, fox, dog, Gym class featuring a brown fox and lazy dog", "{http://www.alfresco.org/model/content/1.0}created" : 1138362371000, "{http://www.alfresco.org/model/content/1.0}author" : "Derek Hulley", "{http://www.alfresco.org/model/content/1.0}title" : "The quick brown fox jumps over the lazy dog" diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odt_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odt_metadata.json index 37545ead..18faa8b9 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odt_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.odt_metadata.json @@ -1,5 +1,5 @@ { - "{http://www.alfresco.org/model/content/1.0}description" : "Gym class featuring a brown fox and lazy dog", + "{http://www.alfresco.org/model/content/1.0}description" : "Pangram, fox, dog, Gym class featuring a brown fox and lazy dog", "{http://www.alfresco.org/model/content/1.0}created" : 1126049640000, "{http://www.alfresco.org/model/content/1.0}author" : "Jesper Steen Møller", "{http://www.alfresco.org/model/content/1.0}title" : "The quick brown fox jumps over the lazy dog" diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.otg_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.otg_metadata.json index a542951b..c08f6a81 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.otg_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.otg_metadata.json @@ -1,5 +1,5 @@ { - "{http://www.alfresco.org/model/content/1.0}description" : "Gym class featuring a brown fox and lazy dog", + "{http://www.alfresco.org/model/content/1.0}description" : "Pangram, fox, dog, Gym class featuring a brown fox and lazy dog", "{http://www.alfresco.org/model/content/1.0}created" : 1138362371000, "{http://www.alfresco.org/model/content/1.0}author" : "Derek Hulley", "{http://www.alfresco.org/model/content/1.0}title" : "The quick brown fox jumps over the lazy dog" diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.ott_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.ott_metadata.json index 37545ead..18faa8b9 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.ott_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.ott_metadata.json @@ -1,5 +1,5 @@ { - "{http://www.alfresco.org/model/content/1.0}description" : "Gym class featuring a brown fox and lazy dog", + "{http://www.alfresco.org/model/content/1.0}description" : "Pangram, fox, dog, Gym class featuring a brown fox and lazy dog", "{http://www.alfresco.org/model/content/1.0}created" : 1126049640000, "{http://www.alfresco.org/model/content/1.0}author" : "Jesper Steen Møller", "{http://www.alfresco.org/model/content/1.0}title" : "The quick brown fox jumps over the lazy dog" diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.pdf_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.pdf_metadata.json index 0f46dcb3..8758c90f 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.pdf_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.pdf_metadata.json @@ -1,5 +1,5 @@ { - "{http://www.alfresco.org/model/content/1.0}description" : "Gym class featuring a brown fox and lazy dog", + "{http://www.alfresco.org/model/content/1.0}description" : "Pangram, fox, dog, Gym class featuring a brown fox and lazy dog", "{http://www.alfresco.org/model/content/1.0}created" : "2005-05-26T19:52:58Z", "{http://www.alfresco.org/model/content/1.0}author" : "Nevin Nollop", "{http://www.alfresco.org/model/content/1.0}title" : "The quick brown fox jumps over the lazy dog" diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.sxw_metadata.json b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.sxw_metadata.json index 37545ead..18faa8b9 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.sxw_metadata.json +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/test/resources/quick.sxw_metadata.json @@ -1,5 +1,5 @@ { - "{http://www.alfresco.org/model/content/1.0}description" : "Gym class featuring a brown fox and lazy dog", + "{http://www.alfresco.org/model/content/1.0}description" : "Pangram, fox, dog, Gym class featuring a brown fox and lazy dog", "{http://www.alfresco.org/model/content/1.0}created" : 1126049640000, "{http://www.alfresco.org/model/content/1.0}author" : "Jesper Steen Møller", "{http://www.alfresco.org/model/content/1.0}title" : "The quick brown fox jumps over the lazy dog" diff --git a/alfresco-transform-tika/alfresco-transform-tika/pom.xml b/alfresco-transform-tika/alfresco-transform-tika/pom.xml index e0d09619..8e5574fb 100644 --- a/alfresco-transform-tika/alfresco-transform-tika/pom.xml +++ b/alfresco-transform-tika/alfresco-transform-tika/pom.xml @@ -3,12 +3,11 @@ 4.0.0 alfresco-transform-tika Alfresco Tika Transformer - jar alfresco-transform-core org.alfresco - 2.5.5-A2-SNAPSHOT + 2.5.7-A5-SNAPSHOT ../../pom.xml @@ -27,13 +26,9 @@ org.apache.tika - tika-parsers + tika-parsers-standard-package ${dependency.tika.version} - - com.tdunning - json - org.bouncycastle bcprov-jdk15on @@ -42,11 +37,6 @@ org.bouncycastle bcmail-jdk15on - - - org.quartz-scheduler - quartz - xml-apis xml-apis @@ -126,18 +116,10 @@ - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - org.codehaus.mojo license-maven-plugin - \ No newline at end of file + diff --git a/alfresco-transform-tika/alfresco-transform-tika/src/license/THIRD-PARTY.properties b/alfresco-transform-tika/alfresco-transform-tika/src/license/THIRD-PARTY.properties deleted file mode 100644 index 475ce274..00000000 --- a/alfresco-transform-tika/alfresco-transform-tika/src/license/THIRD-PARTY.properties +++ /dev/null @@ -1,52 +0,0 @@ -# Generated by org.codehaus.mojo.license.AddThirdPartyMojo -#------------------------------------------------------------------------------- -# Already used licenses in project : -# - (MIT-style) netCDF C library license -# - 3-Clause BSD License -# - Apache 2.0 -# - Apache License 2.0 -# - Apache License v2 -# - Apache License v2.0 -# - Apache License, Version 2.0 -# - Apache License, version 2.0 -# - Apache Software License - Version 2.0 -# - BSD -# - BSD 3-clause License w/nuclear disclaimer -# - BSD 3-clause New License -# - BSD License -# - BSD-2-Clause -# - Bouncy Castle Licence -# - CDDL + GPLv2 with classpath exception -# - CDDL, v1.0 -# - CDDL/GPLv2+CE -# - EDL 1.0 -# - EPL 2.0 -# - Eclipse Distribution License - v 1.0 -# - Eclipse Public License - v 1.0 -# - Eclipse Public License 2.0 -# - GNU General Public License, version 2 with the GNU Classpath Exception -# - GNU Lesser General Public License -# - GPL2 w/ CPE -# - LGPL, v2.1 or later -# - LGPL, version 2.1 -# - MIT License -# - MIT License (MIT) -# - Mozilla Public License 1.1 (MPL 1.1) -# - OGC copyright -# - Public Domain -# - Public Domain, per Creative Commons CC0 -# - Similar to Apache License but with the acknowledgment clause removed -# - The Apache License, Version 2.0 -# - The Apache Software License, Version 2.0 -# - The BSD License -# - The MIT License -# - The SAX License -# - The W3C License -# - UnRar License -# - lgpl -#------------------------------------------------------------------------------- -# Please fill the missing licenses for dependencies : -# -# -#Thu Apr 09 10:31:19 BST 2020 -net.jcip--jcip-annotations--1.0=Public diff --git a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/AbstractTikaMetadataExtractor.java b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/AbstractTikaMetadataExtractor.java index 4a78ae00..e52e9394 100644 --- a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/AbstractTikaMetadataExtractor.java +++ b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/AbstractTikaMetadataExtractor.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -28,7 +28,11 @@ package org.alfresco.transformer.metadataExtractors; import org.apache.tika.embedder.Embedder; import org.apache.tika.extractor.DocumentSelector; +import org.apache.tika.metadata.DublinCore; import org.apache.tika.metadata.Metadata; +import org.apache.tika.metadata.OfficeOpenXMLCore; +import org.apache.tika.metadata.Property; +import org.apache.tika.metadata.TikaCoreProperties; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser; import org.apache.tika.sax.ContentHandlerDecorator; @@ -58,7 +62,10 @@ import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * The parent of all Metadata Extractors which use Apache Tika under the hood. This handles all the @@ -83,7 +90,7 @@ public abstract class AbstractTikaMetadataExtractor extends AbstractMetadataExtr protected static final String KEY_CREATED = "created"; protected static final String KEY_DESCRIPTION = "description"; protected static final String KEY_COMMENTS = "comments"; - protected static final String KEY_TAGS = "dc:subject"; + protected static final String KEY_TAGS = DublinCore.SUBJECT.getName(); private static final String METADATA_SEPARATOR = ","; @@ -208,7 +215,6 @@ public abstract class AbstractTikaMetadataExtractor extends AbstractMetadataExtr } @Override - @SuppressWarnings( "deprecation" ) public Map extractMetadata(String sourceMimetype, Map transformOptions, File sourceFile) throws Exception { @@ -245,7 +251,7 @@ public abstract class AbstractTikaMetadataExtractor extends AbstractMetadataExtr for (String tikaKey : metadata.names()) { // TODO review this change (part of MNT-15267) - should we really force string concatenation here !? - putRawValue(tikaKey, getMetadataValue(metadata, tikaKey), rawProperties); + putRawValue(tikaKey, getMetadataValue(metadata, Property.internalText(tikaKey)), rawProperties); } // Now, map the common Tika metadata keys onto @@ -254,41 +260,41 @@ public abstract class AbstractTikaMetadataExtractor extends AbstractMetadataExtr // to work without needing any changes // The simple ones - putRawValue(KEY_AUTHOR, getMetadataValue(metadata, Metadata.AUTHOR), rawProperties); - putRawValue(KEY_TITLE, getMetadataValue(metadata, Metadata.TITLE), rawProperties); - putRawValue(KEY_COMMENTS, getMetadataValue(metadata, Metadata.COMMENTS), rawProperties); + putRawValue(KEY_AUTHOR, getMetadataValue(metadata, TikaCoreProperties.CREATOR), rawProperties); + putRawValue(KEY_TITLE, getMetadataValue(metadata, TikaCoreProperties.TITLE), rawProperties); + putRawValue(KEY_COMMENTS, getMetadataValue(metadata, TikaCoreProperties.COMMENTS), rawProperties); // Tags putRawValue(KEY_TAGS, getMetadataValues(metadata, KEY_TAGS), rawProperties); // Get the subject and description, despite things not // being nearly as consistent as one might hope - String subject = getMetadataValue(metadata, Metadata.SUBJECT); - String description = getMetadataValue(metadata, Metadata.DESCRIPTION); - if(subject != null && description != null) + String subject = getMetadataValue(metadata, TikaCoreProperties.SUBJECT); + String description = getMetadataValue(metadata, TikaCoreProperties.DESCRIPTION); + if (subject != null && description != null) { putRawValue(KEY_DESCRIPTION, description, rawProperties); putRawValue(KEY_SUBJECT, subject, rawProperties); } - else if(subject != null) + else if (subject != null) { putRawValue(KEY_DESCRIPTION, subject, rawProperties); putRawValue(KEY_SUBJECT, subject, rawProperties); } - else if(description != null) + else if (description != null) { putRawValue(KEY_DESCRIPTION, description, rawProperties); putRawValue(KEY_SUBJECT, description, rawProperties); } // Try for the dates two different ways too - if(metadata.get(Metadata.CREATION_DATE) != null) + if (metadata.get(TikaCoreProperties.CREATED) != null) { - putRawValue(KEY_CREATED, metadata.get(Metadata.CREATION_DATE), rawProperties); + putRawValue(KEY_CREATED, metadata.get(TikaCoreProperties.CREATED), rawProperties); } - else if(metadata.get(Metadata.DATE) != null) + else if (metadata.get(TikaCoreProperties.MODIFIED) != null) { - putRawValue(KEY_CREATED, metadata.get(Metadata.DATE), rawProperties); + putRawValue(KEY_CREATED, metadata.get(TikaCoreProperties.MODIFIED), rawProperties); } // If people created a specific instance @@ -388,24 +394,11 @@ public abstract class AbstractTikaMetadataExtractor extends AbstractMetadataExtr return values.length == 0 ? null : (values.length == 1 ? values[0] : values); } - private String getMetadataValue(Metadata metadata, String key) + private String getMetadataValue(Metadata metadata, Property key) { if (metadata.isMultiValued(key)) { - String[] parts = metadata.getValues(key); - - // use Set to prevent duplicates - Set value = new LinkedHashSet<>(parts.length); - - for (int i = 0; i < parts.length; i++) - { - value.add(parts[i]); - } - - String valueStr = value.toString(); - - // remove leading/trailing braces [] - return valueStr.substring(1, valueStr.length() - 1); + return distinct(metadata.getValues(key)).collect(Collectors.joining(", ")); } else { @@ -413,6 +406,15 @@ public abstract class AbstractTikaMetadataExtractor extends AbstractMetadataExtr } } + protected static Stream distinct(final String[] strings) + { + return Stream.of(strings) + .filter(Objects::nonNull) + .map(String::strip) + .filter(s -> !s.isEmpty()) + .distinct(); + } + /** * This content handler will capture entries from within * the header of the Tika content XHTML, but ignore the @@ -456,7 +458,7 @@ public abstract class AbstractTikaMetadataExtractor extends AbstractMetadataExtr public void characters(char[] ch, int start, int len) { - if(text != null) + if (text != null) { text.append(ch, start, len); } @@ -464,7 +466,7 @@ public abstract class AbstractTikaMetadataExtractor extends AbstractMetadataExtr public void endElement(String namespace, String localname, String qname) { - if(text != null && text.length() > 0) + if (text != null && text.length() > 0) { tags.put(qname, text.toString()); } diff --git a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/DWGMetadataExtractor.java b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/DWGMetadataExtractor.java index 9f6ec66e..47f300ed 100644 --- a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/DWGMetadataExtractor.java +++ b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/DWGMetadataExtractor.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2021 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -27,6 +27,7 @@ package org.alfresco.transformer.metadataExtractors; import org.apache.tika.metadata.Metadata; +import org.apache.tika.metadata.TikaCoreProperties; import org.apache.tika.parser.Parser; import org.apache.tika.parser.dwg.DWGParser; import org.slf4j.Logger; @@ -64,13 +65,12 @@ public class DWGMetadataExtractor extends AbstractTikaMetadataExtractor super(logger); } - @SuppressWarnings("deprecation") @Override protected Map extractSpecific(Metadata metadata, Map properties, Map headers) { - putRawValue(KEY_KEYWORD, metadata.get(Metadata.KEYWORDS), properties); - putRawValue(KEY_LAST_AUTHOR, metadata.get(Metadata.LAST_AUTHOR), properties); + putRawValue(KEY_KEYWORD, metadata.get(TikaCoreProperties.SUBJECT), properties); + putRawValue(KEY_LAST_AUTHOR, metadata.get(TikaCoreProperties.MODIFIED), properties); return properties; } diff --git a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/MP3MetadataExtractor.java b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/MP3MetadataExtractor.java index d8957863..b6cd2826 100644 --- a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/MP3MetadataExtractor.java +++ b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/MP3MetadataExtractor.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2021 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -27,6 +27,7 @@ package org.alfresco.transformer.metadataExtractors; import org.apache.tika.metadata.Metadata; +import org.apache.tika.metadata.TikaCoreProperties; import org.apache.tika.metadata.XMPDM; import org.apache.tika.parser.Parser; import org.apache.tika.parser.mp3.Mp3Parser; @@ -86,7 +87,6 @@ public class MP3MetadataExtractor extends TikaAudioMetadataExtractor return new Mp3Parser(); } - @SuppressWarnings("deprecation") @Override protected Map extractSpecific(Metadata metadata, Map properties, Map headers) @@ -98,7 +98,7 @@ public class MP3MetadataExtractor extends TikaAudioMetadataExtractor // We only need these for people who had pre-existing mapping // properties from before the proper audio model was added putRawValue(KEY_ALBUM_TITLE, metadata.get(XMPDM.ALBUM), properties); - putRawValue(KEY_SONG_TITLE, metadata.get(Metadata.TITLE), properties); + putRawValue(KEY_SONG_TITLE, metadata.get(TikaCoreProperties.TITLE), properties); putRawValue(KEY_ARTIST, metadata.get(XMPDM.ARTIST), properties); putRawValue(KEY_COMMENT, metadata.get(XMPDM.LOG_COMMENT), properties); putRawValue(KEY_TRACK_NUMBER, metadata.get(XMPDM.TRACK_NUMBER), properties); diff --git a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/MailMetadataExtractor.java b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/MailMetadataExtractor.java index 5d0a047f..86d168c6 100644 --- a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/MailMetadataExtractor.java +++ b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/MailMetadataExtractor.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2021 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -26,7 +26,9 @@ */ package org.alfresco.transformer.metadataExtractors; +import org.apache.tika.metadata.Message; import org.apache.tika.metadata.Metadata; +import org.apache.tika.metadata.TikaCoreProperties; import org.apache.tika.parser.Parser; import org.apache.tika.parser.microsoft.OfficeParser; import org.slf4j.Logger; @@ -82,26 +84,25 @@ public class MailMetadataExtractor extends AbstractTikaMetadataExtractor return new OfficeParser(); } - @SuppressWarnings("deprecation") @Override protected Map extractSpecific(Metadata metadata, Map properties, Map headers) { - putRawValue(KEY_ORIGINATOR, metadata.get(Metadata.AUTHOR), properties); - putRawValue(KEY_SUBJECT, metadata.get(Metadata.TITLE), properties); - putRawValue(KEY_DESCRIPTION, metadata.get(Metadata.SUBJECT), properties); - putRawValue(KEY_SENT_DATE, metadata.get(Metadata.LAST_SAVED), properties); + putRawValue(KEY_ORIGINATOR, metadata.get(TikaCoreProperties.CREATOR), properties); + putRawValue(KEY_SUBJECT, metadata.get(TikaCoreProperties.TITLE), properties); + putRawValue(KEY_DESCRIPTION, metadata.get(TikaCoreProperties.SUBJECT), properties); + putRawValue(KEY_SENT_DATE, metadata.get(TikaCoreProperties.MODIFIED), properties); // Store the TO, but not cc/bcc in the addressee field - putRawValue(KEY_ADDRESSEE, metadata.get(Metadata.MESSAGE_TO), properties); + putRawValue(KEY_ADDRESSEE, metadata.get(Message.MESSAGE_TO), properties); // Store each of To, CC and BCC in their own fields - putRawValue(KEY_TO_NAMES, metadata.getValues(Metadata.MESSAGE_TO), properties); - putRawValue(KEY_CC_NAMES, metadata.getValues(Metadata.MESSAGE_CC), properties); - putRawValue(KEY_BCC_NAMES, metadata.getValues(Metadata.MESSAGE_BCC), properties); + putRawValue(KEY_TO_NAMES, metadata.getValues(Message.MESSAGE_TO), properties); + putRawValue(KEY_CC_NAMES, metadata.getValues(Message.MESSAGE_CC), properties); + putRawValue(KEY_BCC_NAMES, metadata.getValues(Message.MESSAGE_BCC), properties); // But store all email addresses (to/cc/bcc) in the addresses field - putRawValue(KEY_ADDRESSEES, metadata.getValues(Metadata.MESSAGE_RECIPIENT_ADDRESS), properties); + putRawValue(KEY_ADDRESSEES, metadata.getValues(Message.MESSAGE_RECIPIENT_ADDRESS), properties); return properties; } diff --git a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/OfficeMetadataExtractor.java b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/OfficeMetadataExtractor.java index dfca577e..7612a386 100644 --- a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/OfficeMetadataExtractor.java +++ b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/OfficeMetadataExtractor.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2021 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -27,6 +27,8 @@ package org.alfresco.transformer.metadataExtractors; import org.apache.tika.metadata.Metadata; +import org.apache.tika.metadata.Office; +import org.apache.tika.metadata.TikaCoreProperties; import org.apache.tika.parser.Parser; import org.apache.tika.parser.microsoft.OfficeParser; import org.slf4j.Logger; @@ -40,7 +42,7 @@ import java.util.Map; * * Configuration: (see OfficeMetadataExtractor_metadata_extract.properties and tika_engine_config.json) * - * This extracter uses the POI library to extract the following: + * This extractor uses the POI library to extract the following: *
  *   author:             --      cm:author
  *   title:              --      cm:title
@@ -91,23 +93,20 @@ public class OfficeMetadataExtractor extends AbstractTikaMetadataExtractor
         return new OfficeParser();
     }
 
-    @SuppressWarnings("deprecation")
     @Override
     protected Map extractSpecific(Metadata metadata,
                                                         Map properties, Map headers)
     {
-        putRawValue(KEY_CREATE_DATETIME, metadata.get(Metadata.CREATION_DATE), properties);
-        putRawValue(KEY_LAST_SAVE_DATETIME, metadata.get(Metadata.LAST_SAVED), properties);
-        putRawValue(KEY_EDIT_TIME, metadata.get(Metadata.EDIT_TIME), properties);
-        putRawValue(KEY_FORMAT, metadata.get(Metadata.FORMAT), properties);
-        putRawValue(KEY_KEYWORDS, metadata.get(Metadata.KEYWORDS), properties);
-        putRawValue(KEY_LAST_AUTHOR, metadata.get(Metadata.LAST_AUTHOR), properties);
-        putRawValue(KEY_LAST_PRINTED, metadata.get(Metadata.LAST_PRINTED), properties);
-//       putRawValue(KEY_OS_VERSION, metadata.get(Metadata.OS_VERSION), properties);
-//       putRawValue(KEY_THUMBNAIL, metadata.get(Metadata.THUMBNAIL), properties);
-        putRawValue(KEY_PAGE_COUNT, metadata.get(Metadata.PAGE_COUNT), properties);
-        putRawValue(KEY_PARAGRAPH_COUNT, metadata.get(Metadata.PARAGRAPH_COUNT), properties);
-        putRawValue(KEY_WORD_COUNT, metadata.get(Metadata.WORD_COUNT), properties);
+        putRawValue(KEY_CREATE_DATETIME, metadata.get(TikaCoreProperties.CREATED), properties);
+        putRawValue(KEY_LAST_SAVE_DATETIME, metadata.get(TikaCoreProperties.MODIFIED), properties);
+        putRawValue(KEY_EDIT_TIME, metadata.get(TikaCoreProperties.MODIFIED), properties);
+        putRawValue(KEY_FORMAT, metadata.get(TikaCoreProperties.FORMAT), properties);
+        putRawValue(KEY_KEYWORDS, metadata.get(TikaCoreProperties.SUBJECT), properties);
+        putRawValue(KEY_LAST_AUTHOR, metadata.get(TikaCoreProperties.MODIFIER), properties);
+        putRawValue(KEY_LAST_PRINTED, metadata.get(TikaCoreProperties.PRINT_DATE), properties);
+        putRawValue(KEY_PAGE_COUNT, metadata.get(Office.PAGE_COUNT), properties);
+        putRawValue(KEY_PARAGRAPH_COUNT, metadata.get(Office.PARAGRAPH_COUNT), properties);
+        putRawValue(KEY_WORD_COUNT, metadata.get(Office.WORD_COUNT), properties);
         return properties;
     }
 }
diff --git a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/OpenDocumentMetadataExtractor.java b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/OpenDocumentMetadataExtractor.java
index 4de536da..8014802b 100644
--- a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/OpenDocumentMetadataExtractor.java
+++ b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/OpenDocumentMetadataExtractor.java
@@ -2,7 +2,7 @@
  * #%L
  * Alfresco Transform Core
  * %%
- * Copyright (C) 2005 - 2020 Alfresco Software Limited
+ * Copyright (C) 2005 - 2021 Alfresco Software Limited
  * %%
  * This file is part of the Alfresco software.
  * -
@@ -26,18 +26,28 @@
  */
 package org.alfresco.transformer.metadataExtractors;
 
+import static org.apache.tika.metadata.DublinCore.NAMESPACE_URI_DC;
+
 import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.TikaCoreProperties;
+import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
+import org.apache.tika.parser.odf.OpenDocumentMetaParser;
 import org.apache.tika.parser.odf.OpenDocumentParser;
+import org.apache.tika.parser.xml.ElementMetadataHandler;
+import org.apache.tika.sax.TeeContentHandler;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.xml.sax.ContentHandler;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * {@code "application/vnd.oasis.opendocument..."} and {@code "applicationvnd.oasis.opendocument..."} metadata extractor.
@@ -77,6 +87,7 @@ public class OpenDocumentMetadataExtractor extends AbstractTikaMetadataExtractor
     private static final String KEY_INITIAL_CREATOR = "initialCreator";
     private static final String KEY_KEYWORD = "keyword";
     private static final String KEY_LANGUAGE = "language";
+    private static final String KEY_ALFRESCO_CREATOR = "_alfresco:creator";
 
     private static final String CUSTOM_PREFIX = "custom:";
 
@@ -90,22 +101,33 @@ public class OpenDocumentMetadataExtractor extends AbstractTikaMetadataExtractor
     @Override
     protected Parser getParser()
     {
-        return new OpenDocumentParser();
+        OpenDocumentParser parser = new OpenDocumentParser();
+        parser.setMetaParser(new OpenDocumentMetaParser() {
+            @Override
+            protected ContentHandler getContentHandler(ContentHandler ch, Metadata md, ParseContext context)
+            {
+                final ContentHandler superHandler = super.getContentHandler(ch, md, context);
+                final ContentHandler creatorHandler = new ElementMetadataHandler(NAMESPACE_URI_DC, KEY_CREATOR, md, KEY_ALFRESCO_CREATOR);
+                return new TeeContentHandler(superHandler, creatorHandler);
+            }
+        });
+        return parser;
     }
 
-    @SuppressWarnings("deprecation")
     @Override
     protected Map extractSpecific(Metadata metadata,
                                                         Map properties, Map headers)
     {
-        putRawValue(KEY_CREATION_DATE, getDateOrNull(metadata.get(Metadata.CREATION_DATE)), properties);
-        putRawValue(KEY_CREATOR, metadata.get(Metadata.CREATOR), properties);
-        putRawValue(KEY_DATE, getDateOrNull(metadata.get(Metadata.DATE)), properties);
-        putRawValue(KEY_DESCRIPTION, metadata.get(Metadata.DESCRIPTION), properties);
+        putRawValue(KEY_CREATION_DATE, getDateOrNull(metadata.get(TikaCoreProperties.CREATED)), properties);
+        final String creator = getCreator(metadata);
+        putRawValue(KEY_CREATOR, creator, properties);
+        putRawValue(KEY_AUTHOR, creator, properties);
+        putRawValue(KEY_DATE, getDateOrNull(metadata.get(TikaCoreProperties.MODIFIED)), properties);
+        putRawValue(KEY_DESCRIPTION, metadata.get(TikaCoreProperties.DESCRIPTION), properties);
         putRawValue(KEY_GENERATOR, metadata.get("generator"), properties);
         putRawValue(KEY_INITIAL_CREATOR, metadata.get("initial-creator"), properties);
-        putRawValue(KEY_KEYWORD, metadata.get(Metadata.KEYWORDS), properties);
-        putRawValue(KEY_LANGUAGE, metadata.get(Metadata.LANGUAGE), properties);
+        putRawValue(KEY_KEYWORD, metadata.get(TikaCoreProperties.SUBJECT), properties);
+        putRawValue(KEY_LANGUAGE, metadata.get(TikaCoreProperties.LANGUAGE), properties);
 
         // Handle user-defined properties dynamically
         Map> mapping = super.getExtractMapping();
@@ -120,6 +142,18 @@ public class OpenDocumentMetadataExtractor extends AbstractTikaMetadataExtractor
         return properties;
     }
 
+    private String getCreator(Metadata metadata)
+    {
+        final List creators = distinct(metadata.getValues(TikaCoreProperties.CREATOR))
+                .collect(Collectors.toUnmodifiableList());
+        if (creators.size() == 1)
+        {
+            return creators.get(0);
+        }
+
+        return metadata.get(KEY_ALFRESCO_CREATOR);
+    }
+
     private Date getDateOrNull(String dateString)
     {
         if (dateString != null && dateString.length() != 0)
diff --git a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/TikaAudioMetadataExtractor.java b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/TikaAudioMetadataExtractor.java
index 1a8a4a84..e7933ef3 100644
--- a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/TikaAudioMetadataExtractor.java
+++ b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/metadataExtractors/TikaAudioMetadataExtractor.java
@@ -2,7 +2,7 @@
  * #%L
  * Alfresco Transform Core
  * %%
- * Copyright (C) 2005 - 2020 Alfresco Software Limited
+ * Copyright (C) 2005 - 2021 Alfresco Software Limited
  * %%
  * This file is part of the Alfresco software.
  * -
@@ -28,6 +28,7 @@ package org.alfresco.transformer.metadataExtractors;
 
 import org.apache.tika.config.TikaConfig;
 import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.metadata.XMPDM;
 import org.apache.tika.parser.CompositeParser;
 import org.apache.tika.parser.Parser;
@@ -148,13 +149,12 @@ public class TikaAudioMetadataExtractor extends AbstractTikaMetadataExtractor
      * @param metadata     the metadata extracted from the file
      * @return          the description
      */
-    @SuppressWarnings("deprecation")
     private String generateDescription(Metadata metadata)
     {
         StringBuilder result = new StringBuilder();
-        if (metadata.get(Metadata.TITLE) != null)
+        if (metadata.get(TikaCoreProperties.TITLE) != null)
         {
-            result.append(metadata.get(Metadata.TITLE));
+            result.append(metadata.get(TikaCoreProperties.TITLE));
             if (metadata.get(XMPDM.ALBUM) != null)
             {
                 result
diff --git a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/tika/parsers/ExifToolParser.java b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/tika/parsers/ExifToolParser.java
index e43677a4..9e15731e 100644
--- a/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/tika/parsers/ExifToolParser.java
+++ b/alfresco-transform-tika/alfresco-transform-tika/src/main/java/org/alfresco/transformer/tika/parsers/ExifToolParser.java
@@ -44,9 +44,9 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.NullOutputStream;
 import org.apache.tika.exception.TikaException;
-import org.apache.tika.io.IOUtils;
-import org.apache.tika.io.NullOutputStream;
 import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
@@ -57,7 +57,7 @@ import org.apache.tika.parser.external.ExternalParser;
 import org.apache.tika.parser.external.ExternalParsersFactory;
 import org.apache.tika.parser.image.ImageParser;
 import org.apache.tika.parser.image.TiffParser;
-import org.apache.tika.parser.jpeg.JpegParser;
+import org.apache.tika.parser.image.JpegParser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -263,7 +263,7 @@ public class ExifToolParser extends ExternalParser {
      * stream of the given process to the given XHTML content handler.
      * The standard output stream is closed once fully processed.
      *
-     * @param process process
+     * @param stream stream
      * @param xhtml XHTML content handler
      * @throws SAXException if the XHTML SAX events could not be handled
      * @throws IOException if an input error occurred
@@ -315,13 +315,13 @@ public class ExifToolParser extends ExternalParser {
      * standard stream of the given process. Potential exceptions
      * are ignored, and the stream is closed once fully processed.
      *
-     * @param process process
+     * @param stream stream
      */
     private void ignoreStream(final InputStream stream) {
         Thread t = new Thread() {
             public void run() {
                 try {
-                    IOUtils.copy(stream, new NullOutputStream());
+                    IOUtils.copy(stream, NullOutputStream.NULL_OUTPUT_STREAM);
                 } catch (IOException e) {
                 } finally {
                     IOUtils.closeQuietly(stream);
diff --git a/alfresco-transformer-base/pom.xml b/alfresco-transformer-base/pom.xml
index e7ad63cf..1fc41d5c 100644
--- a/alfresco-transformer-base/pom.xml
+++ b/alfresco-transformer-base/pom.xml
@@ -1,15 +1,14 @@
+
 
     4.0.0
 
     
         org.alfresco
         alfresco-transform-core
-        2.5.5-A2-SNAPSHOT
-        ../pom.xml
+        2.5.7-A5-SNAPSHOT
     
 
     alfresco-transformer-base
-    2.5.5-A2-SNAPSHOT
 
     
         false
@@ -81,7 +80,6 @@
             
                 org.apache.maven.plugins
                 maven-jar-plugin
-                3.2.0
                 
                     
                         
diff --git a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/AbstractTransformerController.java b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/AbstractTransformerController.java
index d304a87a..a3ffcf3c 100644
--- a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/AbstractTransformerController.java
+++ b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/AbstractTransformerController.java
@@ -33,11 +33,11 @@ import org.alfresco.transform.client.model.TransformRequestValidator;
 import org.alfresco.transform.client.model.config.TransformConfig;
 import org.alfresco.transform.client.registry.TransformServiceRegistry;
 import org.alfresco.transform.exceptions.TransformException;
-import org.alfresco.transform.router.TransformStack;
 import org.alfresco.transform.router.TransformerDebug;
 import org.alfresco.transformer.clients.AlfrescoSharedFileStoreClient;
 import org.alfresco.transformer.logging.LogEntry;
 import org.alfresco.transformer.model.FileRefResponse;
+import org.codehaus.plexus.util.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,12 +58,20 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.File;
+import java.io.IOException;
+import java.net.URL;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import static java.util.stream.Collectors.joining;
+import static org.alfresco.transform.client.model.config.CoreVersionDecorator.setOrClearCoreVersion;
+import static org.alfresco.transform.client.util.RequestParamMap.DIRECT_ACCESS_URL;
+import static org.alfresco.transform.client.util.RequestParamMap.CONFIG_VERSION;
+import static org.alfresco.transform.client.util.RequestParamMap.CONFIG_VERSION_DEFAULT;
+import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM;
+import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM_CONFIG;
 import static org.alfresco.transformer.fs.FileManager.TempFileProvider.createTempFile;
 import static org.alfresco.transformer.fs.FileManager.buildFile;
 import static org.alfresco.transformer.fs.FileManager.createAttachment;
@@ -126,7 +134,7 @@ public abstract class AbstractTransformerController implements TransformControll
 
     // Request parameters that are not part of transform options
     public static final List NON_TRANSFORM_OPTION_REQUEST_PARAMETERS = Arrays.asList(SOURCE_EXTENSION,
-            TARGET_EXTENSION, TARGET_MIMETYPE, SOURCE_MIMETYPE, TEST_DELAY, TRANSFORM_NAME_PROPERTY);
+            TARGET_EXTENSION, TARGET_MIMETYPE, SOURCE_MIMETYPE, TEST_DELAY, TRANSFORM_NAME_PROPERTY, DIRECT_ACCESS_URL);
 
     @Autowired
     private AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient;
@@ -140,27 +148,28 @@ public abstract class AbstractTransformerController implements TransformControll
     @Autowired
     private TransformerDebug transformerDebug;
 
-    @GetMapping(value = "/transform/config")
-    public ResponseEntity info()
+    @GetMapping(value = ENDPOINT_TRANSFORM_CONFIG)
+    public ResponseEntity info(
+            @RequestParam(value = CONFIG_VERSION, defaultValue = CONFIG_VERSION_DEFAULT) int configVersion)
     {
-        logger.info("GET Transform Config.");
-        final TransformConfig transformConfig =
-            ((TransformRegistryImpl) transformRegistry).getTransformConfig();
+        logger.info("GET Transform Config version: " + configVersion);
+        TransformConfig transformConfig = ((TransformRegistryImpl) transformRegistry).getTransformConfig();
+        transformConfig = setOrClearCoreVersion(transformConfig, configVersion);
         return new ResponseEntity<>(transformConfig, OK);
     }
 
-    @PostMapping(value = "/transform", consumes = MULTIPART_FORM_DATA_VALUE)
+    @PostMapping(value = ENDPOINT_TRANSFORM, consumes = MULTIPART_FORM_DATA_VALUE)
     public ResponseEntity transform(HttpServletRequest request,
-                                              @RequestParam(FILE) MultipartFile sourceMultipartFile,
+                                              @RequestParam(value = FILE, required = false) MultipartFile sourceMultipartFile,
                                               @RequestParam(TARGET_EXTENSION) String targetExtension,
                                               @RequestParam(value = SOURCE_MIMETYPE, required = false) String sourceMimetype,
                                               @RequestParam(value = TARGET_MIMETYPE, required = false) String targetMimetype,
                                               @RequestParam Map requestParameters,
-                                              @RequestParam (value = TEST_DELAY, required = false) Long testDelay,
+                                              @RequestParam(value = TEST_DELAY, required = false) Long testDelay,
 
                                               // The TRANSFORM_NAME_PROPERTY param allows ACS legacy transformers to specify which transform to use,
                                               // It can be removed once legacy transformers are removed from ACS.
-                                              @RequestParam (value = TRANSFORM_NAME_PROPERTY, required = false) String requestTransformName)
+                                              @RequestParam(value = TRANSFORM_NAME_PROPERTY, required = false) String requestTransformName)
     {
         if (logger.isDebugEnabled())
         {
@@ -168,10 +177,27 @@ public abstract class AbstractTransformerController implements TransformControll
                     + "targetExtension: '{}', requestParameters: {}", sourceMimetype, targetMimetype, targetExtension, requestParameters);
         }
 
-        final String targetFilename = createTargetFileName(
-                sourceMultipartFile.getOriginalFilename(), targetExtension);
+        final String directUrl = requestParameters.getOrDefault(DIRECT_ACCESS_URL, "");
+
+        File sourceFile;
+        String sourceFilename;
+        if (directUrl.isBlank())
+        {
+            if (sourceMultipartFile ==  null)
+            {
+                throw new TransformException(BAD_REQUEST.value(), "Required request part 'file' is not present");
+            }
+            sourceFile = createSourceFile(request, sourceMultipartFile);
+            sourceFilename = sourceMultipartFile.getOriginalFilename();
+        }
+        else
+        {
+            sourceFile = getSourceFileFromDirectUrl(directUrl);
+            sourceFilename = sourceFile.getName();
+        }
+
+        final String targetFilename = createTargetFileName(sourceFilename, targetExtension);
         getProbeTestTransform().incrementTransformerCount();
-        final File sourceFile = createSourceFile(request, sourceMultipartFile);
         final File targetFile = createTargetFile(request, targetFilename);
 
         Map transformOptions = getTransformOptions(requestParameters);
@@ -186,6 +212,25 @@ public abstract class AbstractTransformerController implements TransformControll
         return body;
     }
 
+    private File getSourceFileFromDirectUrl(String directUrl)
+    {
+        File sourceFile = createTempFile("tmp", ".tmp");
+        try
+        {
+            FileUtils.copyURLToFile(new URL(directUrl), sourceFile);
+        }
+        catch (IllegalArgumentException e)
+        {
+            throw new TransformException(BAD_REQUEST.value(), "Direct Access Url is invalid.", e);
+        }
+        catch (IOException e)
+        {
+            throw new TransformException(BAD_REQUEST.value(), "Direct Access Url not found.", e);
+        }
+
+        return sourceFile;
+    }
+
     protected Map getTransformOptions(Map requestParameters)
     {
         Map transformOptions = new HashMap<>(requestParameters);
@@ -204,7 +249,7 @@ public abstract class AbstractTransformerController implements TransformControll
      * @param timeout Transformation timeout
      * @return A transformation reply
      */
-    @PostMapping(value = "/transform", produces = APPLICATION_JSON_VALUE)
+    @PostMapping(value = ENDPOINT_TRANSFORM, produces = APPLICATION_JSON_VALUE)
     @ResponseBody
     public ResponseEntity transform(@RequestBody TransformRequest request,
         @RequestParam(value = "timeout", required = false) Long timeout)
@@ -240,7 +285,15 @@ public abstract class AbstractTransformerController implements TransformControll
         File sourceFile;
         try
         {
-            sourceFile = loadSourceFile(request.getSourceReference(), request.getSourceExtension());
+            final String directUrl = request.getTransformRequestOptions().getOrDefault(DIRECT_ACCESS_URL, "");
+            if (directUrl.isBlank())
+            {
+                sourceFile = loadSourceFile(request.getSourceReference(), request.getSourceExtension());
+            }
+            else
+            {
+                sourceFile = getSourceFileFromDirectUrl(directUrl);
+            }
         }
         catch (TransformException e)
         {
@@ -280,7 +333,7 @@ public abstract class AbstractTransformerController implements TransformControll
         {
             String targetMimetype = request.getTargetMediaType();
             String sourceMimetype = request.getSourceMediaType();
-            Map transformOptions = request.getTransformRequestOptions();
+            Map transformOptions = getTransformOptions(request.getTransformRequestOptions());
             transformerDebug.logOptions(request);
             String transformName = getTransformerName(sourceFile, sourceMimetype, targetMimetype, transformOptions);
             transformImpl(transformName, sourceMimetype, targetMimetype, transformOptions, sourceFile, targetFile);
diff --git a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/TransformRegistryImpl.java b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/TransformRegistryImpl.java
index 25c620c0..f2289c37 100644
--- a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/TransformRegistryImpl.java
+++ b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/TransformRegistryImpl.java
@@ -26,6 +26,7 @@
 package org.alfresco.transformer;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.alfresco.transform.client.model.config.CoreVersionDecorator.setCoreVersionOnSingleStepTransformers;
 import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
 
 import java.io.IOException;
@@ -61,6 +62,9 @@ public class TransformRegistryImpl extends AbstractTransformRegistry
     @Value("${transform.core.config.location:classpath:engine_config.json}")
     private String locationFromProperty;
 
+    @Value("${transform.core.version}")
+    private String coreVersion;
+
     private Resource engineConfig;
 
     @PostConstruct
@@ -82,7 +86,9 @@ public class TransformRegistryImpl extends AbstractTransformRegistry
     {
         try (Reader reader = new InputStreamReader(engineConfig.getInputStream(), UTF_8))
         {
-            return jsonObjectMapper.readValue(reader, TransformConfig.class);
+            TransformConfig transformConfig = jsonObjectMapper.readValue(reader, TransformConfig.class);
+            setCoreVersionOnSingleStepTransformers(transformConfig, coreVersion);
+            return transformConfig;
         }
         catch (IOException e)
         {
diff --git a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/config/WebApplicationConfig.java b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/config/WebApplicationConfig.java
index 013f850e..0efd8d23 100644
--- a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/config/WebApplicationConfig.java
+++ b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/config/WebApplicationConfig.java
@@ -38,16 +38,17 @@ import org.springframework.web.client.RestTemplate;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
+import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM;
+
 @Configuration
 public class WebApplicationConfig implements WebMvcConfigurer
 {
-
     @Override
     public void addInterceptors(InterceptorRegistry registry)
     {
         registry
             .addInterceptor(transformInterceptor())
-            .addPathPatterns("/transform", "/live", "/ready");
+            .addPathPatterns(ENDPOINT_TRANSFORM, "/live", "/ready");
     }
 
     @Bean
diff --git a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/util/RequestParamMap.java b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/util/RequestParamMap.java
index 228afcf5..c6d98a03 100644
--- a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/util/RequestParamMap.java
+++ b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/util/RequestParamMap.java
@@ -2,7 +2,7 @@
  * #%L
  * Alfresco Transform Core
  * %%
- * Copyright (C) 2005 - 2020 Alfresco Software Limited
+ * Copyright (C) 2005 - 2022 Alfresco Software Limited
  * %%
  * This file is part of the Alfresco software.
  * -
@@ -26,7 +26,11 @@
  */
 package org.alfresco.transformer.util;
 
-public interface RequestParamMap
+/**
+ * Extends the list of transform options with historic request parameters or 'extra' parameters used in testing
+ * or communication in the all-in-one transformer.
+ */
+public interface RequestParamMap extends org.alfresco.transform.client.util.RequestParamMap
 {
     // This property can be sent by acs repository's legacy transformers to force a transform,
     // instead of letting this T-Engine determine it based on the request parameters.
@@ -35,43 +39,14 @@ public interface RequestParamMap
     // See ATS-731.
     @Deprecated
     String TRANSFORM_NAME_PROPERTY = "transformName";
-
     String TRANSFORM_NAME_PARAMETER = "alfresco.transform-name-parameter";
-    String FILE = "file";
 
-    String SOURCE_ENCODING          = "sourceEncoding";
+    String FILE = "file";
     String SOURCE_EXTENSION         = "sourceExtension";
     String SOURCE_MIMETYPE          = "sourceMimetype";
     String TARGET_EXTENSION         = "targetExtension";
     String TARGET_MIMETYPE          = "targetMimetype";
-    String TARGET_ENCODING          = "targetEncoding";
     String TEST_DELAY               = "testDelay";
-    String PAGE_REQUEST_PARAM       = "page";    
-    String WIDTH_REQUEST_PARAM      = "width";
-    String HEIGHT_REQUEST_PARAM     = "height";
-    String ALLOW_PDF_ENLARGEMENT    = "allowPdfEnlargement";
-    String MAINTAIN_PDF_ASPECT_RATIO = "maintainPdfAspectRatio";
-    String START_PAGE              = "startPage";
-    String END_PAGE                = "endPage";
-    String ALPHA_REMOVE            = "alphaRemove";
-    String AUTO_ORIENT             = "autoOrient";
-    String CROP_GRAVITY            = "cropGravity";
-    String CROP_WIDTH              = "cropWidth";
-    String CROP_HEIGHT             = "cropHeight";
-    String CROP_PERCENTAGE         = "cropPercentage";
-    String CROP_X_OFFSET           = "cropXOffset";
-    String CROP_Y_OFFSET           = "cropYOffset";
-    String THUMBNAIL               = "thumbnail";
-    String RESIZE_WIDTH            = "resizeWidth";
-    String RESIZE_HEIGHT           = "resizeHeight";
-    String RESIZE_PERCENTAGE       = "resizePercentage";
-    String ALLOW_ENLARGEMENT       = "allowEnlargement";
-    String MAINTAIN_ASPECT_RATIO   = "maintainAspectRatio";
-    String COMMAND_OPTIONS         = "commandOptions";
-    String TIMEOUT                 = "timeout";
-    String INCLUDE_CONTENTS        = "includeContents";
-    String NOT_EXTRACT_BOOKMARKS_TEXT = "notExtractBookmarksText";
-    String PAGE_LIMIT              = "pageLimit";
 
     // TODO PoC for FFmpeg - effectively target options (note: if we need specific source options, may need extra set)
     String TIME_OFFSET             = "timeOffset";
@@ -79,4 +54,5 @@ public interface RequestParamMap
     String FRAMES_NUM              = "framesNum";
     String FRAME_WIDTH             = "frameWidth";
     String FRAME_HEIGHT            = "frameHeight";
+
 }
diff --git a/alfresco-transformer-base/src/main/resources/templates/log.html b/alfresco-transformer-base/src/main/resources/templates/log.html
index 856c5dd1..ee973306 100644
--- a/alfresco-transformer-base/src/main/resources/templates/log.html
+++ b/alfresco-transformer-base/src/main/resources/templates/log.html
@@ -36,6 +36,7 @@
     
 
 
diff --git a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractHttpRequestTest.java b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractHttpRequestTest.java
index 1398f80d..6dd6c245 100644
--- a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractHttpRequestTest.java
+++ b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractHttpRequestTest.java
@@ -2,7 +2,7 @@
  * #%L
  * Alfresco Transform Core
  * %%
- * Copyright (C) 2005 - 2021 Alfresco Software Limited
+ * Copyright (C) 2005 - 2022 Alfresco Software Limited
  * %%
  * This file is part of the Alfresco software.
  * -
@@ -26,6 +26,8 @@
  */
 package org.alfresco.transformer;
 
+import static org.alfresco.transform.client.util.RequestParamMap.DIRECT_ACCESS_URL;
+import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.springframework.http.HttpMethod.POST;
 import static org.springframework.http.MediaType.MULTIPART_FORM_DATA;
@@ -89,9 +91,12 @@ public abstract class AbstractHttpRequestTest
     @Test
     public void noFileError()
     {
-        // Transformer name is not part of the title as this is checked by another handler
+        LinkedMultiValueMap parameters = new LinkedMultiValueMap<>();
+        parameters.add("targetExtension", ".tmp");
+
         assertTransformError(false,
-            "Required request part 'file' is not present");
+                getTransformerName() + " - Required request part 'file' is not present",
+                parameters);
     }
 
     @Test
@@ -103,10 +108,12 @@ public abstract class AbstractHttpRequestTest
     private void assertMissingParameter(String name)
     {
         assertTransformError(true,
-            getTransformerName() + " - Request parameter '" + name + "' is missing");
+            getTransformerName() + " - Request parameter '" + name + "' is missing", null);
     }
 
-    protected void assertTransformError(boolean addFile, String errorMessage)
+    protected void assertTransformError(boolean addFile,
+                                        String errorMessage,
+                                        LinkedMultiValueMap additionalParams)
     {
         LinkedMultiValueMap parameters = new LinkedMultiValueMap<>();
         if (addFile)
@@ -114,6 +121,11 @@ public abstract class AbstractHttpRequestTest
             parameters.add("file",
                 new org.springframework.core.io.ClassPathResource("quick." + getSourceExtension()));
         }
+        if (additionalParams != null)
+        {
+            parameters.addAll(additionalParams);
+        }
+
         HttpHeaders headers = new HttpHeaders();
         headers.setContentType(MULTIPART_FORM_DATA);
         HttpEntity> entity = new HttpEntity<>(parameters,
@@ -122,10 +134,25 @@ public abstract class AbstractHttpRequestTest
         sendTranformationRequest(entity, errorMessage);
     }
 
+    @Test
+    public void httpTransformRequestDirectAccessUrlNotFoundTest()
+    {
+        String directUrl = "https://expired/direct/access/url";
+
+        LinkedMultiValueMap parameters = new LinkedMultiValueMap<>();
+        parameters.add("targetExtension", ".tmp");
+        parameters.add(DIRECT_ACCESS_URL, directUrl);
+
+        assertTransformError(false,
+                getTransformerName() + " - Direct Access Url not found.",
+                parameters);
+
+    }
+
     protected void sendTranformationRequest(
         final HttpEntity> entity, final String errorMessage)
     {
-        final ResponseEntity response = restTemplate.exchange("/transform", POST, entity,
+        final ResponseEntity response = restTemplate.exchange(ENDPOINT_TRANSFORM, POST, entity,
             String.class, "");
         assertEquals(errorMessage, getErrorMessage(response.getBody()));
     }
diff --git a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractMetadataExtractsIT.java b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractMetadataExtractsIT.java
index f6cd7069..97addbaa 100644
--- a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractMetadataExtractsIT.java
+++ b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractMetadataExtractsIT.java
@@ -2,7 +2,7 @@
  * #%L
  * Alfresco Transform Core
  * %%
- * Copyright (C) 2005 - 2021 Alfresco Software Limited
+ * Copyright (C) 2005 - 2022 Alfresco Software Limited
  * %%
  * This file is part of the Alfresco software.
  * -
@@ -102,8 +102,8 @@ public abstract class AbstractMetadataExtractsIT
             jsonObjectMapper.writerWithDefaultPrettyPrinter().writeValue(actualMetadataFile, actualMetadata);
 
             Map expectedMetadata = readExpectedMetadata(metadataFilename, actualMetadataFile);
-            assertEquals(expectedMetadata, actualMetadata, 
-                "The metadata did not match the expected value. It has been saved in "+actualMetadataFile.getAbsolutePath());
+            assertEquals(expectedMetadata, actualMetadata,
+                    sourceFile+": The metadata did not match the expected value. It has been saved in "+actualMetadataFile.getAbsolutePath());
             actualMetadataFile.delete();
         }
         catch (Exception e)
diff --git a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java
index b0344ef7..9bb6fbe0 100644
--- a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java
+++ b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java
@@ -27,13 +27,21 @@
 package org.alfresco.transformer;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_TEXT_PLAIN;
+import static org.alfresco.transform.client.util.RequestParamMap.DIRECT_ACCESS_URL;
+import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM;
+import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM_CONFIG_LATEST;
+import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM_CONFIG;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
 import static org.springframework.http.HttpHeaders.ACCEPT;
 import static org.springframework.http.HttpHeaders.CONTENT_TYPE;
 import static org.springframework.http.HttpStatus.BAD_REQUEST;
+import static org.springframework.http.HttpStatus.CREATED;
 import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
 import static org.springframework.http.HttpStatus.OK;
 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@@ -52,6 +60,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 
 import org.alfresco.transform.client.model.InternalContext;
 import org.alfresco.transform.client.model.TransformReply;
@@ -65,16 +74,20 @@ import org.alfresco.transform.client.model.config.Transformer;
 import org.alfresco.transform.client.registry.TransformServiceRegistry;
 import org.alfresco.transform.router.TransformStack;
 import org.alfresco.transformer.clients.AlfrescoSharedFileStoreClient;
+import org.alfresco.transformer.model.FileRefEntity;
+import org.alfresco.transformer.model.FileRefResponse;
 import org.alfresco.transformer.probes.ProbeTestTransform;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.boot.test.mock.mockito.SpyBean;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.test.util.ReflectionTestUtils;
 import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
 import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 
@@ -103,6 +116,9 @@ public abstract class AbstractTransformerControllerTest
     @SpyBean
     protected TransformServiceRegistry transformRegistry;
 
+    @Value("${transform.core.version}")
+    private String coreVersion;
+
     protected String sourceExtension;
     protected String targetExtension;
     protected String sourceMimetype;
@@ -196,7 +212,7 @@ public abstract class AbstractTransformerControllerTest
                     " does not exist in the resources directory");
         }
         // added as part of ATS-702 to allow test resources to be read from the imported jar files to prevent test resource duplication
-        if(testFileUrl!=null)
+        if (testFileUrl!=null)
         {
             // Each use of the tempDir should result in a unique directory being used
             testFile = new File(tempDir, testFilename);
@@ -207,9 +223,39 @@ public abstract class AbstractTransformerControllerTest
     }
 
     protected MockHttpServletRequestBuilder mockMvcRequest(String url, MockMultipartFile sourceFile,
+                                                           String... params)
+    {
+        if (sourceFile == null)
+        {
+            return mockMvcRequestWithoutMockMultipartFile(url, params);
+        }
+        else
+        {
+            return mockMvcRequestWithMockMultipartFile(url, sourceFile, params);
+        }
+    }
+
+    private MockHttpServletRequestBuilder mockMvcRequestWithoutMockMultipartFile(String url,
+                                                           String... params)
+    {
+        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.multipart(ENDPOINT_TRANSFORM);
+
+        if (params.length % 2 != 0)
+        {
+            throw new IllegalArgumentException("each param should have a name and value.");
+        }
+        for (int i = 0; i < params.length; i += 2)
+        {
+            builder = builder.param(params[i], params[i + 1]);
+        }
+
+        return builder;
+    }
+
+    private MockHttpServletRequestBuilder mockMvcRequestWithMockMultipartFile(String url, MockMultipartFile sourceFile,
         String... params)
     {
-        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.multipart("/transform").file(
+        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.multipart(ENDPOINT_TRANSFORM).file(
             sourceFile);
 
         if (params.length % 2 != 0)
@@ -252,7 +298,7 @@ public abstract class AbstractTransformerControllerTest
     public void simpleTransformTest() throws Exception
     {
         mockMvc.perform(
-            mockMvcRequest("/transform", sourceFile, "targetExtension", targetExtension))
+            mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", targetExtension))
                .andExpect(status().is(OK.value()))
                .andExpect(content().bytes(expectedTargetFileBytes))
                .andExpect(header().string("Content-Disposition",
@@ -263,7 +309,7 @@ public abstract class AbstractTransformerControllerTest
     public void testDelayTest() throws Exception
     {
         long start = System.currentTimeMillis();
-        mockMvc.perform(mockMvcRequest("/transform", sourceFile, "targetExtension", targetExtension,
+        mockMvc.perform(mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", targetExtension,
             "testDelay", "400"))
                .andExpect(status().is(OK.value()))
                .andExpect(content().bytes(expectedTargetFileBytes))
@@ -278,7 +324,7 @@ public abstract class AbstractTransformerControllerTest
     @Test
     public void noTargetFileTest() throws Exception
     {
-        mockMvc.perform(mockMvcRequest("/transform", sourceFile, "targetExtension", "xxx"))
+        mockMvc.perform(mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", "xxx"))
                .andExpect(status().is(INTERNAL_SERVER_ERROR.value()));
     }
 
@@ -290,7 +336,7 @@ public abstract class AbstractTransformerControllerTest
             expectedSourceFileBytes);
 
         mockMvc.perform(
-            mockMvcRequest("/transform", sourceFile, "targetExtension", targetExtension))
+            mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", targetExtension))
                .andExpect(status().is(OK.value()))
                .andExpect(content().bytes(expectedTargetFileBytes))
                .andExpect(header().string("Content-Disposition",
@@ -305,7 +351,7 @@ public abstract class AbstractTransformerControllerTest
             expectedSourceFileBytes);
 
         mockMvc.perform(
-            mockMvcRequest("/transform", sourceFile, "targetExtension", targetExtension))
+            mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", targetExtension))
                .andExpect(status().is(OK.value()))
                .andExpect(content().bytes(expectedTargetFileBytes))
                .andExpect(header().string("Content-Disposition",
@@ -319,7 +365,7 @@ public abstract class AbstractTransformerControllerTest
         sourceFile = new MockMultipartFile("file", "abc/", sourceMimetype, expectedSourceFileBytes);
 
         mockMvc.perform(
-            mockMvcRequest("/transform", sourceFile, "targetExtension", targetExtension))
+            mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", targetExtension))
                .andExpect(status().is(BAD_REQUEST.value()))
                .andExpect(status().reason(containsString("The source filename was not supplied")));
     }
@@ -330,14 +376,14 @@ public abstract class AbstractTransformerControllerTest
         sourceFile = new MockMultipartFile("file", "", sourceMimetype, expectedSourceFileBytes);
 
         mockMvc.perform(
-            mockMvcRequest("/transform", sourceFile, "targetExtension", targetExtension))
+            mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile, "targetExtension", targetExtension))
                .andExpect(status().is(BAD_REQUEST.value()));
     }
 
     @Test
     public void noTargetExtensionTest() throws Exception
     {
-        mockMvc.perform(mockMvcRequest("/transform", sourceFile))
+        mockMvc.perform(mockMvcRequest(ENDPOINT_TRANSFORM, sourceFile))
                .andExpect(status().is(BAD_REQUEST.value()))
                .andExpect(status().reason(
                    containsString("Request parameter 'targetExtension' is missing")));
@@ -382,7 +428,7 @@ public abstract class AbstractTransformerControllerTest
         String tr = objectMapper.writeValueAsString(transformRequest);
         String transformationReplyAsString = mockMvc
             .perform(MockMvcRequestBuilders
-                .post("/transform")
+                .post(ENDPOINT_TRANSFORM)
                 .header(ACCEPT, APPLICATION_JSON_VALUE)
                 .header(CONTENT_TYPE, APPLICATION_JSON_VALUE)
                 .content(tr))
@@ -411,12 +457,38 @@ public abstract class AbstractTransformerControllerTest
         TransformConfig expectedTransformConfig = objectMapper
             .readValue(getTestFile(getEngineConfigName(), true),
                 TransformConfig.class);
+        expectedTransformConfig.getTransformers().forEach(transformer -> {
+            transformer.setCoreVersion(coreVersion);
+            transformer.getTransformOptions().add(DIRECT_ACCESS_URL);
+        });
+        expectedTransformConfig.getTransformOptions().put(DIRECT_ACCESS_URL, Set.of(new TransformOptionValue(false, DIRECT_ACCESS_URL)));
 
         ReflectionTestUtils.setField(transformRegistry, "engineConfig",
             new ClassPathResource(getEngineConfigName()));
 
         String response = mockMvc
-            .perform(MockMvcRequestBuilders.get("/transform/config"))
+            .perform(MockMvcRequestBuilders.get(ENDPOINT_TRANSFORM_CONFIG_LATEST))
+            .andExpect(status().is(OK.value()))
+            .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE))
+            .andReturn().getResponse().getContentAsString();
+
+        TransformConfig transformConfig = objectMapper.readValue(response, TransformConfig.class);
+        assertEquals(expectedTransformConfig, transformConfig);
+    }
+
+    @Test
+    // Test for case when T-Router or Repository is a version that does not expect it
+    public void testGetTransformConfigInfoExcludingCoreVersion() throws Exception
+    {
+        TransformConfig expectedTransformConfig = objectMapper
+            .readValue(getTestFile(getEngineConfigName(), true),
+                TransformConfig.class);
+
+        ReflectionTestUtils.setField(transformRegistry, "engineConfig",
+            new ClassPathResource(getEngineConfigName()));
+
+        String response = mockMvc
+            .perform(MockMvcRequestBuilders.get(ENDPOINT_TRANSFORM_CONFIG))
             .andExpect(status().is(OK.value()))
             .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE))
             .andReturn().getResponse().getContentAsString();
@@ -434,7 +506,7 @@ public abstract class AbstractTransformerControllerTest
             new ClassPathResource("engine_config_with_duplicates.json"));
 
         String response = mockMvc
-            .perform(MockMvcRequestBuilders.get("/transform/config"))
+            .perform(MockMvcRequestBuilders.get(ENDPOINT_TRANSFORM_CONFIG))
             .andExpect(status().is(OK.value()))
             .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE))
             .andReturn().getResponse().getContentAsString();
@@ -461,7 +533,7 @@ public abstract class AbstractTransformerControllerTest
             new ClassPathResource("engine_config_incomplete.json"));
 
         String response = mockMvc
-            .perform(MockMvcRequestBuilders.get("/transform/config"))
+            .perform(MockMvcRequestBuilders.get(ENDPOINT_TRANSFORM_CONFIG))
             .andExpect(status().is(OK.value()))
             .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE))
             .andReturn().getResponse().getContentAsString();
@@ -484,7 +556,7 @@ public abstract class AbstractTransformerControllerTest
             new ClassPathResource("engine_config_no_transform_options.json"));
 
         String response = mockMvc
-            .perform(MockMvcRequestBuilders.get("/transform/config"))
+            .perform(MockMvcRequestBuilders.get(ENDPOINT_TRANSFORM_CONFIG))
             .andExpect(status().is(OK.value()))
             .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE))
             .andReturn().getResponse().getContentAsString();
@@ -540,4 +612,64 @@ public abstract class AbstractTransformerControllerTest
         transformer.setSupportedSourceAndTargetList(supportedSourceAndTargetList);
         return transformer;
     }
+
+    @Test
+    public void queueTransformRequestUsingDirectAccessUrlTest() throws Exception
+    {
+        // Files
+        String sourceFileRef = UUID.randomUUID().toString();
+        File sourceFile = getTestFile("quick." + sourceExtension, true);
+        String targetFileRef = UUID.randomUUID().toString();
+
+        TransformRequest transformRequest = createTransformRequest(sourceFileRef, sourceFile);
+        Map transformRequestOptions = transformRequest.getTransformRequestOptions();
+
+        String directUrl = "file://" + sourceFile.toPath();
+
+        transformRequestOptions.put(DIRECT_ACCESS_URL, directUrl);
+        transformRequest.setTransformRequestOptions(transformRequestOptions);
+
+        when(alfrescoSharedFileStoreClient.saveFile(any()))
+                .thenReturn(new FileRefResponse(new FileRefEntity(targetFileRef)));
+
+        // Update the Transformation Request with any specific params before sending it
+        updateTransformRequestWithSpecificOptions(transformRequest);
+
+        // Serialize and call the transformer
+        String tr = objectMapper.writeValueAsString(transformRequest);
+        String transformationReplyAsString = mockMvc
+                .perform(MockMvcRequestBuilders
+                        .post("/transform")
+                        .header(ACCEPT, APPLICATION_JSON_VALUE)
+                        .header(CONTENT_TYPE, APPLICATION_JSON_VALUE)
+                        .content(tr))
+                .andExpect(status().is(CREATED.value()))
+                .andReturn().getResponse().getContentAsString();
+
+        TransformReply transformReply = objectMapper.readValue(transformationReplyAsString,
+                TransformReply.class);
+
+        // Assert the reply
+        assertEquals(transformRequest.getRequestId(), transformReply.getRequestId());
+        assertEquals(transformRequest.getClientData(), transformReply.getClientData());
+        assertEquals(transformRequest.getSchema(), transformReply.getSchema());
+    }
+
+    @Test
+    public void httpTransformRequestUsingDirectAccessUrlTest() throws Exception
+    {
+        File dauSourceFile = getTestFile("quick." + sourceExtension, true);
+        String directUrl = "file://" + dauSourceFile.toPath();
+
+        ResultActions resultActions = mockMvc.perform(
+                mockMvcRequest(ENDPOINT_TRANSFORM, null)
+                        .param("targetExtension", targetExtension)
+                        .param(DIRECT_ACCESS_URL, directUrl))
+                .andExpect(status().is(OK.value()));
+
+        if (expectedTargetFileBytes != null)
+        {
+            resultActions.andExpect(content().bytes(expectedTargetFileBytes));
+        }
+    }
 }
diff --git a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/EngineClient.java b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/EngineClient.java
index cdb83032..78a2c7cc 100644
--- a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/EngineClient.java
+++ b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/EngineClient.java
@@ -1,5 +1,5 @@
 /*
- *  Copyright 2015-2019 Alfresco Software, Ltd.  All rights reserved.
+ *  Copyright 2015-2022 Alfresco Software, Ltd.  All rights reserved.
  *
  *  License rights for this program may be obtained from Alfresco Software, Ltd.
  *  pursuant to a written agreement and any use of this program without such an
@@ -8,6 +8,7 @@
 package org.alfresco.transformer;
 
 import static java.util.Collections.emptyMap;
+import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM;
 import static org.springframework.http.MediaType.MULTIPART_FORM_DATA;
 
 import java.util.Map;
@@ -63,6 +64,6 @@ public class EngineClient
 
         final HttpEntity> entity = new HttpEntity<>(body, headers);
 
-        return REST_TEMPLATE.postForEntity(engineUrl + "/transform", entity, Resource.class);
+        return REST_TEMPLATE.postForEntity(engineUrl + ENDPOINT_TRANSFORM, entity, Resource.class);
     }
 }
diff --git a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/TestFileInfo.java b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/TestFileInfo.java
index 331213a9..15b8fb70 100644
--- a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/TestFileInfo.java
+++ b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/TestFileInfo.java
@@ -76,4 +76,10 @@ public class TestFileInfo
     {
         return new TestFileInfo(mimeType, extension, path, false);
     }
+
+    @Override
+    public String toString()
+    {
+        return path;
+    }
 }
diff --git a/docs/build-and-release.md b/docs/build-and-release.md
index cbc6f14f..951d5b54 100644
--- a/docs/build-and-release.md
+++ b/docs/build-and-release.md
@@ -4,9 +4,8 @@ The `.travis.yml` config file can be found in the root of the repository.
 
 
 ## Stages and Jobs
-1. **Build**: Java build with unit tests, integration tests and WhiteSource scan.
-2. **Release**: Release with artifact deployment to Nexus and AWS Staging bucket.
-3. **Company Release**: Artifact deployment to AWS Release bucket.
+1. **Build**: Java build with unit and integration tests.
+2. **Release**: Release with artifact deployment to Nexus, DockerHub and Quay.io.
 
 
 ## Branches
@@ -27,10 +26,6 @@ Travis CI builds differ by branch:
   of the release jobs (no artifacts will be published until the PR is actually merged).
 * `ATS-*` branches:
   - regular builds which include only the _Build_ and _Tests_ stages;
-* `company_release` branch:
-  - builds that include the _Company Release_ stage only.
-  - the `company_release` branch should be used for one-off events; once used (a build 
-  completes), the branch should be deleted.
 
 All other branches are ignored.
 
@@ -67,13 +62,3 @@ been generated by steps (2) and (3), then an empty commit should be created - e.
 **Create a merge commit** (_Merge pull request_) or **Squash and merge** options are used, you 
 need to ensure that the _commit message_ contains the `[trigger release]` tag (sub-string).
 
-## Company Release process steps & info
-Prerequisites:
-  - The **Release** stage is complete - i.e. the release commit is tagged and the release 
-  artifacts are deployed on Nexus.
-
-Steps:
-1. Create a new `company_release` branch from the `master` / `SP/*`/ `HF/*` branch. This job uses 
-the latest branch git tag to identify the version that must be uploaded to the S3 release bucket.
-2. Wait for a green build on the branch.
-3. Delete local and remote `company_release` branch.
diff --git a/pom.xml b/pom.xml
index b904d46a..4e16f8e3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,13 +3,14 @@
     4.0.0
     org.alfresco
     alfresco-transform-core
-    2.5.5-A2-SNAPSHOT
+    2.5.7-A5-SNAPSHOT 
     pom
 
     
         org.springframework.boot
         spring-boot-starter-parent
-        2.6.2
+        2.6.3
+        
     
 
     
@@ -18,23 +19,22 @@
         11
 
         latest
-        2.0.24
+        2.0.25
         3.0.1.12
         ${project.version}
-        1.4.5
-        5.16.3
+        1.4.11
+        5.16.4
         2.13.1
         ${dependency.jackson.version}
         4.13.2
         3.5.0
-        1.26
+        2.2.1
         4.1.2
         1.4
 
         false
     
 
-
     
         
             full-build
@@ -124,6 +124,7 @@
             
         
     
+
     
         scm:git:https://github.com/Alfresco/alfresco-transform-core.git
         scm:git:https://github.com/Alfresco/alfresco-transform-core.git
@@ -231,7 +232,7 @@
             
                 com.github.junrar
                 junrar
-                7.4.0
+                7.4.1
             
             
                 org.apache.commons
@@ -259,6 +260,15 @@
         
     
 
+    
+    
+        
+            org.apache.tomcat.embed
+            tomcat-embed-core
+            9.0.58
+        
+    
+
     
         
             alfresco-public-snapshots
@@ -275,7 +285,6 @@
             
                 org.apache.maven.plugins
                 maven-javadoc-plugin
-                3.3.1
                 
                     none
                 
@@ -301,6 +310,7 @@
         
             
                 
+                    org.apache.maven.plugins
                     maven-release-plugin
                     2.5.3
                     
@@ -323,10 +333,15 @@
                                 add-third-party
                                 download-licenses
                             
+                            generate-resources
                             
-                                true
+                                true
                                 provided,test
                                 org.alfresco
+                                true
+                                https://raw.githubusercontent.com/Alfresco/third-party-license-overrides/master/includedLicenses.txt
+                                https://raw.githubusercontent.com/Alfresco/third-party-license-overrides/master/licenseMerges.txt
+                                https://raw.githubusercontent.com/Alfresco/third-party-license-overrides/master/override-THIRD-PARTY.properties
                             
                         
                         
@@ -377,15 +392,6 @@
                             ${project.build.directory}
                         
                     
-                    
-                        
-                            default-test
-                            
-                                test
-                            
-                            test
-                        
-                    
                 
                 
                     org.apache.maven.plugins
@@ -394,43 +400,12 @@
                         1
                         true
                     
-                    
-                        
-                            
-                                integration-test
-                                verify
-                            
-                        
-                    
-                
-                
-                    io.fabric8
-                    fabric8-maven-plugin
-                    4.4.0
                 
                 
                     io.fabric8
                     docker-maven-plugin
-                    0.38.0
-                    true
-                    
-                        
-                            before-integration-tests
-                            pre-integration-test
-                            
-                                stop
-                                start
-                            
-                        
-                        
-                            after-integration-tests
-                            post-integration-test
-                            
-                                stop
-                            
-                        
-                    
-                
+                    0.39.0
+                 
             
         
     
file *
Direct Url
sourceMimetype *
targetExtension *
targetMimetype *