diff --git a/data-model/src/main/java/org/alfresco/service/cmr/repository/DirectAccessUrl.java b/data-model/src/main/java/org/alfresco/service/cmr/repository/DirectAccessUrl.java index 365f441bb2..b03d5c3501 100644 --- a/data-model/src/main/java/org/alfresco/service/cmr/repository/DirectAccessUrl.java +++ b/data-model/src/main/java/org/alfresco/service/cmr/repository/DirectAccessUrl.java @@ -39,6 +39,7 @@ public class DirectAccessUrl implements Serializable private String contentUrl; private Date expiryTime; private boolean attachment; + private String fileName; public String getContentUrl() { @@ -70,18 +71,28 @@ public class DirectAccessUrl implements Serializable this.attachment = attachment; } + public String getFileName() + { + return fileName; + } + + public void setFileName(String fileName) + { + this.fileName = fileName; + } + @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; DirectAccessUrl that = (DirectAccessUrl) obj; - return attachment == that.attachment && Objects.equals(contentUrl, + return Objects.equals(fileName, that.fileName) && attachment == that.attachment && Objects.equals(contentUrl, that.contentUrl) && Objects.equals(expiryTime, that.expiryTime); } @Override public int hashCode() { - return Objects.hash(contentUrl, expiryTime, attachment); + return Objects.hash(contentUrl, expiryTime, attachment, fileName); } } diff --git a/repository/src/main/java/org/alfresco/repo/content/ContentServiceImpl.java b/repository/src/main/java/org/alfresco/repo/content/ContentServiceImpl.java index c8a30146e3..395595f65b 100644 --- a/repository/src/main/java/org/alfresco/repo/content/ContentServiceImpl.java +++ b/repository/src/main/java/org/alfresco/repo/content/ContentServiceImpl.java @@ -655,6 +655,9 @@ public class ContentServiceImpl implements ContentService, ApplicationContextAwa try { directAccessUrl = store.requestContentDirectUrl(contentUrl, attachment, fileName, contentMimetype, validFor); + if (directAccessUrl != null) { + directAccessUrl.setFileName(fileName); + } } catch (UnsupportedOperationException ex) { diff --git a/repository/src/test/java/org/alfresco/repo/content/ContentServiceImplUnitTest.java b/repository/src/test/java/org/alfresco/repo/content/ContentServiceImplUnitTest.java index 57fdb5b420..faa07fafab 100644 --- a/repository/src/test/java/org/alfresco/repo/content/ContentServiceImplUnitTest.java +++ b/repository/src/test/java/org/alfresco/repo/content/ContentServiceImplUnitTest.java @@ -166,34 +166,46 @@ public class ContentServiceImplUnitTest @Test public void testRequestContentDirectUrl_StoreRequestContentDirectUrlIsCalledWithFileNameOverride() { + DirectAccessUrl mockDirectAccessUrl = new DirectAccessUrl(); + mockDirectAccessUrl.setAttachment(true); + mockDirectAccessUrl.setContentUrl(SOME_CONTENT_URL); final String fileNameOverride = "fileNameOverride.txt"; setupSystemWideDirectAccessConfig(ENABLED); when(mockContentStore.isContentDirectUrlEnabled()).thenReturn(ENABLED); + when(mockContentStore.requestContentDirectUrl(anyString(), eq(true), eq(fileNameOverride), anyString(), anyLong())).thenReturn(mockDirectAccessUrl); DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(NODE_REF, PROP_CONTENT_QNAME, true, 20L, fileNameOverride); - assertNull(directAccessUrl); + assertEquals("fileName was not set properly on the DirectAccessUrl response", fileNameOverride, directAccessUrl.getFileName()); verify(mockContentStore, times(1)).requestContentDirectUrl(anyString(), eq(true), eq(fileNameOverride), anyString(), anyLong()); } @Test public void testRequestContentDirectUrl_StoreRequestContentDirectUrlIsCalledWithNodeNamePropertyWhenFileNameOverrideIsNull() { + DirectAccessUrl mockDirectAccessUrl = new DirectAccessUrl(); + mockDirectAccessUrl.setAttachment(true); + mockDirectAccessUrl.setContentUrl(SOME_CONTENT_URL); setupSystemWideDirectAccessConfig(ENABLED); when(mockContentStore.isContentDirectUrlEnabled()).thenReturn(ENABLED); + when(mockContentStore.requestContentDirectUrl(anyString(), eq(true), eq(SOME_FILE_NAME), anyString(), anyLong())).thenReturn(mockDirectAccessUrl); DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(NODE_REF, PROP_CONTENT_QNAME, true, 20L, null); - assertNull(directAccessUrl); + assertEquals("fileName was not set properly on the DirectAccessUrl response", SOME_FILE_NAME, directAccessUrl.getFileName()); verify(mockContentStore, times(1)).requestContentDirectUrl(anyString(), eq(true), eq(SOME_FILE_NAME), anyString(), anyLong()); } @Test public void testRequestContentDirectUrl_StoreRequestContentDirectUrlIsCalledWithNodeNamePropertyWhenFileNameOverrideIsEmpty() { + DirectAccessUrl mockDirectAccessUrl = new DirectAccessUrl(); + mockDirectAccessUrl.setAttachment(true); + mockDirectAccessUrl.setContentUrl(SOME_CONTENT_URL); setupSystemWideDirectAccessConfig(ENABLED); when(mockContentStore.isContentDirectUrlEnabled()).thenReturn(ENABLED); + when(mockContentStore.requestContentDirectUrl(anyString(), eq(true), eq(SOME_FILE_NAME), anyString(), anyLong())).thenReturn(mockDirectAccessUrl); DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(NODE_REF, PROP_CONTENT_QNAME, true, 20L, ""); - assertNull(directAccessUrl); + assertEquals("fileName was not set properly on the DirectAccessUrl response", SOME_FILE_NAME, directAccessUrl.getFileName()); verify(mockContentStore, times(1)).requestContentDirectUrl(anyString(), eq(true), eq(SOME_FILE_NAME), anyString(), anyLong()); }