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