diff --git a/pom.xml b/pom.xml
index c8b54bcedf..7023bad3b3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,8 +51,8 @@
7.0.2
5.23.0
5.23.0
- 5.1.8-A.1
- 4.1.8-A.1
+ 5.1.8-A.2
+ 4.1.8-A.2
7.1
1.0.2
diff --git a/repository/src/main/java/org/alfresco/repo/content/transform/AbstractLocalTransform.java b/repository/src/main/java/org/alfresco/repo/content/transform/AbstractLocalTransform.java
index 79b171420c..269b4524f8 100644
--- a/repository/src/main/java/org/alfresco/repo/content/transform/AbstractLocalTransform.java
+++ b/repository/src/main/java/org/alfresco/repo/content/transform/AbstractLocalTransform.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2019 - 2022 Alfresco Software Limited
+ * Copyright (C) 2019 - 2025 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -39,6 +39,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.transform.config.TransformOption;
import org.alfresco.transform.config.TransformOptionGroup;
import org.alfresco.transform.config.TransformOptionValue;
@@ -52,6 +53,7 @@ public abstract class AbstractLocalTransform implements LocalTransform
protected final String name;
protected final MimetypeService mimetypeService;
+ protected final NodeService nodeService;
protected final TransformerDebug transformerDebug;
protected final Set transformsTransformOptionNames = new HashSet<>();
@@ -65,7 +67,8 @@ public abstract class AbstractLocalTransform implements LocalTransform
MimetypeService mimetypeService, boolean strictMimeTypeCheck,
Map> strictMimetypeExceptions, boolean retryTransformOnDifferentMimeType,
Set transformsTransformOptions,
- LocalTransformServiceRegistry localTransformServiceRegistry)
+ LocalTransformServiceRegistry localTransformServiceRegistry,
+ NodeService nodeService)
{
this.name = name;
this.transformerDebug = transformerDebug;
@@ -74,6 +77,7 @@ public abstract class AbstractLocalTransform implements LocalTransform
this.strictMimetypeExceptions = strictMimetypeExceptions;
this.retryTransformOnDifferentMimeType = retryTransformOnDifferentMimeType;
this.localTransformServiceRegistry = localTransformServiceRegistry;
+ this.nodeService = nodeService;
addOptionNames(transformsTransformOptionNames, transformsTransformOptions);
}
diff --git a/repository/src/main/java/org/alfresco/repo/content/transform/LocalFailoverTransform.java b/repository/src/main/java/org/alfresco/repo/content/transform/LocalFailoverTransform.java
index cee13bc330..f4ec8642cb 100644
--- a/repository/src/main/java/org/alfresco/repo/content/transform/LocalFailoverTransform.java
+++ b/repository/src/main/java/org/alfresco/repo/content/transform/LocalFailoverTransform.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2019 - 2022 Alfresco Software Limited
+ * Copyright (C) 2019 - 2025 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -37,6 +37,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.transform.config.TransformOption;
import org.alfresco.util.TempFileProvider;
@@ -54,10 +55,10 @@ public class LocalFailoverTransform extends AbstractLocalTransform
Map> strictMimetypeExceptions,
boolean retryTransformOnDifferentMimeType,
Set transformsTransformOptions,
- LocalTransformServiceRegistry localTransformServiceRegistry)
+ LocalTransformServiceRegistry localTransformServiceRegistry, NodeService nodeService)
{
super(name, transformerDebug, mimetypeService, strictMimeTypeCheck, strictMimetypeExceptions,
- retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry);
+ retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry, nodeService);
}
@Override
diff --git a/repository/src/main/java/org/alfresco/repo/content/transform/LocalPassThroughTransform.java b/repository/src/main/java/org/alfresco/repo/content/transform/LocalPassThroughTransform.java
index e45c6bc5a0..17ca9731ae 100644
--- a/repository/src/main/java/org/alfresco/repo/content/transform/LocalPassThroughTransform.java
+++ b/repository/src/main/java/org/alfresco/repo/content/transform/LocalPassThroughTransform.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2005 - 2022 Alfresco Software Limited
+ * Copyright (C) 2005 - 2025 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -41,6 +41,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.transform.config.SupportedSourceAndTarget;
import org.alfresco.transform.config.TransformOption;
import org.alfresco.transform.config.Transformer;
@@ -63,10 +64,10 @@ public class LocalPassThroughTransform extends AbstractLocalTransform
Map> strictMimetypeExceptions,
boolean retryTransformOnDifferentMimeType,
Set transformsTransformOptions,
- LocalTransformServiceRegistry localTransformServiceRegistry)
+ LocalTransformServiceRegistry localTransformServiceRegistry, NodeService nodeService)
{
super(name, transformerDebug, mimetypeService, strictMimeTypeCheck, strictMimetypeExceptions,
- retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry);
+ retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry, nodeService);
}
public static Transformer getConfig(List mimetypes)
diff --git a/repository/src/main/java/org/alfresco/repo/content/transform/LocalPipelineTransform.java b/repository/src/main/java/org/alfresco/repo/content/transform/LocalPipelineTransform.java
index 7a71c94fcc..0ada671e95 100644
--- a/repository/src/main/java/org/alfresco/repo/content/transform/LocalPipelineTransform.java
+++ b/repository/src/main/java/org/alfresco/repo/content/transform/LocalPipelineTransform.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2005 - 2022 Alfresco Software Limited
+ * Copyright (C) 2005 - 2025 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -38,6 +38,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.transform.config.TransformOption;
import org.alfresco.util.TempFileProvider;
@@ -61,10 +62,10 @@ public class LocalPipelineTransform extends AbstractLocalTransform
Map> strictMimetypeExceptions,
boolean retryTransformOnDifferentMimeType,
Set transformsTransformOptions,
- LocalTransformServiceRegistry localTransformServiceRegistry)
+ LocalTransformServiceRegistry localTransformServiceRegistry, NodeService nodeService)
{
super(name, transformerDebug, mimetypeService, strictMimeTypeCheck, strictMimetypeExceptions,
- retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry);
+ retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry, nodeService);
}
@Override
diff --git a/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformImpl.java b/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformImpl.java
index a6f4c6eba2..eba4418474 100644
--- a/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformImpl.java
+++ b/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformImpl.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2005 - 2022 Alfresco Software Limited
+ * Copyright (C) 2005 - 2025 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -26,19 +26,24 @@
package org.alfresco.repo.content.transform;
import static org.alfresco.repo.rendition2.RenditionDefinition2.SOURCE_ENCODING;
+import static org.alfresco.repo.rendition2.RenditionDefinition2.SOURCE_FILENAME;
import static org.alfresco.repo.rendition2.RenditionDefinition2.SOURCE_NODE_REF;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
+
import org.alfresco.httpclient.HttpClientConfig;
+import org.alfresco.model.ContentModel;
import org.alfresco.repo.content.metadata.AsynchronousExtractor;
import org.alfresco.repo.rendition2.RenditionDefinition2;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.transform.config.TransformOption;
import org.alfresco.util.Pair;
@@ -60,10 +65,11 @@ public class LocalTransformImpl extends AbstractLocalTransform
Set transformsTransformOptions,
LocalTransformServiceRegistry localTransformServiceRegistry, String baseUrl,
HttpClientConfig httpClientConfig,
+ NodeService nodeService,
int startupRetryPeriodSeconds)
{
super(name, transformerDebug, mimetypeService, strictMimeTypeCheck, strictMimetypeExceptions,
- retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry);
+ retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry, nodeService);
remoteTransformerClient = new RemoteTransformerClient(name, baseUrl, httpClientConfig);
remoteTransformerClient.setStartupRetryPeriodSeconds(startupRetryPeriodSeconds);
@@ -155,6 +161,17 @@ public class LocalTransformImpl extends AbstractLocalTransform
transformOptions.put(SOURCE_NODE_REF, sourceNodeRef.toString());
}
+ String filename = null;
+ if (sourceNodeRef != null && nodeService.exists(sourceNodeRef))
+ {
+ filename = (String) nodeService.getProperty(sourceNodeRef, ContentModel.PROP_NAME);
+ }
+
+ if (StringUtils.isNotEmpty(filename))
+ {
+ transformOptions.put(SOURCE_FILENAME, filename);
+ }
+
// Build an array of option names and values and extract the timeout.
long timeoutMs = 0;
int nonOptions = transformOptions.containsKey(RenditionDefinition2.TIMEOUT) ? 1 : 0;
diff --git a/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformServiceRegistry.java b/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformServiceRegistry.java
index 2d278db113..1f7c3a7e0f 100644
--- a/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformServiceRegistry.java
+++ b/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformServiceRegistry.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2019 - 2023 Alfresco Software Limited
+ * Copyright (C) 2019 - 2025 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -43,6 +43,7 @@ import org.springframework.beans.factory.InitializingBean;
import org.alfresco.httpclient.HttpClientConfig;
import org.alfresco.service.cmr.repository.MimetypeService;
+import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.transform.config.CoreFunction;
import org.alfresco.transform.config.TransformOption;
import org.alfresco.transform.config.TransformOptionGroup;
@@ -71,6 +72,7 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl
private Map localTransforms = new HashMap<>();
}
+ private NodeService nodeService;
private String pipelineConfigDir;
private Properties properties;
private MimetypeService mimetypeService;
@@ -85,6 +87,11 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl
return httpClientConfig;
}
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
public void setHttpClientConfig(HttpClientConfig httpClientConfig)
{
this.httpClientConfig = httpClientConfig;
@@ -139,6 +146,7 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl
PropertyCheck.mandatory(this, "mimetypeService", mimetypeService);
PropertyCheck.mandatory(this, "properties", properties);
PropertyCheck.mandatory(this, "transformerDebug", transformerDebug);
+ PropertyCheck.mandatory(this, "nodeService", nodeService);
strictMimetypeExceptions = getStrictMimetypeExceptions();
super.afterPropertiesSet();
}
@@ -193,14 +201,14 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl
{
localTransform = new LocalPassThroughTransform(name, transformerDebug, mimetypeService,
strictMimeTypeCheck, strictMimetypeExceptions, retryTransformOnDifferentMimeType,
- transformsTransformOptions, this);
+ transformsTransformOptions, this, nodeService);
}
else if (!isPipeline && !isFailover)
{
int startupRetryPeriodSeconds = getStartupRetryPeriodSeconds(name);
localTransform = new LocalTransformImpl(name, transformerDebug, mimetypeService,
strictMimeTypeCheck, strictMimetypeExceptions, retryTransformOnDifferentMimeType,
- transformsTransformOptions, this, baseUrl, httpClientConfig,
+ transformsTransformOptions, this, baseUrl, httpClientConfig, nodeService,
startupRetryPeriodSeconds);
}
else if (isPipeline)
@@ -215,7 +223,7 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl
localTransform = new LocalPipelineTransform(name, transformerDebug, mimetypeService,
strictMimeTypeCheck, strictMimetypeExceptions, retryTransformOnDifferentMimeType,
- transformsTransformOptions, this);
+ transformsTransformOptions, this, nodeService);
for (int i = 0; i < transformerCount; i++)
{
TransformStep intermediateTransformerStep = pipeline.get(i);
@@ -264,7 +272,7 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl
localTransform = new LocalFailoverTransform(name, transformerDebug, mimetypeService,
strictMimeTypeCheck, strictMimetypeExceptions, retryTransformOnDifferentMimeType,
- transformsTransformOptions, this);
+ transformsTransformOptions, this, nodeService);
for (String transformerStepName : failover)
{
diff --git a/repository/src/main/java/org/alfresco/repo/rendition2/RenditionDefinition2.java b/repository/src/main/java/org/alfresco/repo/rendition2/RenditionDefinition2.java
index 6614ebc533..95ec69a4fe 100644
--- a/repository/src/main/java/org/alfresco/repo/rendition2/RenditionDefinition2.java
+++ b/repository/src/main/java/org/alfresco/repo/rendition2/RenditionDefinition2.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2005 - 2018 Alfresco Software Limited
+ * Copyright (C) 2005 - 2025 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -35,6 +35,7 @@ import org.alfresco.api.AlfrescoPublicApi;
* @author adavis
*/
@AlfrescoPublicApi
+@SuppressWarnings({"PMD.UnnecessaryFullyQualifiedName", "PMD.UnnecessaryModifier"})
public interface RenditionDefinition2
{
public static final String TIMEOUT = "timeout";
@@ -106,6 +107,11 @@ public interface RenditionDefinition2
*/
public static final String SOURCE_NODE_REF = "sourceNodeRef";
+ /**
+ * The Source File Name is automatically added to the Transform Options if not specified and the transformer knows about it.
+ */
+ public static final String SOURCE_FILENAME = "sourceFilename";
+
/**
* The encoding of a Target Node is automatically added to the Transform Options if not specified and the transformer knows about it.
*/
diff --git a/repository/src/main/resources/alfresco/rendition-services2-context.xml b/repository/src/main/resources/alfresco/rendition-services2-context.xml
index b207f15dc7..42f3313104 100644
--- a/repository/src/main/resources/alfresco/rendition-services2-context.xml
+++ b/repository/src/main/resources/alfresco/rendition-services2-context.xml
@@ -128,6 +128,7 @@
+
diff --git a/repository/src/test/java/org/alfresco/transform/registry/LocalTransformServiceRegistryConfigTest.java b/repository/src/test/java/org/alfresco/transform/registry/LocalTransformServiceRegistryConfigTest.java
index 394331aea1..7b8b7d9cc8 100644
--- a/repository/src/test/java/org/alfresco/transform/registry/LocalTransformServiceRegistryConfigTest.java
+++ b/repository/src/test/java/org/alfresco/transform/registry/LocalTransformServiceRegistryConfigTest.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2005 - 2023 Alfresco Software Limited
+ * Copyright (C) 2005 - 2025 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -64,6 +64,7 @@ import org.alfresco.repo.content.transform.LocalPipelineTransform;
import org.alfresco.repo.content.transform.LocalTransformImpl;
import org.alfresco.repo.content.transform.LocalTransformServiceRegistry;
import org.alfresco.repo.content.transform.TransformerDebug;
+import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.transform.config.SupportedSourceAndTarget;
import org.alfresco.transform.config.TransformConfig;
import org.alfresco.transform.config.TransformOption;
@@ -205,6 +206,9 @@ public class LocalTransformServiceRegistryConfigTest extends TransformRegistryMo
@Mock
private MimetypeMap mimetypeMap;
+ @Mock
+ private NodeService nodeService;
+
private Map> imagemagickSupportedTransformation;
private Map> tikaSupportedTransformation;
private Map> pdfRendererSupportedTransformation;
@@ -232,6 +236,7 @@ public class LocalTransformServiceRegistryConfigTest extends TransformRegistryMo
registry.setProperties(properties);
registry.setTransformerDebug(transformerDebug);
registry.setMimetypeService(mimetypeMap);
+ registry.setNodeService(nodeService);
registry.setPipelineConfigDir("");
registry.setCronExpression(null); // just read it once
registry.afterPropertiesSet();
diff --git a/repository/src/test/resources/test/alfresco/test-renditions-context.xml b/repository/src/test/resources/test/alfresco/test-renditions-context.xml
index 990b71bf97..eea831a8f7 100644
--- a/repository/src/test/resources/test/alfresco/test-renditions-context.xml
+++ b/repository/src/test/resources/test/alfresco/test-renditions-context.xml
@@ -28,6 +28,7 @@
+
\ No newline at end of file