From e8e2ded02ae80721610e55e771771ade2c42a8b8 Mon Sep 17 00:00:00 2001 From: montgolfiere Date: Mon, 1 Feb 2021 10:43:37 +0000 Subject: [PATCH] MNT-14308: CMIS - optionally request rendition(s) when uploading docs (#263) * MNT-14308: CMIS - optionally request rendition(s) when uploading docs - add new configurable option to request set of renditions when uploading via CMIS (none by default) - note: in the event a client *relied* on previous behaviour (rather than dynamic requests) the property can be overridden & set to "doclib" - add info message to show new property when initialising CMIS, ie. set of requested renditions set (empty by default) - note: set following log4j.properties: log4j.logger.org.alfresco.opencmis=info --- .../opencmis/AlfrescoCmisServiceFactory.java | 41 ++++++++++++++++++- .../opencmis/AlfrescoCmisServiceImpl.java | 20 ++++++--- .../resources/alfresco/opencmis-context.xml | 1 + .../resources/alfresco/repository.properties | 3 ++ 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/repository/src/main/java/org/alfresco/opencmis/AlfrescoCmisServiceFactory.java b/repository/src/main/java/org/alfresco/opencmis/AlfrescoCmisServiceFactory.java index 8b34d1f150..cdb0b6196b 100644 --- a/repository/src/main/java/org/alfresco/opencmis/AlfrescoCmisServiceFactory.java +++ b/repository/src/main/java/org/alfresco/opencmis/AlfrescoCmisServiceFactory.java @@ -2,7 +2,7 @@ * #%L * Alfresco Repository * %% - * Copyright (C) 2005 - 2016 Alfresco Software Limited + * Copyright (C) 2005 - 2021 Alfresco Software Limited * %% * This file is part of the Alfresco software. * If the software was purchased under a paid Alfresco license, the terms of @@ -25,7 +25,10 @@ */ package org.alfresco.opencmis; +import java.util.HashSet; import java.util.Map; +import java.util.Set; +import java.util.StringTokenizer; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.RetryingTransactionInterceptor; @@ -58,6 +61,8 @@ public class AlfrescoCmisServiceFactory extends AbstractServiceFactory private CMISTransactionAwareHolderInterceptor cmisHolder; private AuthorityService authorityService; + private String cmisCreateDocRequestRenditionsSet = null; + /** * * @param memoryThreshold in KB @@ -139,6 +144,14 @@ public class AlfrescoCmisServiceFactory extends AbstractServiceFactory this.cmisHolder = cmisHolder; } + public String getCmisCreateDocRequestRenditionsSet() { + return cmisCreateDocRequestRenditionsSet; + } + + public void setCmisCreateDocRequestRenditionsSet(String cmisCreateDocRequestRenditionsSet) { + this.cmisCreateDocRequestRenditionsSet = cmisCreateDocRequestRenditionsSet; + } + @Override public void init(Map parameters) { @@ -217,6 +230,30 @@ public class AlfrescoCmisServiceFactory extends AbstractServiceFactory protected AlfrescoCmisService getCmisServiceTarget(CMISConnector connector) { - return new AlfrescoCmisServiceImpl(connector); + AlfrescoCmisServiceImpl cmisService = new AlfrescoCmisServiceImpl(connector); + + Set stringSet = parseCommaSeparatedSet(getCmisCreateDocRequestRenditionsSet()); + logger.info("getCmisServiceTarget: cmis.create.doc.request.renditions.set="+stringSet); + cmisService.setCmisRequestRenditionsOnCreateDoc(stringSet); + + return cmisService; + } + + private Set parseCommaSeparatedSet(String str) + { + Set stringSet = new HashSet<>(); + if (str != null) + { + StringTokenizer st = new StringTokenizer(str, ","); + while (st.hasMoreTokens()) + { + String entry = st.nextToken().trim(); + if (!entry.isEmpty()) + { + stringSet.add(entry); + } + } + } + return stringSet; } } diff --git a/repository/src/main/java/org/alfresco/opencmis/AlfrescoCmisServiceImpl.java b/repository/src/main/java/org/alfresco/opencmis/AlfrescoCmisServiceImpl.java index 64563d9d6f..ccb4c812ed 100644 --- a/repository/src/main/java/org/alfresco/opencmis/AlfrescoCmisServiceImpl.java +++ b/repository/src/main/java/org/alfresco/opencmis/AlfrescoCmisServiceImpl.java @@ -2,7 +2,7 @@ * #%L * Alfresco Repository * %% - * Copyright (C) 2005 - 2020 Alfresco Software Limited + * Copyright (C) 2005 - 2021 Alfresco Software Limited * %% * This file is part of the Alfresco software. * If the software was purchased under a paid Alfresco license, the terms of @@ -166,6 +166,16 @@ public class AlfrescoCmisServiceImpl extends AbstractCmisService implements Alfr private Map nodeInfoMap; private Map objectInfoMap; + private Set cmisRequestRenditionsOnCreateDoc = null; + + public Set getCmisRequestRenditionsOnCreateDoc() { + return cmisRequestRenditionsOnCreateDoc; + } + + public void setCmisRequestRenditionsOnCreateDoc(Set cmisRequestRenditionsOnCreateDoc) { + this.cmisRequestRenditionsOnCreateDoc = cmisRequestRenditionsOnCreateDoc; + } + public AlfrescoCmisServiceImpl(CMISConnector connector) { this.connector = connector; @@ -1306,9 +1316,9 @@ public class AlfrescoCmisServiceImpl extends AbstractCmisService implements Alfr writer.putContent(contentStream.getStream()); } - // extract metadata and generate thumbnail asynchronously + // extract metadata and generate thumbnail asynchronously (if configured - see a-g.p) connector.extractMetadata(nodeRef); - connector.createThumbnails(nodeRef, Collections.singleton("doclib")); + connector.createThumbnails(nodeRef, getCmisRequestRenditionsOnCreateDoc()); connector.applyVersioningState(nodeRef, versioningState); @@ -1384,9 +1394,9 @@ public class AlfrescoCmisServiceImpl extends AbstractCmisService implements Alfr connector.applyPolicies(nodeRef, type, policies); connector.applyACL(nodeRef, type, addAces, removeAces); - // extract metadata and generate thumbnail asynchronously + // extract metadata and generate thumbnail asynchronously (if configured - see a-g.p) connector.extractMetadata(nodeRef); - connector.createThumbnails(nodeRef, Collections.singleton("doclib")); + connector.createThumbnails(nodeRef, getCmisRequestRenditionsOnCreateDoc()); connector.applyVersioningState(nodeRef, versioningState); diff --git a/repository/src/main/resources/alfresco/opencmis-context.xml b/repository/src/main/resources/alfresco/opencmis-context.xml index 8d07ac0952..2b82ec97f5 100644 --- a/repository/src/main/resources/alfresco/opencmis-context.xml +++ b/repository/src/main/resources/alfresco/opencmis-context.xml @@ -86,6 +86,7 @@ + diff --git a/repository/src/main/resources/alfresco/repository.properties b/repository/src/main/resources/alfresco/repository.properties index 612c630853..ceac982f67 100644 --- a/repository/src/main/resources/alfresco/repository.properties +++ b/repository/src/main/resources/alfresco/repository.properties @@ -471,6 +471,9 @@ renditionService2.enabled=true # Thumbnail Service system.thumbnail.generate=true +# when creating doc via CMIS - optionally configure set of renditions names to request async +cmis.create.doc.request.renditions.set= + # Default thumbnail limits # When creating thumbnails, only use the first pageLimit pages system.thumbnail.definition.default.timeoutMs=-1