diff --git a/engines/base/pom.xml b/engines/base/pom.xml
index f885916f..337ea78e 100644
--- a/engines/base/pom.xml
+++ b/engines/base/pom.xml
@@ -32,6 +32,10 @@
org.springframework.boot
spring-boot-starter-aop
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
org.springframework.retry
spring-retry
diff --git a/engines/base/src/main/java/org/alfresco/transform/base/clients/AlfrescoSharedFileStoreClient.java b/engines/base/src/main/java/org/alfresco/transform/base/sfs/SharedFileStoreClient.java
similarity index 69%
rename from engines/base/src/main/java/org/alfresco/transform/base/clients/AlfrescoSharedFileStoreClient.java
rename to engines/base/src/main/java/org/alfresco/transform/base/sfs/SharedFileStoreClient.java
index 408d9323..20c960f8 100644
--- a/engines/base/src/main/java/org/alfresco/transform/base/clients/AlfrescoSharedFileStoreClient.java
+++ b/engines/base/src/main/java/org/alfresco/transform/base/sfs/SharedFileStoreClient.java
@@ -24,15 +24,20 @@
* along with Alfresco. If not, see .
* #L%
*/
-package org.alfresco.transform.base.clients;
+package org.alfresco.transform.base.sfs;
+import static org.springframework.http.HttpHeaders.ACCEPT;
+import static org.springframework.http.HttpHeaders.CONTENT_TYPE;
import static org.springframework.http.HttpMethod.POST;
+import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA;
import java.io.File;
import org.alfresco.transform.common.TransformException;
import org.alfresco.transform.base.model.FileRefResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
@@ -40,23 +45,40 @@ import org.springframework.core.io.Resource;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
+import org.springframework.web.reactive.function.client.WebClient;
+
+import javax.annotation.PostConstruct;
/**
* Simple Rest client that call Alfresco Shared File Store
*/
@Service
-public class AlfrescoSharedFileStoreClient
+public class SharedFileStoreClient
{
+ private static final Logger logger = LoggerFactory.getLogger(SharedFileStoreClient.class);
+
@Value("${fileStoreUrl}")
- private String fileStoreUrl;
+ private String url;
@Autowired
private RestTemplate restTemplate;
+ private WebClient client;
+
+ @PostConstruct
+ public void init()
+ {
+ client = WebClient.builder().baseUrl(url.endsWith("/") ? url : url + "/")
+ .defaultHeader(CONTENT_TYPE, APPLICATION_JSON_VALUE)
+ .defaultHeader(ACCEPT, APPLICATION_JSON_VALUE)
+ .build();
+ }
+
/**
* Retrieves a file from Shared File Store using given file reference
*
@@ -67,7 +89,7 @@ public class AlfrescoSharedFileStoreClient
{
try
{
- return restTemplate.getForEntity(fileStoreUrl + "/" + fileRef,
+ return restTemplate.getForEntity(url + "/" + fileRef,
org.springframework.core.io.Resource.class);
}
catch (HttpClientErrorException e)
@@ -94,7 +116,7 @@ public class AlfrescoSharedFileStoreClient
HttpEntity> requestEntity = new HttpEntity<>(map,
headers);
ResponseEntity responseEntity = restTemplate
- .exchange(fileStoreUrl, POST, requestEntity, FileRefResponse.class);
+ .exchange(url, POST, requestEntity, FileRefResponse.class);
return responseEntity.getBody();
}
catch (HttpClientErrorException e)
@@ -102,4 +124,20 @@ public class AlfrescoSharedFileStoreClient
throw new TransformException(e.getStatusCode(), e.getMessage(), e);
}
}
+
+ @Async
+ public void asyncDelete(final String fileReference)
+ {
+ try
+ {
+ logger.debug(" Deleting intermediate file {}", fileReference);
+
+ client.delete().uri(fileReference)
+ .exchange().block();
+ }
+ catch (Exception e)
+ {
+ logger.error("Failed to delete intermediate file {}: {}", fileReference, e.getMessage());
+ }
+ }
}
diff --git a/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformHandler.java b/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformHandler.java
index ad281ade..b4ebc876 100644
--- a/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformHandler.java
+++ b/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformHandler.java
@@ -27,7 +27,7 @@
package org.alfresco.transform.base.transform;
import org.alfresco.transform.base.TransformEngine;
-import org.alfresco.transform.base.clients.AlfrescoSharedFileStoreClient;
+import org.alfresco.transform.base.sfs.SharedFileStoreClient;
import org.alfresco.transform.base.messaging.TransformReplySender;
import org.alfresco.transform.base.model.FileRefResponse;
import org.alfresco.transform.base.probes.ProbeTransform;
@@ -92,7 +92,7 @@ public class TransformHandler
@Autowired(required = false)
private CustomTransformers customTransformers;
@Autowired
- private AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient;
+ private SharedFileStoreClient alfrescoSharedFileStoreClient;
@Autowired
private TransformRequestValidator transformRequestValidator;
@Autowired
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/AbstractBaseTest.java b/engines/base/src/test/java/org/alfresco/transform/base/AbstractBaseTest.java
index af3b4dfa..b938676f 100644
--- a/engines/base/src/test/java/org/alfresco/transform/base/AbstractBaseTest.java
+++ b/engines/base/src/test/java/org/alfresco/transform/base/AbstractBaseTest.java
@@ -27,7 +27,7 @@
package org.alfresco.transform.base;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.alfresco.transform.base.clients.AlfrescoSharedFileStoreClient;
+import org.alfresco.transform.base.sfs.SharedFileStoreClient;
import org.alfresco.transform.base.executors.CommandExecutor;
import org.alfresco.transform.base.executors.RuntimeExec;
import org.alfresco.transform.base.model.FileRefEntity;
@@ -101,7 +101,7 @@ public abstract class AbstractBaseTest
protected ObjectMapper objectMapper;
@MockBean
- protected AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient;
+ protected SharedFileStoreClient sharedFileStoreClient;
@SpyBean
protected TransformServiceRegistry transformRegistry;
@@ -393,7 +393,7 @@ public abstract class AbstractBaseTest
transformRequestOptions.put(DIRECT_ACCESS_URL, directUrl);
- when(alfrescoSharedFileStoreClient.saveFile(any()))
+ when(sharedFileStoreClient.saveFile(any()))
.thenReturn(new FileRefResponse(new FileRefEntity(targetFileRef)));
// Update the Transformation Request with any specific params before sending it
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/TransformControllerTest.java b/engines/base/src/test/java/org/alfresco/transform/base/TransformControllerTest.java
index 76db3a9b..d22a7ece 100644
--- a/engines/base/src/test/java/org/alfresco/transform/base/TransformControllerTest.java
+++ b/engines/base/src/test/java/org/alfresco/transform/base/TransformControllerTest.java
@@ -33,7 +33,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.ImmutableMap;
-import org.alfresco.transform.base.clients.AlfrescoSharedFileStoreClient;
+import org.alfresco.transform.base.sfs.SharedFileStoreClient;
import org.alfresco.transform.base.fakes.FakeTransformEngineWithTwoCustomTransformers;
import org.alfresco.transform.base.fakes.FakeTransformerPdf2Png;
import org.alfresco.transform.base.fakes.FakeTransformerTxT2Pdf;
@@ -127,7 +127,7 @@ public class TransformControllerTest
@TempDir
public File tempDir;
@MockBean
- protected AlfrescoSharedFileStoreClient fakeSfsClient;
+ protected SharedFileStoreClient fakeSfsClient;
static void resetProbeForTesting(TransformController transformController)
{
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/transform/FragmentHandlerTest.java b/engines/base/src/test/java/org/alfresco/transform/base/transform/FragmentHandlerTest.java
index 74bcda1e..13fa2437 100644
--- a/engines/base/src/test/java/org/alfresco/transform/base/transform/FragmentHandlerTest.java
+++ b/engines/base/src/test/java/org/alfresco/transform/base/transform/FragmentHandlerTest.java
@@ -27,7 +27,7 @@
package org.alfresco.transform.base.transform;
import com.google.common.collect.ImmutableList;
-import org.alfresco.transform.base.clients.AlfrescoSharedFileStoreClient;
+import org.alfresco.transform.base.sfs.SharedFileStoreClient;
import org.alfresco.transform.base.fakes.FakeTransformEngineWithFragments;
import org.alfresco.transform.base.fakes.FakeTransformerFragments;
import org.alfresco.transform.base.messaging.TransformReplySender;
@@ -87,7 +87,7 @@ public class FragmentHandlerTest
private MockMvc mockMvc;
@MockBean
- protected AlfrescoSharedFileStoreClient fakeSfsClient;
+ protected SharedFileStoreClient fakeSfsClient;
@MockBean
private TransformReplySender transformReplySender;
@MockBean
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/transform/TransformHandlerTest.java b/engines/base/src/test/java/org/alfresco/transform/base/transform/TransformHandlerTest.java
deleted file mode 100644
index 072e57f1..00000000
--- a/engines/base/src/test/java/org/alfresco/transform/base/transform/TransformHandlerTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * #%L
- * Alfresco Transform Core
- * %%
- * Copyright (C) 2022 - 2022 Alfresco Software Limited
- * %%
- * This file is part of the Alfresco software.
- * -
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- * -
- * Alfresco 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.
- * -
- * Alfresco 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 Lesser General Public License for more details.
- * -
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- * #L%
- */
-package org.alfresco.transform.base.transform;
-
-import org.alfresco.transform.base.TransformControllerTest;
-
-/**
- * Tests {@link TransformHandler}, {@link ProcessHandler} and {@link TransformManagerImpl}.
- * Note {@link TransformControllerTest} already provides 'good path' coverage.
- */
-public class TransformHandlerTest
-{
-// @Test
-// public void httpTransformRequestUsingDirectAccessUrlTest() throws Exception
-// }
-}
diff --git a/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTest.java b/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTest.java
index 87d9b3e4..5a1412cd 100644
--- a/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTest.java
+++ b/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTest.java
@@ -367,8 +367,8 @@ public class ImageMagickTest extends AbstractBaseTest
ResponseEntity response = new ResponseEntity<>(new FileSystemResource(
sourceFile), headers, OK);
- when(alfrescoSharedFileStoreClient.retrieveFile(sourceFileRef)).thenReturn(response);
- when(alfrescoSharedFileStoreClient.saveFile(any()))
+ when(sharedFileStoreClient.retrieveFile(sourceFileRef)).thenReturn(response);
+ when(sharedFileStoreClient.saveFile(any()))
.thenReturn(new FileRefResponse(new FileRefEntity(targetFileRef)));
when(mockExecutionResult.getExitValue()).thenReturn(0);
diff --git a/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTest.java b/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTest.java
index 9ea8f619..fcea3eb0 100644
--- a/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTest.java
+++ b/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTest.java
@@ -52,10 +52,8 @@ import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
-import java.util.Map;
import java.util.UUID;
-import org.alfresco.transform.base.CustomTransformer;
import org.alfresco.transform.base.registry.CustomTransformers;
import org.alfresco.transform.client.model.TransformReply;
import org.alfresco.transform.client.model.TransformRequest;
@@ -213,8 +211,8 @@ public class LibreOfficeTest extends AbstractBaseTest
ResponseEntity response = new ResponseEntity<>(new FileSystemResource(
sourceFile), headers, OK);
- when(alfrescoSharedFileStoreClient.retrieveFile(sourceFileRef)).thenReturn(response);
- when(alfrescoSharedFileStoreClient.saveFile(any()))
+ when(sharedFileStoreClient.retrieveFile(sourceFileRef)).thenReturn(response);
+ when(sharedFileStoreClient.saveFile(any()))
.thenReturn(new FileRefResponse(new FileRefEntity(targetFileRef)));
when(mockExecutionResult.getExitValue()).thenReturn(0);
diff --git a/engines/pdfrenderer/src/test/java/org/alfresco/transform/pdfrenderer/PdfRendererTest.java b/engines/pdfrenderer/src/test/java/org/alfresco/transform/pdfrenderer/PdfRendererTest.java
index d4b00986..570662f5 100644
--- a/engines/pdfrenderer/src/test/java/org/alfresco/transform/pdfrenderer/PdfRendererTest.java
+++ b/engines/pdfrenderer/src/test/java/org/alfresco/transform/pdfrenderer/PdfRendererTest.java
@@ -274,8 +274,8 @@ public class PdfRendererTest extends AbstractBaseTest
ResponseEntity response = new ResponseEntity<>(new FileSystemResource(
sourceFile), headers, OK);
- when(alfrescoSharedFileStoreClient.retrieveFile(sourceFileRef)).thenReturn(response);
- when(alfrescoSharedFileStoreClient.saveFile(any()))
+ when(sharedFileStoreClient.retrieveFile(sourceFileRef)).thenReturn(response);
+ when(sharedFileStoreClient.saveFile(any()))
.thenReturn(new FileRefResponse(new FileRefEntity(targetFileRef)));
when(mockExecutionResult.getExitValue()).thenReturn(0);
diff --git a/engines/tika/src/test/java/org/alfresco/transform/tika/TikaTest.java b/engines/tika/src/test/java/org/alfresco/transform/tika/TikaTest.java
index beee8321..59464120 100644
--- a/engines/tika/src/test/java/org/alfresco/transform/tika/TikaTest.java
+++ b/engines/tika/src/test/java/org/alfresco/transform/tika/TikaTest.java
@@ -450,8 +450,8 @@ public class TikaTest extends AbstractBaseTest
ResponseEntity response = new ResponseEntity<>(new FileSystemResource(
sourceFile), headers, OK);
- when(alfrescoSharedFileStoreClient.retrieveFile(sourceFileRef)).thenReturn(response);
- when(alfrescoSharedFileStoreClient.saveFile(any()))
+ when(sharedFileStoreClient.retrieveFile(sourceFileRef)).thenReturn(response);
+ when(sharedFileStoreClient.saveFile(any()))
.thenReturn(new FileRefResponse(new FileRefEntity(targetFileRef)));
when(mockExecutionResult.getExitValue()).thenReturn(0);