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);