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);