You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/11/13 05:35:53 UTC

[camel] branch master updated: Add VersioningState on storeDocument, copyDocument and checkIn(update) document. (#4598)

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 <ch...@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 <vl...@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);