From e914880097f1fc57c1f3b21666ef3b238e53aed8 Mon Sep 17 00:00:00 2001 From: Gerard Olenski <31597546+gerardolenski@users.noreply.github.com> Date: Mon, 13 Apr 2026 10:33:24 +0200 Subject: [PATCH] ACS-11498 Revert MNT-25462 (ACS-10652) and [release] 5.4.1-A.4 [skip tests] (#1231) --- deprecated/alfresco-transformer-base/pom.xml | 2 +- engines/aio/pom.xml | 2 +- engines/base/pom.xml | 2 +- engines/example/pom.xml | 2 +- engines/imagemagick/pom.xml | 2 +- engines/libreoffice/pom.xml | 2 +- engines/misc/pom.xml | 2 +- engines/pdfrenderer/pom.xml | 2 +- engines/tika/pom.xml | 2 +- model/pom.xml | 2 +- .../registry/CombinedTransformConfig.java | 152 ++++-------------- .../transform/registry/DeferredOverride.java | 49 ------ .../registry/CombinedTransformConfigTest.java | 21 --- .../OverrideTransformConfigTests.java | 80 +-------- pom.xml | 2 +- 15 files changed, 44 insertions(+), 280 deletions(-) delete mode 100644 model/src/main/java/org/alfresco/transform/registry/DeferredOverride.java diff --git a/deprecated/alfresco-transformer-base/pom.xml b/deprecated/alfresco-transformer-base/pom.xml index 2b90bad8..4f3220f6 100644 --- a/deprecated/alfresco-transformer-base/pom.xml +++ b/deprecated/alfresco-transformer-base/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT ../../pom.xml diff --git a/engines/aio/pom.xml b/engines/aio/pom.xml index d2c687bf..9fcdee14 100644 --- a/engines/aio/pom.xml +++ b/engines/aio/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT ../../pom.xml diff --git a/engines/base/pom.xml b/engines/base/pom.xml index 048b639c..be50182e 100644 --- a/engines/base/pom.xml +++ b/engines/base/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT ../../pom.xml diff --git a/engines/example/pom.xml b/engines/example/pom.xml index 4fc7908d..9f9f3587 100644 --- a/engines/example/pom.xml +++ b/engines/example/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT ../../pom.xml diff --git a/engines/imagemagick/pom.xml b/engines/imagemagick/pom.xml index 1e7d0dc3..b3f693cc 100644 --- a/engines/imagemagick/pom.xml +++ b/engines/imagemagick/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT ../../pom.xml diff --git a/engines/libreoffice/pom.xml b/engines/libreoffice/pom.xml index 2a405117..0240cd46 100644 --- a/engines/libreoffice/pom.xml +++ b/engines/libreoffice/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT ../../pom.xml diff --git a/engines/misc/pom.xml b/engines/misc/pom.xml index 01536ff9..944110f9 100644 --- a/engines/misc/pom.xml +++ b/engines/misc/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT ../../pom.xml diff --git a/engines/pdfrenderer/pom.xml b/engines/pdfrenderer/pom.xml index dd94f301..8a543773 100644 --- a/engines/pdfrenderer/pom.xml +++ b/engines/pdfrenderer/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT ../../pom.xml diff --git a/engines/tika/pom.xml b/engines/tika/pom.xml index 0215ad0c..3d958a10 100644 --- a/engines/tika/pom.xml +++ b/engines/tika/pom.xml @@ -7,7 +7,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT ../../pom.xml diff --git a/model/pom.xml b/model/pom.xml index 7c696133..93f266f4 100644 --- a/model/pom.xml +++ b/model/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT diff --git a/model/src/main/java/org/alfresco/transform/registry/CombinedTransformConfig.java b/model/src/main/java/org/alfresco/transform/registry/CombinedTransformConfig.java index 3e4373b8..56128bcb 100644 --- a/model/src/main/java/org/alfresco/transform/registry/CombinedTransformConfig.java +++ b/model/src/main/java/org/alfresco/transform/registry/CombinedTransformConfig.java @@ -30,14 +30,11 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Set; import java.util.StringJoiner; import java.util.function.Function; import java.util.stream.Collectors; -import org.springframework.util.CollectionUtils; - import org.alfresco.transform.config.AddSupported; import org.alfresco.transform.config.OverrideSupported; import org.alfresco.transform.config.RemoveSupported; @@ -74,7 +71,6 @@ public class CombinedTransformConfig private final Map> combinedTransformOptions = new HashMap<>(); private List> combinedTransformers = new ArrayList<>(); private final Defaults defaults = new Defaults(); - private final List deferredOverrides = new ArrayList<>(); public static void combineAndRegister(TransformConfig transformConfig, String readFrom, String baseUrl, AbstractTransformRegistry registry) @@ -90,7 +86,6 @@ public class CombinedTransformConfig combinedTransformOptions.clear(); combinedTransformers.clear(); defaults.clear(); - deferredOverrides.clear(); } public void addTransformConfig(List> transformConfigList, AbstractTransformRegistry registry) @@ -106,7 +101,7 @@ public class CombinedTransformConfig removeSupported(transformConfig.getRemoveSupported(), readFrom, registry); addSupported(transformConfig.getAddSupported(), readFrom, registry); - storeOverridesForDeferredProcessing(transformConfig.getOverrideSupported(), readFrom); + overrideSupported(transformConfig.getOverrideSupported(), readFrom, registry); // Add transform options and transformers from the new transformConfig transformConfig.getTransformOptions().forEach(combinedTransformOptions::put); @@ -223,77 +218,23 @@ public class CombinedTransformConfig })); } - /** - * Store overrides for deferred processing. Overrides are applied AFTER wildcard generation in the combineTransformerConfig() method, ensuring that pipeline transformers have their supportedSourceAndTargetList populated before overrides are applied. - * - * @param overrideSupportedSet - * the set of overrides to store - * @param readFrom - * where the overrides were read from - */ - private void storeOverridesForDeferredProcessing(Set overrideSupportedSet, String readFrom) + private void overrideSupported(Set overrideSupportedSet, String readFrom, AbstractTransformRegistry registry) { - if (!CollectionUtils.isEmpty(overrideSupportedSet)) - { - overrideSupportedSet.forEach(override -> deferredOverrides.add(new DeferredOverride(override, readFrom))); - } - } - - /** - * Apply all stored overrides AFTER wildcard generation. This ensures that pipeline and failover transformers have their supportedSourceAndTargetList populated before overrides are applied. - * - * @param registry - * used for logging - */ - private void applyDeferredOverrides(AbstractTransformRegistry registry) - { - if (CollectionUtils.isEmpty(deferredOverrides)) - { - return; - } - - Map> leftoverBySource = new HashMap<>(); - for (DeferredOverride deferredOverride : deferredOverrides) - { - OverrideSupported override = deferredOverride.getOverrideSupported(); - String readFrom = deferredOverride.getReadFrom(); - - List matchedTransformers = combinedTransformers.stream() - .map(Origin::get) - .filter(transformer -> transformer.getTransformerName().equals(override.getTransformerName())) - .collect(Collectors.toList()); - if (matchedTransformers.isEmpty()) - { - leftoverBySource.computeIfAbsent(readFrom, k -> new HashSet<>()).add(override); - continue; - } - if (matchedTransformers.size() > 1) - { - throw new IllegalStateException("Multiple transformers found for " + readFrom + " with name: " + override.getTransformerName() + ". This should not be possible as removeInvalidTransformers should have removed duplicates."); - } - - Set supportedList = matchedTransformers.get(0).getSupportedSourceAndTargetList(); - Optional existingSupportedOpt = supportedList.stream() - .filter(supported -> supported.getSourceMediaType().equals(override.getSourceMediaType()) && - supported.getTargetMediaType().equals(override.getTargetMediaType())) - .findFirst(); - - if (existingSupportedOpt.isPresent()) - { - SupportedSourceAndTarget existingSupported = existingSupportedOpt.get(); - supportedList.remove(existingSupported); - existingSupported.setMaxSourceSizeBytes(override.getMaxSourceSizeBytes()); - existingSupported.setPriority(override.getPriority()); - supportedList.add(existingSupported); - } - else - { - leftoverBySource.computeIfAbsent(readFrom, k -> new HashSet<>()).add(override); - } - } - // Warn about overrides that didn't match anything - leftoverBySource.forEach((readFrom, leftOvers) -> logWarn(leftOvers, readFrom, registry, "overrideSupported")); - deferredOverrides.clear(); + processSupported(overrideSupportedSet, readFrom, registry, "overrideSupported", + (leftOver, overrideSupported) -> combinedTransformers.stream().map(Origin::get).filter(transformer -> transformer.getTransformerName().equals(overrideSupported.getTransformerName())).forEach(transformerWithName -> { + Set supportedSourceAndTargetList = transformerWithName.getSupportedSourceAndTargetList(); + SupportedSourceAndTarget existingSupported = getExistingSupported( + supportedSourceAndTargetList, + overrideSupported.getSourceMediaType(), overrideSupported.getTargetMediaType()); + if (existingSupported != null) + { + supportedSourceAndTargetList.remove(existingSupported); + existingSupported.setMaxSourceSizeBytes(overrideSupported.getMaxSourceSizeBytes()); + existingSupported.setPriority(overrideSupported.getPriority()); + supportedSourceAndTargetList.add(existingSupported); + leftOver.remove(overrideSupported); + } + })); } private SupportedSourceAndTarget getExistingSupported(Set supportedSourceAndTargetList, @@ -309,9 +250,8 @@ public class CombinedTransformConfig { removeInvalidTransformers(registry); sortTransformers(registry); - addWildcardSupportedSourceAndTarget(registry); applyDefaults(); - applyDeferredOverrides(registry); + addWildcardSupportedSourceAndTarget(registry); removePipelinesWithUnsupportedTransforms(registry); setCoreVersionOnCombinedMultiStepTransformers(); } @@ -644,51 +584,28 @@ public class CombinedTransformConfig } /** - * Applies priority and size defaults to a SupportedSourceAndTarget entry. - */ - private SupportedSourceAndTarget applyDefaultsToSupportedSourceAndTarget( - SupportedSourceAndTarget supportedSourceAndTarget, - String transformerName, - Set supportedDefaultTransformerNames, - Defaults defaults) - { - Integer priority = supportedSourceAndTarget.getPriority(); - Long maxSourceSizeBytes = supportedSourceAndTarget.getMaxSourceSizeBytes(); - String sourceMediaType = supportedSourceAndTarget.getSourceMediaType(); - if (defaults.valuesUnset(priority, maxSourceSizeBytes)) - { - supportedSourceAndTarget.setPriority(defaults.getPriority(transformerName, sourceMediaType, priority)); - supportedSourceAndTarget.setMaxSourceSizeBytes(defaults.getMaxSourceSizeBytes(transformerName, sourceMediaType, maxSourceSizeBytes)); - } - if (supportedDefaultTransformerNames.contains(transformerName)) - { - supportedSourceAndTarget.setPriority(defaults.getPriority(transformerName, sourceMediaType, null)); - supportedSourceAndTarget.setMaxSourceSizeBytes(defaults.getMaxSourceSizeBytes(transformerName, sourceMediaType, null)); - } - return supportedSourceAndTarget; - } - - /** - * Applies priority and size defaults to supported source/target entries. - * - * Previously, this method was called before {@link #addWildcardSupportedSourceAndTarget(AbstractTransformRegistry)} because it relied on the priority value. As of MNT-25426, it is now called after wildcard generation, ensuring that pipeline transformers also receive the correct defaults. + * Applies priority and size defaults. Must be called before {@link #addWildcardSupportedSourceAndTarget(AbstractTransformRegistry)} as it uses the priority value. */ private void applyDefaults() { - Set supportedDefaultTransformerNames = defaults.getSupportedDefaults() - .stream() - .map(SupportedDefaults::getTransformerName) - .collect(toSet()); - combinedTransformers.stream() .map(Origin::get) .forEach(transformer -> { transformer.setSupportedSourceAndTargetList( - transformer.getSupportedSourceAndTargetList() - .stream() - .map(supportedSourceAndTarget -> applyDefaultsToSupportedSourceAndTarget(supportedSourceAndTarget, transformer.getTransformerName(), supportedDefaultTransformerNames, defaults)) - .collect(toSet())); + transformer.getSupportedSourceAndTargetList().stream().map(supportedSourceAndTarget -> { + Integer priority = supportedSourceAndTarget.getPriority(); + Long maxSourceSizeBytes = supportedSourceAndTarget.getMaxSourceSizeBytes(); + if (defaults.valuesUnset(priority, maxSourceSizeBytes)) + { + String transformerName = transformer.getTransformerName(); + String sourceMediaType = supportedSourceAndTarget.getSourceMediaType(); + supportedSourceAndTarget.setPriority(defaults.getPriority(transformerName, sourceMediaType, priority)); + supportedSourceAndTarget.setMaxSourceSizeBytes(defaults.getMaxSourceSizeBytes(transformerName, sourceMediaType, maxSourceSizeBytes)); + } + return supportedSourceAndTarget; + }).collect(toSet())); }); + defaults.clear(); } @@ -948,9 +865,4 @@ public class CombinedTransformConfig { return combinedTransformers.stream().collect(Collectors.toMap(origin -> origin.get().getTransformerName(), origin -> origin)); } - - List getDeferredOverrides() - { - return deferredOverrides; - } } diff --git a/model/src/main/java/org/alfresco/transform/registry/DeferredOverride.java b/model/src/main/java/org/alfresco/transform/registry/DeferredOverride.java deleted file mode 100644 index bcf1eb74..00000000 --- a/model/src/main/java/org/alfresco/transform/registry/DeferredOverride.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * #%L - * Alfresco Transform Model - * %% - * Copyright (C) 2026 Alfresco Software Limited - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * . - * #L% - */ -package org.alfresco.transform.registry; - -import org.alfresco.transform.config.OverrideSupported; - -/** - * Holds override information for deferred processing after wildcard generation. - */ -class DeferredOverride -{ - private final OverrideSupported overrideSupported; - private final String readFrom; - - public DeferredOverride(OverrideSupported overrideSupported, String readFrom) - { - this.overrideSupported = overrideSupported; - this.readFrom = readFrom; - } - - public OverrideSupported getOverrideSupported() - { - return overrideSupported; - } - - public String getReadFrom() - { - return readFrom; - } -} diff --git a/model/src/test/java/org/alfresco/transform/registry/CombinedTransformConfigTest.java b/model/src/test/java/org/alfresco/transform/registry/CombinedTransformConfigTest.java index c037d206..2f6b019c 100644 --- a/model/src/test/java/org/alfresco/transform/registry/CombinedTransformConfigTest.java +++ b/model/src/test/java/org/alfresco/transform/registry/CombinedTransformConfigTest.java @@ -39,7 +39,6 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import org.junit.jupiter.api.Test; -import org.alfresco.transform.config.OverrideSupported; import org.alfresco.transform.config.SupportedSourceAndTarget; import org.alfresco.transform.config.TransformConfig; import org.alfresco.transform.config.TransformStep; @@ -301,26 +300,6 @@ public class CombinedTransformConfigTest assertEquals(0, config.buildTransformConfig().getTransformOptions().size()); } - @Test - public void testClearAlsoRemovesDeferredOverrides() - { - // Add a config with an overrideSupported entry to populate deferredOverrides - TransformConfig overrideConfig = TransformConfig.builder() - .withOverrideSupported(ImmutableSet.of( - OverrideSupported.builder() - .withTransformerName("pipeline1") - .withSourceMediaType("mimetype/a") - .withTargetMediaType("mimetype/b") - .withPriority(99) - .build())) - .build(); - config.addTransformConfig(overrideConfig, READ_FROM_B, BASE_URL_B, registry); - - assertEquals(1, config.getDeferredOverrides().size()); - config.clear(); - assertEquals(0, config.getDeferredOverrides().size()); - } - @Test public void testCombineTransformerConfigNoOp() { diff --git a/model/src/test/java/org/alfresco/transform/registry/OverrideTransformConfigTests.java b/model/src/test/java/org/alfresco/transform/registry/OverrideTransformConfigTests.java index 7e0c9a91..14050189 100644 --- a/model/src/test/java/org/alfresco/transform/registry/OverrideTransformConfigTests.java +++ b/model/src/test/java/org/alfresco/transform/registry/OverrideTransformConfigTests.java @@ -25,7 +25,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.HashSet; -import java.util.List; import java.util.Set; import com.google.common.collect.ImmutableList; @@ -38,7 +37,6 @@ import org.alfresco.transform.config.RemoveSupported; import org.alfresco.transform.config.SupportedDefaults; import org.alfresco.transform.config.SupportedSourceAndTarget; import org.alfresco.transform.config.TransformConfig; -import org.alfresco.transform.config.TransformStep; import org.alfresco.transform.config.Transformer; /** @@ -433,83 +431,7 @@ public class OverrideTransformConfigTests "{\"sourceMediaType\": \"mimetype/x\", \"targetMediaType\": \"mimetype/y\", \"maxSourceSizeBytes\": \"200\"}" + "]"; - config.addTransformConfig(secondConfig, READ_FROM_B, BASE_URL_B, registry); - config.combineTransformerConfig(registry); - - assertEquals(1, registry.warnMessages.size()); - assertEquals(expectedWarnMessage, registry.warnMessages.get(0)); - - Set supportedSourceAndTargetList = config.buildTransformConfig().getTransformers().get(0).getSupportedSourceAndTargetList(); - assertEquals(expectedSupported, supportedSourceAndTargetList); - assertEquals(expectedToString, supportedSourceAndTargetList.toString()); - } - - @Test - public void testDeferredOverrideForPipelineTransformer() - { - // Add step transformers first - Transformer step1 = Transformer.builder() - .withTransformerName("step1") - .withSupportedSourceAndTargetList(Set.of( - SupportedSourceAndTarget.builder() - .withSourceMediaType("mimetype/document") - .withTargetMediaType("mimetype/pdf") - .build())) - .build(); - - Transformer step2 = Transformer.builder() - .withTransformerName("step2") - .withSupportedSourceAndTargetList(Set.of( - SupportedSourceAndTarget.builder() - .withSourceMediaType("mimetype/pdf") - .withTargetMediaType("mimetype/image") - .build())) - .build(); - - // Add pipeline transformer - Transformer pipelineTransformer = Transformer.builder() - .withTransformerName("pipeline1") - .withTransformerPipeline(List.of( - new TransformStep("step1", "mimetype/pdf"), - new TransformStep("step2", null))) - .build(); - - TransformConfig pipelineConfig = TransformConfig.builder() - .withTransformers(List.of(step1, step2, pipelineTransformer)) - .build(); - - config.addTransformConfig(pipelineConfig, READ_FROM_A, BASE_URL_A, registry); - - // Add override for pipeline transformer - OverrideSupported override = OverrideSupported.builder() - .withTransformerName("pipeline1") - .withSourceMediaType("mimetype/document") - .withTargetMediaType("mimetype/image") - .withPriority(40) - .build(); - - TransformConfig overrideConfig = TransformConfig.builder() - .withOverrideSupported(Set.of(override)) - .build(); - - config.addTransformConfig(overrideConfig, READ_FROM_B, BASE_URL_B, registry); - - // Combine configs - config.combineTransformerConfig(registry); - - // Assert override applied - List transformers = config.buildTransformConfig().getTransformers(); - assertTrue(!transformers.isEmpty(), "Pipeline transformer should exist after valid setup"); - Set supportedList = transformers.stream() - .filter(t -> "pipeline1".equals(t.getTransformerName())) - .findFirst() - .orElseThrow() - .getSupportedSourceAndTargetList(); - - boolean found = supportedList.stream().anyMatch(s -> "mimetype/document".equals(s.getSourceMediaType()) && - "mimetype/image".equals(s.getTargetMediaType()) && - s.getPriority() == 40); - assertTrue(found, "Deferred override for pipeline transformer should be applied after wildcard generation"); + addTransformConfig(secondConfig, expectedWarnMessage, expectedSupported, expectedToString); } private void addTransformConfig_A2B_X2Y_100_23() diff --git a/pom.xml b/pom.xml index 0548f215..2a46f0b8 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.alfresco alfresco-transform-core - 5.4.2-A.3-SNAPSHOT + 5.4.1-A.4-SNAPSHOT Alfresco Transform Core pom