Skip to content
This repository was archived by the owner on Aug 13, 2020. It is now read-only.

Commit 1476156

Browse files
CRC-5397 - Request for PDF file of given original fileId.
1 parent d07e6ac commit 1476156

File tree

3 files changed

+65
-8
lines changed

3 files changed

+65
-8
lines changed

file/file-alfresco/src/main/java/uk/gov/justice/services/file/alfresco/requester/AlfrescoFileRequester.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ public class AlfrescoFileRequester implements FileRequester {
2828
@GlobalValue(key = "alfrescoWorkspacePath", defaultValue = "/service/api/node/content/workspace/SpacesStore/")
2929
String alfrescoWorkspacePath;
3030

31+
@Inject
32+
@GlobalValue(key = "alfrescoPdfContentWorkspacePath", defaultValue = "/service/api/requestpdf/workspace/SpacesStore/")
33+
String alfrescoPdfContentWorkspacePath;
34+
3135
@Inject
3236
@GlobalValue(key = "alfrescoReadUser")
3337
String alfrescoReadUser;
@@ -48,8 +52,27 @@ public Optional<InputStream> request(final String fileId, final String fileMimeT
4852
}
4953
}
5054

55+
@Override
56+
public Optional<InputStream> requestPdf(final String fileId, final String fileName) {
57+
final String mimeType = "application/pdf";
58+
try {
59+
return ofNullable(restClient.getAsInputStream(alfrescoPdfUriOf(fileId, fileName),
60+
valueOf(mimeType), headersWithUserId(alfrescoReadUser)));
61+
} catch (final NotFoundException nfe) {
62+
return empty();
63+
} catch (final ProcessingException | InternalServerErrorException ex) {
64+
throw new FileOperationException(format("Error fetching %s from Alfresco with fileId = %s",
65+
fileName, fileId), ex);
66+
}
67+
}
68+
5169
private String alfrescoUriOf(final String fileId, final String fileName) {
5270
return format("%s%s/content/%s", alfrescoWorkspacePath, fileId, fileName);
5371
}
5472

73+
private String alfrescoPdfUriOf(final String fileId, final String fileName) {
74+
return format("%s%s/%s", alfrescoPdfContentWorkspacePath, fileId, fileName);
75+
76+
}
77+
5578
}

file/file-alfresco/src/test/java/uk/gov/justice/services/file/alfresco/requester/AlfrescoFileRequesterIT.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,24 @@
1212
import static java.util.UUID.randomUUID;
1313
import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
1414
import static org.apache.openejb.util.NetworkUtil.getNextAvailablePort;
15+
import static org.hamcrest.MatcherAssert.assertThat;
1516
import static org.hamcrest.core.Is.is;
16-
import static org.junit.Assert.assertEquals;
17-
import static org.junit.Assert.assertFalse;
18-
import static org.junit.Assert.assertThat;
1917
import static org.junit.Assert.assertTrue;
18+
import static org.junit.Assert.assertFalse;
2019
import static org.junit.Assert.fail;
20+
import static org.junit.Assert.assertEquals;
2121
import static uk.gov.justice.services.test.utils.common.reflection.ReflectionUtils.setField;
2222

2323
import uk.gov.justice.services.file.alfresco.common.AlfrescoRestClient;
2424
import uk.gov.justice.services.file.api.FileOperationException;
25+
import uk.gov.justice.services.test.utils.core.rest.RestClient;
2526

2627
import java.io.IOException;
2728
import java.io.InputStream;
2829
import java.util.Optional;
2930

3031
import javax.ws.rs.ProcessingException;
32+
import javax.ws.rs.core.MultivaluedMap;
3133

3234
import com.github.tomakehurst.wiremock.junit.WireMockRule;
3335
import org.apache.commons.io.IOUtils;
@@ -42,11 +44,17 @@ public class AlfrescoFileRequesterIT {
4244
private static final String UNUSED_MIME_TYPE = "text/plain";
4345
private static final String UNUSED_FILE_NAME = "file.txt";
4446
private static final String ALFRESCO_WORKSPACE_PATH = "/service/api/node/content/workspace/SpacesStore/";
47+
private static final String ALFRESCO_WORKSPACE_PDF_TRANSFORMATION_PATH = "/service/api/requestpdf/workspace/SpacesStore/";
48+
4549

4650
private static int PORT = getNextAvailablePort();
4751

4852
private static AlfrescoFileRequester fileRequester;
4953

54+
private RestClient restClient;
55+
56+
private MultivaluedMap<String, Object> headers;
57+
5058
@Rule
5159
public WireMockRule wireMock = new WireMockRule(PORT);
5260

@@ -66,7 +74,6 @@ public void shouldRequestFileFromAlfrescoInAttachmentMode() throws Exception {
6674
.withHeader("cppuid", equalTo("user1234")));
6775
}
6876

69-
7077
@Test
7178
public void shouldReturnResponseFromAlfresco() throws IOException {
7279
final String fileId = randomUUID().toString();
@@ -86,6 +93,24 @@ public void shouldReturnResponseFromAlfresco() throws IOException {
8693

8794
}
8895

96+
@Test
97+
public void shouldReturnPdfContentFromAlfresco() throws IOException {
98+
final String fileId = randomUUID().toString();
99+
final String mimeType = "application/pdf";
100+
final String fileName = "file123.txt";
101+
final String fileContent = "abcd";
102+
103+
stubFor(get(urlMatching(format("/alfresco%s%s/%s", ALFRESCO_WORKSPACE_PDF_TRANSFORMATION_PATH, fileId, fileName)))
104+
.withHeader("cppuid", equalTo("user1234"))
105+
.willReturn(aResponse().withHeader("Content-Type", mimeType).withBody(fileContent)));
106+
107+
final Optional<InputStream> inputStream = fileRequester.requestPdf(fileId, fileName);
108+
assertTrue(inputStream.isPresent());
109+
110+
assertThat(IOUtils.toString(inputStream.get()), is(fileContent));
111+
}
112+
113+
89114
@Test
90115
public void shouldReturnOptionalEmptyFromAlfrescoIfFileIsNotFound() {
91116
final String fileId = randomUUID().toString();
@@ -98,7 +123,6 @@ public void shouldReturnOptionalEmptyFromAlfrescoIfFileIsNotFound() {
98123
assertFalse(fileRequester.request(fileId, mimeType, fileName).isPresent());
99124
}
100125

101-
102126
@Test
103127
public void shouldThrowAnExceptionIfAlfrescoServiceReturnedError() {
104128
final String fileId = randomUUID().toString();
@@ -115,7 +139,6 @@ public void shouldThrowAnExceptionIfAlfrescoServiceReturnedError() {
115139
}
116140
}
117141

118-
119142
@Test
120143
public void shouldThrowAnExceptionIfAlfrescoServiceIsUnavailable() {
121144
final String fileId = randomUUID().toString();
@@ -131,6 +154,7 @@ public void shouldThrowAnExceptionIfAlfrescoServiceIsUnavailable() {
131154
private static AlfrescoFileRequester alfrescoFileRequesterWith(final String basePath) {
132155
AlfrescoFileRequester fileRequester = new AlfrescoFileRequester();
133156
fileRequester.alfrescoWorkspacePath = ALFRESCO_WORKSPACE_PATH;
157+
fileRequester.alfrescoPdfContentWorkspacePath = ALFRESCO_WORKSPACE_PDF_TRANSFORMATION_PATH;
134158
fileRequester.alfrescoReadUser = "user1234";
135159
fileRequester.restClient = new AlfrescoRestClient();
136160
setField(fileRequester.restClient, "alfrescoBaseUri", basePath);

file/file-api/src/main/java/uk/gov/justice/services/file/api/requester/FileRequester.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,22 @@ public interface FileRequester {
1010

1111
/**
1212
* Requests a file from the FileService.
13-
* @param fileId - the unique id of the file.
13+
*
14+
* @param fileId - the unique id of the file.
1415
* @param fileMimeType - mime-type of the file.
15-
* @param fileName - name of the file.
16+
* @param fileName - name of the file.
1617
* @return streamed content of the file.
1718
*/
1819
Optional<InputStream> request(final String fileId, final String fileMimeType, final String fileName);
1920

21+
/**
22+
* Requests for stream the pdf transformation of the file that given by its fileId from the FileService.
23+
*
24+
* @param fileId - the unique id of the file.
25+
* @param fileName - name of the file.
26+
* @return streamed content of the file.
27+
*/
28+
Optional<InputStream> requestPdf(final String fileId, final String fileName);
29+
2030
}
2131

0 commit comments

Comments
 (0)