This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 3843d1f Add VersioningState on storeDocument, copyDocument and checkIn(update) document. (#4598) 3843d1f is described below commit 3843d1f9a70a62a1b2e9e4071e4536f92638e3e6 Author: Vladimir Cherepnalkovski <cherepnalkov...@hotmail.com> AuthorDate: Fri Nov 13 06:27:17 2020 +0100 Add VersioningState on storeDocument, copyDocument and checkIn(update) document. (#4598) Co-authored-by: ARMEDIA\vladimir.cherepnalko <vladimir.cherepnalkov...@armedia.com> --- .../apache/camel/component/cmis/CMISProducer.java | 36 +++++++++++++++++----- .../camel/component/cmis/CamelCMISConstants.java | 1 + .../camel/component/cmis/CMISProducerTest.java | 2 ++ 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISProducer.java b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISProducer.java index b0a7f9a..4ae0c95 100644 --- a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISProducer.java +++ b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISProducer.java @@ -192,6 +192,7 @@ public class CMISProducer extends DefaultProducer { Message message = exchange.getIn(); String parentFolderId = message.getHeader(CamelCMISConstants.CMIS_OBJECT_ID, String.class); Folder parentFolder = (Folder) getSessionFacade().getObjectById(parentFolderId); + String versioning = message.getHeader(CamelCMISConstants.VERSIONING_STATE, String.class); Map<String, Object> cmisProperties = filterTypeProperties(message.getHeaders()); if (isDocument(exchange)) { @@ -199,11 +200,11 @@ public class CMISProducer extends DefaultProducer { String mimeType = getMimeType(message); byte[] buf = getBodyData(message); ContentStream contentStream = getSessionFacade().createContentStream(fileName, buf, mimeType); - return storeDocument(parentFolder, cmisProperties, contentStream); + return storeDocument(parentFolder, cmisProperties, contentStream, versioning); } else if (isFolder(message)) { return storeFolder(parentFolder, cmisProperties); } else { // other types - return storeDocument(parentFolder, cmisProperties, null); + return storeDocument(parentFolder, cmisProperties, null, null); } } @@ -337,13 +338,24 @@ public class CMISProducer extends DefaultProducer { Document document = (Document) getSessionFacade().getObjectById(objectId); + VersioningState versioningState = VersioningState.NONE; + + if (getSessionFacade().isObjectTypeVersionable(message.getHeader(PropertyIds.OBJECT_TYPE_ID, String.class))) { + if (org.apache.camel.util.ObjectHelper.isNotEmpty(message.getHeader(CamelCMISConstants.VERSIONING_STATE))) { + versioningState = VersioningState.valueOf(message.getHeader(CamelCMISConstants.VERSIONING_STATE, String.class)); + } else { + versioningState = VersioningState.MAJOR; + } + } + String newDocumentName = message.getHeader(PropertyIds.NAME, String.class); if (org.apache.camel.util.ObjectHelper.isNotEmpty(newDocumentName)) { return document.copy(destinationFolder, Collections.singletonMap(PropertyIds.NAME, newDocumentName), - VersioningState.NONE, null, null, null, getSessionFacade().createOperationContext()); + versioningState, null, null, null, getSessionFacade().createOperationContext()); } - return document.copy(destinationFolder); + return document.copy(destinationFolder, null, + versioningState, null, null, null, getSessionFacade().createOperationContext()); } /** @@ -454,8 +466,12 @@ public class CMISProducer extends DefaultProducer { ContentStream contentStream = getSessionFacade().createContentStream(fileName, bytes, mimeType); + String versioningState = message.getHeader(CamelCMISConstants.VERSIONING_STATE, String.class); + Boolean versioning = org.apache.camel.util.ObjectHelper.isNotEmpty(versioningState) + && versioningState.equals(VersioningState.MINOR.value()) ? false : true; + try { - return document.checkIn(true, properties, contentStream, checkInComment); + return document.checkIn(versioning, properties, contentStream, checkInComment); } catch (Exception e) { document.cancelCheckOut(); throw e; @@ -511,15 +527,21 @@ public class CMISProducer extends DefaultProducer { return parentFolder.createFolder(cmisProperties); } - private Document storeDocument(Folder parentFolder, Map<String, Object> cmisProperties, ContentStream contentStream) + private Document storeDocument( + Folder parentFolder, Map<String, Object> cmisProperties, ContentStream contentStream, String versioning) throws Exception { if (!cmisProperties.containsKey(PropertyIds.OBJECT_TYPE_ID)) { cmisProperties.put(PropertyIds.OBJECT_TYPE_ID, CamelCMISConstants.CMIS_DOCUMENT); } VersioningState versioningState = VersioningState.NONE; + if (getSessionFacade().isObjectTypeVersionable((String) cmisProperties.get(PropertyIds.OBJECT_TYPE_ID))) { - versioningState = VersioningState.MAJOR; + if (org.apache.camel.util.ObjectHelper.isNotEmpty(versioning)) { + versioningState = VersioningState.valueOf(versioning); + } else { + versioningState = VersioningState.MAJOR; + } } LOG.debug("Creating document with properties: {}", cmisProperties); diff --git a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CamelCMISConstants.java b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CamelCMISConstants.java index 7fa6a54..90b4515 100644 --- a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CamelCMISConstants.java +++ b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CamelCMISConstants.java @@ -30,4 +30,5 @@ public interface CamelCMISConstants { String CAMEL_CMIS_READ_SIZE = "CamelCMISReadSize"; String CAMEL_CMIS_CONTENT_STREAM = "CamelCMISContent"; String ALL_VERSIONS = "CamelCMISAllVersions"; + String VERSIONING_STATE = "cmis:versioningState"; } diff --git a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java index f0c1502..44d4513 100644 --- a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java +++ b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java @@ -34,6 +34,7 @@ import org.apache.chemistry.opencmis.client.api.Document; import org.apache.chemistry.opencmis.client.api.FileableCmisObject; import org.apache.chemistry.opencmis.client.api.Folder; import org.apache.chemistry.opencmis.commons.PropertyIds; +import org.apache.chemistry.opencmis.commons.enums.VersioningState; import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException; import org.junit.jupiter.api.Test; @@ -138,6 +139,7 @@ public class CMISProducerTest extends CMISTestSupport { exchange.getIn().getHeaders().put(PropertyIds.OBJECT_TYPE_ID, CamelCMISConstants.CMIS_DOCUMENT); exchange.getIn().getHeaders().put(CamelCMISConstants.CMIS_ACTION, CamelCMISActions.CREATE); exchange.getIn().getHeaders().put(CamelCMISConstants.CMIS_OBJECT_ID, createSession().getRootFolder().getId()); + exchange.getIn().getHeaders().put(CamelCMISConstants.VERSIONING_STATE, VersioningState.MAJOR); template.send(exchange); CmisObject cmisObject = exchange.getMessage().getBody(CmisObject.class);