From 0deb44526b2672a467ce7d95537fed7c7cffef0c Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Thu, 3 Nov 2016 13:48:04 +0000 Subject: [PATCH] Merged 5.2.N (5.2.1) to HEAD (5.2) 131302 rmunteanu: REPO-1354: Get Rendition info - implement the API - implemented get rendition info by id method git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@132240 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/rest/api/QuickShareLinks.java | 9 ++++ .../rest/api/impl/QuickShareLinksImpl.java | 53 ++++++++++++++++--- .../rest/api/impl/RenditionsImpl.java | 50 ++++++++++------- .../QuickShareLinkRenditionsRelation.java | 9 ++++ 4 files changed, 94 insertions(+), 27 deletions(-) diff --git a/source/java/org/alfresco/rest/api/QuickShareLinks.java b/source/java/org/alfresco/rest/api/QuickShareLinks.java index f37dbd7a0a..b86260f874 100644 --- a/source/java/org/alfresco/rest/api/QuickShareLinks.java +++ b/source/java/org/alfresco/rest/api/QuickShareLinks.java @@ -65,6 +65,15 @@ public interface QuickShareLinks */ BinaryResource readProperty(String sharedId, String renditionId, Parameters parameters) throws EntityNotFoundException; + /** + * Gets information about a rendition of a shared link. + * + * @param shareId + * @param renditionId + * @return the {@link Rendition} object + */ + Rendition getRendition(String shareId, String renditionId); + /** * List renditions info - note: only returns available (=> created) renditions. * diff --git a/source/java/org/alfresco/rest/api/impl/QuickShareLinksImpl.java b/source/java/org/alfresco/rest/api/impl/QuickShareLinksImpl.java index 72bfa8e64d..e06b7740dc 100644 --- a/source/java/org/alfresco/rest/api/impl/QuickShareLinksImpl.java +++ b/source/java/org/alfresco/rest/api/impl/QuickShareLinksImpl.java @@ -386,6 +386,48 @@ public class QuickShareLinksImpl implements QuickShareLinks, RecognizedParamsExt } } + private Parameters getParamsWithCreatedStatus() + { + String filterStatusCreated = "(" + Renditions.PARAM_STATUS + "='" + Rendition.RenditionStatus.CREATED + "')"; + Query whereQuery = getWhereClause(filterStatusCreated); + Params.RecognizedParams recParams = new Params.RecognizedParams(null, null, null, null, null, null, whereQuery, null, false); + Parameters params = Params.valueOf(recParams, null, null, null); + return params; + } + + @Override + public Rendition getRendition(String sharedId, String renditionId) + { + checkEnabled(); + checkValidShareId(sharedId); + + try + { + Pair pair = quickShareService.getTenantNodeRefFromSharedId(sharedId); + + String networkTenantDomain = pair.getFirst(); + final NodeRef nodeRef = pair.getSecond(); + + return TenantUtil.runAsSystemTenant(() -> + { + String nodeId = nodeRef.getId(); + Parameters params = getParamsWithCreatedStatus(); + return renditions.getRendition(nodeId, renditionId, params); + + }, networkTenantDomain); + } + catch (InvalidSharedIdException ex) + { + logger.warn("Unable to find: " + sharedId); + throw new EntityNotFoundException(sharedId); + } + catch (InvalidNodeRefException inre) + { + logger.warn("Unable to find: " + sharedId + " [" + inre.getNodeRef() + "]"); + throw new EntityNotFoundException(sharedId); + } + } + @Override public CollectionWithPagingInfo getRenditions(String sharedId) { @@ -399,15 +441,10 @@ public class QuickShareLinksImpl implements QuickShareLinks, RecognizedParamsExt String networkTenantDomain = pair.getFirst(); final NodeRef nodeRef = pair.getSecond(); - return TenantUtil.runAsSystemTenant(() -> { + return TenantUtil.runAsSystemTenant(() -> + { String nodeId = nodeRef.getId(); - - // hmm ... can we simplify ? - String filterStatusCreated = "(" + Renditions.PARAM_STATUS + "='" + Rendition.RenditionStatus.CREATED + "')"; - Query whereQuery = getWhereClause(filterStatusCreated); - Params.RecognizedParams recParams = new Params.RecognizedParams(null, null, null, null, null, null, whereQuery, null, false); - Parameters params = Params.valueOf(recParams, null, null, null); - + Parameters params = getParamsWithCreatedStatus(); return renditions.getRenditions(nodeId, params); }, networkTenantDomain); diff --git a/source/java/org/alfresco/rest/api/impl/RenditionsImpl.java b/source/java/org/alfresco/rest/api/impl/RenditionsImpl.java index 165f42ee3d..b2bfebbf63 100644 --- a/source/java/org/alfresco/rest/api/impl/RenditionsImpl.java +++ b/source/java/org/alfresco/rest/api/impl/RenditionsImpl.java @@ -161,25 +161,11 @@ public class RenditionsImpl implements Renditions, ResourceLoaderAware Query query = parameters.getQuery(); boolean includeCreated = true; boolean includeNotCreated = true; - if (query != null) + String status = getStatus(parameters); + if (status != null) { - // Filtering via "where" clause - MapBasedQueryWalker propertyWalker = new MapBasedQueryWalker(RENDITION_STATUS_COLLECTION_EQUALS_QUERY_PROPERTIES, null); - QueryHelper.walk(query, propertyWalker); - - String withStatus = propertyWalker.getProperty(PARAM_STATUS, WhereClauseParser.EQUALS); - if (withStatus != null) - { - try - { - includeCreated = RenditionStatus.CREATED.equals(RenditionStatus.valueOf(withStatus)); - } - catch (IllegalArgumentException ex) - { - throw new InvalidArgumentException("Invalid status value: " + withStatus); - } - includeNotCreated = !includeCreated; - } + includeCreated = RenditionStatus.CREATED.equals(RenditionStatus.valueOf(status)); + includeNotCreated = !includeCreated; } Map apiRenditions = new TreeMap<>(); @@ -226,9 +212,15 @@ public class RenditionsImpl implements Renditions, ResourceLoaderAware { final NodeRef nodeRef = validateSourceNode(nodeId); NodeRef renditionNodeRef = getRenditionByName(nodeRef, renditionId, parameters); + boolean includeNotCreated = true; + String status = getStatus(parameters); + if (status != null) + { + includeNotCreated = !RenditionStatus.CREATED.equals(RenditionStatus.valueOf(status)); + } // if there is no rendition, then try to find the available/registered rendition (yet to be created). - if (renditionNodeRef == null) + if (renditionNodeRef == null && includeNotCreated) { ThumbnailDefinition thumbnailDefinition = thumbnailService.getThumbnailRegistry().getThumbnailDefinition(renditionId); if (thumbnailDefinition == null) @@ -258,6 +250,11 @@ public class RenditionsImpl implements Renditions, ResourceLoaderAware return toApiRendition(thumbnailDefinition); } + if (renditionNodeRef == null) + { + throw new NotFoundException("The rendition with id: " + renditionId + " was not found."); + } + return toApiRendition(renditionNodeRef); } @@ -471,5 +468,20 @@ public class RenditionsImpl implements Renditions, ResourceLoaderAware ContentData contentData = getContentData(nodeRef, true); return contentData.getMimetype(); } + + private String getStatus(Parameters parameters) + { + Query query = parameters.getQuery(); + String status = null; + if (query != null) + { + // Filtering via "where" clause + MapBasedQueryWalker propertyWalker = new MapBasedQueryWalker(RENDITION_STATUS_COLLECTION_EQUALS_QUERY_PROPERTIES, null); + QueryHelper.walk(query, propertyWalker); + + status = propertyWalker.getProperty(PARAM_STATUS, WhereClauseParser.EQUALS); + } + return status; + } } diff --git a/source/java/org/alfresco/rest/api/quicksharelinks/QuickShareLinkRenditionsRelation.java b/source/java/org/alfresco/rest/api/quicksharelinks/QuickShareLinkRenditionsRelation.java index 6914e787f6..e63bfa73da 100644 --- a/source/java/org/alfresco/rest/api/quicksharelinks/QuickShareLinkRenditionsRelation.java +++ b/source/java/org/alfresco/rest/api/quicksharelinks/QuickShareLinkRenditionsRelation.java @@ -47,6 +47,7 @@ import org.springframework.beans.factory.InitializingBean; @RelationshipResource(name = "renditions", entityResource = QuickShareLinkEntityResource.class, title = "Node renditions via shared link") public class QuickShareLinkRenditionsRelation implements RelationshipResourceAction.Read, + RelationshipResourceAction.ReadById, RelationshipResourceBinaryAction.Read, InitializingBean { @@ -79,5 +80,13 @@ public class QuickShareLinkRenditionsRelation implements { return quickShareLinks.getRenditions(sharedId); } + + @WebApiDescription(title = "Retrieve rendition information", description = "Retrieve (created) rendition information") + @WebApiNoAuth + @Override + public Rendition readById(String entityResourceId, String id, Parameters parameters) + { + return quickShareLinks.getRendition(entityResourceId, id); + } }