mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
File name param for direct acccess url requests
Adds optional file name parameter for all direct access url requests https://github.com/Alfresco/alfresco-community-repo/issues/2064
This commit is contained in:
@@ -111,7 +111,7 @@ public interface DeletedNodes
|
|||||||
*/
|
*/
|
||||||
default DirectAccessUrl requestContentDirectUrl(String archivedId, String renditionId, boolean attachment)
|
default DirectAccessUrl requestContentDirectUrl(String archivedId, String renditionId, boolean attachment)
|
||||||
{
|
{
|
||||||
return requestContentDirectUrl(archivedId, renditionId, attachment, null);
|
return requestContentDirectUrl(archivedId, renditionId, attachment, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -121,8 +121,9 @@ public interface DeletedNodes
|
|||||||
* @param renditionId The rendition id for which to obtain the direct access {@code URL}
|
* @param renditionId The rendition id for which to obtain the direct access {@code URL}
|
||||||
* @param attachment {@code true} if an attachment {@code URL} is requested, {@code false} for an embedded {@code URL}, {@code true} by default.
|
* @param attachment {@code true} if an attachment {@code URL} is requested, {@code false} for an embedded {@code URL}, {@code true} by default.
|
||||||
* @param validFor The time at which the direct access {@code URL} will expire.
|
* @param validFor The time at which the direct access {@code URL} will expire.
|
||||||
|
* @param fileName Optional overide for file name
|
||||||
* @return A direct access {@code URL} object for the content.
|
* @return A direct access {@code URL} object for the content.
|
||||||
*/
|
*/
|
||||||
DirectAccessUrl requestContentDirectUrl(String archivedId, String renditionId, boolean attachment, Long validFor);
|
DirectAccessUrl requestContentDirectUrl(String archivedId, String renditionId, boolean attachment, Long validFor, String fileName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -63,4 +63,15 @@ public class DirectAccessUrlHelper
|
|||||||
}
|
}
|
||||||
return attachment;
|
return attachment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getFileName(DirectAccessUrlRequest directAccessUrlRequest)
|
||||||
|
{
|
||||||
|
String fileName = null;
|
||||||
|
if (directAccessUrlRequest != null )
|
||||||
|
{
|
||||||
|
fileName = directAccessUrlRequest.getFileName();
|
||||||
|
}
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -301,7 +301,7 @@ public interface Nodes
|
|||||||
*/
|
*/
|
||||||
default DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment)
|
default DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment)
|
||||||
{
|
{
|
||||||
return requestContentDirectUrl(nodeRef, attachment, null);
|
return requestContentDirectUrl(nodeRef, attachment, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -313,7 +313,7 @@ public interface Nodes
|
|||||||
*/
|
*/
|
||||||
default DirectAccessUrl requestContentDirectUrl(String nodeId, boolean attachment, Long validFor)
|
default DirectAccessUrl requestContentDirectUrl(String nodeId, boolean attachment, Long validFor)
|
||||||
{
|
{
|
||||||
return requestContentDirectUrl(validateNode(nodeId), attachment, validFor);
|
return requestContentDirectUrl(validateNode(nodeId), attachment, validFor, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -321,9 +321,10 @@ public interface Nodes
|
|||||||
* @param nodeRef The node reference for which to obtain the direct access {@code URL}
|
* @param nodeRef The node reference for which to obtain the direct access {@code URL}
|
||||||
* @param attachment {@code true} if an attachment {@code URL} is requested, {@code false} for an embedded {@code URL}.
|
* @param attachment {@code true} if an attachment {@code URL} is requested, {@code false} for an embedded {@code URL}.
|
||||||
* @param validFor The time at which the direct access {@code URL} will expire.
|
* @param validFor The time at which the direct access {@code URL} will expire.
|
||||||
|
* @param fileName Optional name for the file when downloaded
|
||||||
* @return A direct access {@code URL} object for the content.
|
* @return A direct access {@code URL} object for the content.
|
||||||
*/
|
*/
|
||||||
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor);
|
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor, String fileName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert from node properties (map of QName to Serializable) retrieved from
|
* Convert from node properties (map of QName to Serializable) retrieved from
|
||||||
|
@@ -234,7 +234,7 @@ public interface Renditions
|
|||||||
default DirectAccessUrl requestContentDirectUrl(String nodeId, String versionId, String renditionId, boolean attachment, Long validFor)
|
default DirectAccessUrl requestContentDirectUrl(String nodeId, String versionId, String renditionId, boolean attachment, Long validFor)
|
||||||
{
|
{
|
||||||
NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
|
NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
|
||||||
return requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, validFor);
|
return requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, validFor, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -247,7 +247,7 @@ public interface Renditions
|
|||||||
*/
|
*/
|
||||||
default DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment)
|
default DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment)
|
||||||
{
|
{
|
||||||
return requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, null);
|
return requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -257,8 +257,9 @@ public interface Renditions
|
|||||||
* @param renditionId the rendition id
|
* @param renditionId the rendition id
|
||||||
* @param attachment {@code true} if an attachment {@code URL} is requested, {@code false} for an embedded {@code URL}
|
* @param attachment {@code true} if an attachment {@code URL} is requested, {@code false} for an embedded {@code URL}
|
||||||
* @param validFor the time at which the direct access {@code URL} will expire
|
* @param validFor the time at which the direct access {@code URL} will expire
|
||||||
|
* @param fileName optional name for the file when downloaded
|
||||||
* @return a direct access {@code URL} object for the content.
|
* @return a direct access {@code URL} object for the content.
|
||||||
*/
|
*/
|
||||||
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment, Long validFor);
|
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment, Long validFor, String fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -250,18 +250,18 @@ public class DeletedNodesImpl implements DeletedNodes, RecognizedParamsExtractor
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DirectAccessUrl requestContentDirectUrl(String originalNodeId, String renditionId, boolean attachment, Long validFor)
|
public DirectAccessUrl requestContentDirectUrl(String originalNodeId, String renditionId, boolean attachment, Long validFor, String fileName)
|
||||||
{
|
{
|
||||||
//First check the node is valid and has been archived.
|
//First check the node is valid and has been archived.
|
||||||
NodeRef validatedNodeRef = nodes.validateNode(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, originalNodeId);
|
NodeRef validatedNodeRef = nodes.validateNode(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, originalNodeId);
|
||||||
|
|
||||||
if (renditionId != null)
|
if (renditionId != null)
|
||||||
{
|
{
|
||||||
return renditions.requestContentDirectUrl(validatedNodeRef, null, renditionId, attachment, validFor);
|
return renditions.requestContentDirectUrl(validatedNodeRef, null, renditionId, attachment, validFor, fileName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return nodes.requestContentDirectUrl(validatedNodeRef, attachment, validFor);
|
return nodes.requestContentDirectUrl(validatedNodeRef, attachment, validFor, fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3443,9 +3443,9 @@ public class NodesImpl implements Nodes
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor)
|
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor, String fileName)
|
||||||
{
|
{
|
||||||
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(nodeRef, ContentModel.PROP_CONTENT, attachment, validFor);
|
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(nodeRef, ContentModel.PROP_CONTENT, attachment, validFor, fileName);
|
||||||
if (directAccessUrl == null)
|
if (directAccessUrl == null)
|
||||||
{
|
{
|
||||||
throw new DisabledServiceException("Direct access url isn't available.");
|
throw new DisabledServiceException("Direct access url isn't available.");
|
||||||
|
@@ -512,7 +512,7 @@ public class RenditionsImpl implements Renditions, ResourceLoaderAware
|
|||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment, Long validFor)
|
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment, Long validFor, String fileName)
|
||||||
{
|
{
|
||||||
final NodeRef validatedNodeRef = validateNode(nodeRef.getStoreRef(), nodeRef.getId(), versionId, null);
|
final NodeRef validatedNodeRef = validateNode(nodeRef.getStoreRef(), nodeRef.getId(), versionId, null);
|
||||||
NodeRef renditionNodeRef = getRenditionByName(validatedNodeRef, renditionId, null);
|
NodeRef renditionNodeRef = getRenditionByName(validatedNodeRef, renditionId, null);
|
||||||
@@ -522,7 +522,7 @@ public class RenditionsImpl implements Renditions, ResourceLoaderAware
|
|||||||
throw new NotFoundException("The rendition with id: " + renditionId + " was not found.");
|
throw new NotFoundException("The rendition with id: " + renditionId + " was not found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return nodes.requestContentDirectUrl(renditionNodeRef, attachment, validFor);
|
return nodes.requestContentDirectUrl(renditionNodeRef, attachment, validFor, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BinaryResource getContentImpl(NodeRef nodeRef, String renditionId, Parameters parameters)
|
private BinaryResource getContentImpl(NodeRef nodeRef, String renditionId, Parameters parameters)
|
||||||
|
@@ -33,6 +33,7 @@ package org.alfresco.rest.api.model;
|
|||||||
public class DirectAccessUrlRequest
|
public class DirectAccessUrlRequest
|
||||||
{
|
{
|
||||||
private Boolean attachment;
|
private Boolean attachment;
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
public Boolean isAttachment()
|
public Boolean isAttachment()
|
||||||
{
|
{
|
||||||
@@ -43,4 +44,14 @@ public class DirectAccessUrlRequest
|
|||||||
{
|
{
|
||||||
this.attachment = attachment;
|
this.attachment = attachment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getFileName()
|
||||||
|
{
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFileName(String fileName)
|
||||||
|
{
|
||||||
|
this.fileName = fileName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -137,12 +137,13 @@ public class NodeRenditionsRelation implements RelationshipResourceAction.Read<R
|
|||||||
{
|
{
|
||||||
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
||||||
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
||||||
|
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
|
||||||
NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
|
NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
|
||||||
|
|
||||||
DirectAccessUrl directAccessUrl;
|
DirectAccessUrl directAccessUrl;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
directAccessUrl = renditions.requestContentDirectUrl(nodeRef, null, renditionId, attachment, validFor);
|
directAccessUrl = renditions.requestContentDirectUrl(nodeRef, null, renditionId, attachment, validFor, fileName);
|
||||||
}
|
}
|
||||||
catch (DirectAccessUrlDisabledException ex)
|
catch (DirectAccessUrlDisabledException ex)
|
||||||
{
|
{
|
||||||
|
@@ -149,13 +149,14 @@ public class NodeVersionRenditionsRelation implements RelationshipResourceAction
|
|||||||
{
|
{
|
||||||
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
||||||
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
||||||
|
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
|
||||||
NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
|
NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
|
||||||
String renditionId = parameters.getRelationship2Id();
|
String renditionId = parameters.getRelationship2Id();
|
||||||
|
|
||||||
DirectAccessUrl directAccessUrl;
|
DirectAccessUrl directAccessUrl;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
directAccessUrl = renditions.requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, validFor);
|
directAccessUrl = renditions.requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, validFor, fileName);
|
||||||
}
|
}
|
||||||
catch (DirectAccessUrlDisabledException ex)
|
catch (DirectAccessUrlDisabledException ex)
|
||||||
{
|
{
|
||||||
|
@@ -311,6 +311,7 @@ public class NodeVersionsRelation extends AbstractNodeRelation implements
|
|||||||
{
|
{
|
||||||
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
||||||
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
||||||
|
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
|
||||||
Version version = findVersion(nodeId, versionId);
|
Version version = findVersion(nodeId, versionId);
|
||||||
if (version != null)
|
if (version != null)
|
||||||
{
|
{
|
||||||
@@ -319,7 +320,7 @@ public class NodeVersionsRelation extends AbstractNodeRelation implements
|
|||||||
DirectAccessUrl directAccessUrl;
|
DirectAccessUrl directAccessUrl;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
directAccessUrl = nodes.requestContentDirectUrl(versionNodeRef, attachment, validFor);
|
directAccessUrl = nodes.requestContentDirectUrl(versionNodeRef, attachment, validFor, fileName);
|
||||||
}
|
}
|
||||||
catch (DirectAccessUrlDisabledException ex)
|
catch (DirectAccessUrlDisabledException ex)
|
||||||
{
|
{
|
||||||
|
@@ -211,12 +211,13 @@ public class NodesEntityResource implements
|
|||||||
{
|
{
|
||||||
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
||||||
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
||||||
|
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
|
||||||
NodeRef nodeRef = nodes.validateNode(nodeId);
|
NodeRef nodeRef = nodes.validateNode(nodeId);
|
||||||
|
|
||||||
DirectAccessUrl directAccessUrl;
|
DirectAccessUrl directAccessUrl;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
directAccessUrl = nodes.requestContentDirectUrl(nodeRef, attachment, validFor);
|
directAccessUrl = nodes.requestContentDirectUrl(nodeRef, attachment, validFor, fileName);
|
||||||
}
|
}
|
||||||
catch (DirectAccessUrlDisabledException ex)
|
catch (DirectAccessUrlDisabledException ex)
|
||||||
{
|
{
|
||||||
|
@@ -109,10 +109,11 @@ public class TrashcanEntityResource implements
|
|||||||
{
|
{
|
||||||
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
||||||
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
||||||
|
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
|
||||||
DirectAccessUrl directAccessUrl;
|
DirectAccessUrl directAccessUrl;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
directAccessUrl = deletedNodes.requestContentDirectUrl(originalNodeId, null, attachment, validFor);
|
directAccessUrl = deletedNodes.requestContentDirectUrl(originalNodeId, null, attachment, validFor, fileName);
|
||||||
}
|
}
|
||||||
catch (DirectAccessUrlDisabledException ex)
|
catch (DirectAccessUrlDisabledException ex)
|
||||||
{
|
{
|
||||||
|
@@ -98,10 +98,11 @@ public class TrashcanRenditionsRelation
|
|||||||
{
|
{
|
||||||
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
|
||||||
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
|
||||||
|
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
|
||||||
DirectAccessUrl directAccessUrl;
|
DirectAccessUrl directAccessUrl;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
directAccessUrl = deletedNodes.requestContentDirectUrl(originalNodeId, renditionId, attachment, validFor);
|
directAccessUrl = deletedNodes.requestContentDirectUrl(originalNodeId, renditionId, attachment, validFor, fileName);
|
||||||
}
|
}
|
||||||
catch (DirectAccessUrlDisabledException ex)
|
catch (DirectAccessUrlDisabledException ex)
|
||||||
{
|
{
|
||||||
|
@@ -627,7 +627,7 @@ public class ContentServiceImpl implements ContentService, ApplicationContextAwa
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, QName propertyQName, boolean attachment, Long validFor)
|
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, QName propertyQName, boolean attachment, Long validFor, String fileNameOverride)
|
||||||
{
|
{
|
||||||
if (!systemWideDirectUrlConfig.isEnabled())
|
if (!systemWideDirectUrlConfig.isEnabled())
|
||||||
{
|
{
|
||||||
@@ -643,7 +643,7 @@ public class ContentServiceImpl implements ContentService, ApplicationContextAwa
|
|||||||
|
|
||||||
String contentUrl = contentData.getContentUrl();
|
String contentUrl = contentData.getContentUrl();
|
||||||
String contentMimetype = contentData.getMimetype();
|
String contentMimetype = contentData.getMimetype();
|
||||||
String fileName = getFileName(nodeRef);
|
String fileName = fileNameOverride == null ? getFileName(nodeRef) : fileNameOverride;
|
||||||
|
|
||||||
validFor = adjustValidFor(validFor);
|
validFor = adjustValidFor(validFor);
|
||||||
attachment = adjustAttachment(nodeRef, contentMimetype, attachment);
|
attachment = adjustAttachment(nodeRef, contentMimetype, attachment);
|
||||||
|
@@ -213,7 +213,7 @@ public interface ContentService
|
|||||||
*/
|
*/
|
||||||
default DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, QName propertyQName, boolean attachment)
|
default DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, QName propertyQName, boolean attachment)
|
||||||
{
|
{
|
||||||
return requestContentDirectUrl(nodeRef, propertyQName, attachment, null);
|
return requestContentDirectUrl(nodeRef, propertyQName, attachment, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -230,7 +230,7 @@ public interface ContentService
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
default public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor)
|
default public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor)
|
||||||
{
|
{
|
||||||
return requestContentDirectUrl(nodeRef, ContentModel.PROP_CONTENT, attachment, validFor);
|
return requestContentDirectUrl(nodeRef, ContentModel.PROP_CONTENT, attachment, validFor, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -241,11 +241,12 @@ public interface ContentService
|
|||||||
* @param propertyQName the name of the property, which must be of type <b>content</b>
|
* @param propertyQName the name of the property, which must be of type <b>content</b>
|
||||||
* @param attachment {@code true} if an attachment URL is requested, {@code false} for an embedded {@code URL}.
|
* @param attachment {@code true} if an attachment URL is requested, {@code false} for an embedded {@code URL}.
|
||||||
* @param validFor The time at which the direct access {@code URL} will expire.
|
* @param validFor The time at which the direct access {@code URL} will expire.
|
||||||
|
* @param fileName Optional name for the file when downloaded
|
||||||
* @return A direct access {@code URL} object for the content.
|
* @return A direct access {@code URL} object for the content.
|
||||||
* @throws UnsupportedOperationException if the store is unable to provide the information.
|
* @throws UnsupportedOperationException if the store is unable to provide the information.
|
||||||
*/
|
*/
|
||||||
@Auditable(parameters = {"nodeRef", "propertyQName", "validFor"})
|
@Auditable(parameters = {"nodeRef", "propertyQName", "validFor"})
|
||||||
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, QName propertyQName, boolean attachment, Long validFor);
|
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, QName propertyQName, boolean attachment, Long validFor, String fileName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a key-value (String-String) collection of storage headers/properties with their respective values for a specific node reference.
|
* Gets a key-value (String-String) collection of storage headers/properties with their respective values for a specific node reference.
|
||||||
|
@@ -135,7 +135,7 @@ public class ContentServiceImplUnitTest
|
|||||||
{
|
{
|
||||||
setupSystemWideDirectAccessConfig(DISABLED);
|
setupSystemWideDirectAccessConfig(DISABLED);
|
||||||
assertThrows(DirectAccessUrlDisabledException.class, () -> {
|
assertThrows(DirectAccessUrlDisabledException.class, () -> {
|
||||||
contentService.requestContentDirectUrl(NODE_REF, PROP_CONTENT_QNAME, true, 20L);
|
contentService.requestContentDirectUrl(NODE_REF, PROP_CONTENT_QNAME, true, 20L, null);
|
||||||
});
|
});
|
||||||
verify(mockContentStore, never()).isContentDirectUrlEnabled();
|
verify(mockContentStore, never()).isContentDirectUrlEnabled();
|
||||||
}
|
}
|
||||||
@@ -146,7 +146,7 @@ public class ContentServiceImplUnitTest
|
|||||||
setupSystemWideDirectAccessConfig(ENABLED);
|
setupSystemWideDirectAccessConfig(ENABLED);
|
||||||
when(mockContentStore.isContentDirectUrlEnabled()).thenReturn(DISABLED);
|
when(mockContentStore.isContentDirectUrlEnabled()).thenReturn(DISABLED);
|
||||||
|
|
||||||
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(NODE_REF, PROP_CONTENT_QNAME,true, 20L);
|
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(NODE_REF, PROP_CONTENT_QNAME,true, 20L, null);
|
||||||
assertNull(directAccessUrl);
|
assertNull(directAccessUrl);
|
||||||
verify(mockContentStore, never()).requestContentDirectUrl(anyString(), eq(true), anyString(), anyString(), anyLong());
|
verify(mockContentStore, never()).requestContentDirectUrl(anyString(), eq(true), anyString(), anyString(), anyLong());
|
||||||
}
|
}
|
||||||
@@ -157,7 +157,7 @@ public class ContentServiceImplUnitTest
|
|||||||
setupSystemWideDirectAccessConfig(ENABLED);
|
setupSystemWideDirectAccessConfig(ENABLED);
|
||||||
when(mockContentStore.isContentDirectUrlEnabled()).thenReturn(ENABLED);
|
when(mockContentStore.isContentDirectUrlEnabled()).thenReturn(ENABLED);
|
||||||
|
|
||||||
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(NODE_REF, PROP_CONTENT_QNAME, true, 20L);
|
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(NODE_REF, PROP_CONTENT_QNAME, true, 20L, null);
|
||||||
assertNull(directAccessUrl);
|
assertNull(directAccessUrl);
|
||||||
verify(mockContentStore, times(1)).requestContentDirectUrl(anyString(), eq(true), anyString(), anyString(), anyLong());
|
verify(mockContentStore, times(1)).requestContentDirectUrl(anyString(), eq(true), anyString(), anyString(), anyLong());
|
||||||
}
|
}
|
||||||
|
@@ -164,11 +164,11 @@ public class ContentServiceImplTest extends BaseVersionStoreTest
|
|||||||
NodeRef nodeRef = this.dbNodeService
|
NodeRef nodeRef = this.dbNodeService
|
||||||
.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}MyNoContentNode"), TEST_TYPE_QNAME, this.nodeProperties).getChildRef();
|
.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}MyNoContentNode"), TEST_TYPE_QNAME, this.nodeProperties).getChildRef();
|
||||||
|
|
||||||
assertNull(contentService.requestContentDirectUrl(nodeRef, QNAME, true, validFor));
|
assertNull(contentService.requestContentDirectUrl(nodeRef, QNAME, true, validFor, null));
|
||||||
});
|
});
|
||||||
|
|
||||||
assertThrows("nodeRef is null", IllegalArgumentException.class, () -> {
|
assertThrows("nodeRef is null", IllegalArgumentException.class, () -> {
|
||||||
assertNull(contentService.requestContentDirectUrl(null, null, true, null));
|
assertNull(contentService.requestContentDirectUrl(null, null, true, null, null));
|
||||||
});
|
});
|
||||||
|
|
||||||
assertThrows("propertyQName has no content", NullPointerException.class, () -> {
|
assertThrows("propertyQName has no content", NullPointerException.class, () -> {
|
||||||
@@ -176,13 +176,13 @@ public class ContentServiceImplTest extends BaseVersionStoreTest
|
|||||||
NodeRef nodeRef = this.dbNodeService
|
NodeRef nodeRef = this.dbNodeService
|
||||||
.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}MyNoContentNode"), TEST_TYPE_QNAME, this.nodeProperties).getChildRef();
|
.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}MyNoContentNode"), TEST_TYPE_QNAME, this.nodeProperties).getChildRef();
|
||||||
|
|
||||||
contentService.requestContentDirectUrl(nodeRef, null, true, validFor);
|
contentService.requestContentDirectUrl(nodeRef, null, true, validFor, null);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Create a node with content
|
// Create a node with content
|
||||||
NodeRef nodeRef = createNewVersionableNode();
|
NodeRef nodeRef = createNewVersionableNode();
|
||||||
|
|
||||||
assertNull(contentService.requestContentDirectUrl(nodeRef, QNAME, true, null));
|
assertNull(contentService.requestContentDirectUrl(nodeRef, QNAME, true, null, null));
|
||||||
assertNull(contentService.requestContentDirectUrl(nodeRef, QNAME, true, validFor));
|
assertNull(contentService.requestContentDirectUrl(nodeRef, QNAME, true, validFor, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user