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 2019/12/25 12:10:27 UTC
[camel] branch master updated: Camel 14325/add new functions (#3439)
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 0801147 Camel 14325/add new functions (#3439)
0801147 is described below
commit 080114734341101b4b6e127489b7960c50b7f2b5
Author: cherepnalkovski <ch...@hotmail.com>
AuthorDate: Wed Dec 25 13:10:17 2019 +0100
Camel 14325/add new functions (#3439)
* Add new functions and change return type of the existing functions
* Resolve pull request comments
---
.../apache/camel/component/cmis/CMISProducer.java | 178 +++++++++++++++++----
.../camel/component/cmis/CamelCMISActions.java | 14 +-
.../camel/component/cmis/CamelCMISConstants.java | 2 +
.../camel/component/cmis/CMISProducerTest.java | 12 +-
.../camel/component/cmis/CMISTestSupport.java | 6 +-
5 files changed, 173 insertions(+), 39 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 73f33e9..609b130 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
@@ -38,8 +38,10 @@ import org.apache.camel.support.ObjectHelper;
import org.apache.camel.util.ReflectionHelper;
import org.apache.chemistry.opencmis.client.api.CmisObject;
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.client.api.ItemIterable;
+import org.apache.chemistry.opencmis.client.api.ObjectId;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.Action;
@@ -65,7 +67,6 @@ public class CMISProducer extends DefaultProducer {
return (CMISEndpoint) super.getEndpoint();
}
- @Override
public void process(Exchange exchange) throws Exception {
CamelCMISActions action = exchange.getIn().getHeader(CamelCMISConstants.CMIS_ACTION, CamelCMISActions.class);
@@ -78,6 +79,80 @@ public class CMISProducer extends DefaultProducer {
exchange.getOut().setBody(object);
}
+ /**
+ * This method is called via reflection.
+ * It is not safe to delete it or rename it!
+ * Method's name are defined and retrieved from {@link CamelCMISActions}.
+ */
+ @SuppressWarnings("unused")
+ public CmisObject findObjectById(Exchange exchange) throws Exception {
+ validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
+ Message message = exchange.getIn();
+
+ String objectId = message.getHeader(CamelCMISConstants.CMIS_OBJECT_ID, String.class);
+
+ return getSessionFacade().getObjectById(objectId);
+ }
+
+ /**
+ * This method is called via reflection.
+ * It is not safe to delete it or rename it!
+ * Method's name are defined and retrieved from {@link CamelCMISActions}.
+ */
+ @SuppressWarnings("unused")
+ public CmisObject findObjectByPath(Exchange exchange) throws Exception {
+ validateRequiredHeader(exchange, PropertyIds.PATH);
+ Message message = exchange.getIn();
+
+ String path = message.getHeader(PropertyIds.PATH, String.class);
+
+ try {
+ return getSessionFacade().getObjectByPath(path);
+ } catch (Exception e) {
+ throw new CamelCmisObjectNotFoundException("Can not find object by path :" + path, e);
+ }
+ }
+
+ /**
+ * This method is called via reflection.
+ * It is not safe to delete it or rename it!
+ * Method's name are defined and retrieved from {@link CamelCMISActions}.
+ */
+ @SuppressWarnings("unused")
+ public ContentStream downloadDocument(Exchange exchange) throws Exception {
+ validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
+ Message message = exchange.getIn();
+
+ String objectId = message.getHeader(CamelCMISConstants.CMIS_OBJECT_ID, String.class);
+
+ CmisObject result = getSessionFacade().getObjectById(objectId);
+
+ if (result instanceof Document) {
+ return ((Document) result).getContentStream();
+ } else {
+ throw new CamelCmisException("Unable to get contentStream for document with id: " + objectId);
+ }
+ }
+
+ /**
+ * This method is called via reflection.
+ * It is not safe to delete it or rename it!
+ * Method's name are defined and retrieved from {@link CamelCMISActions}.
+ */
+ @SuppressWarnings("unused")
+ public Folder getFolder(Exchange exchange) throws Exception {
+ validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
+ Message message = exchange.getIn();
+
+ String objectId = message.getHeader(CamelCMISConstants.CMIS_OBJECT_ID, String.class);
+ CmisObject result = getSessionFacade().getObjectById(objectId);
+ if (result instanceof Folder) {
+ return (Folder) result;
+ } else {
+ throw new CamelCmisObjectNotFoundException();
+ }
+ }
+
private Map<String, Object> filterTypeProperties(Map<String, Object> properties) throws Exception {
Map<String, Object> result = new HashMap<>(properties.size());
@@ -138,6 +213,29 @@ public class CMISProducer extends DefaultProducer {
* Method's name are defined and retrieved from {@link CamelCMISActions}.
*/
@SuppressWarnings("unused")
+ public Folder createFolderByPath(Exchange exchange) throws Exception {
+ validateRequiredHeader(exchange, PropertyIds.PATH);
+ validateRequiredHeader(exchange, PropertyIds.NAME);
+
+ Message message = exchange.getIn();
+ Map<String, Object> cmisProperties = filterTypeProperties(message.getHeaders());
+ String parentPath = message.getHeader(PropertyIds.PATH, String.class);
+
+ CmisObject result = getSessionFacade().getObjectByPath(parentPath);
+
+ if (result instanceof Folder) {
+ return ((Folder) result).createFolder(cmisProperties);
+ }
+
+ throw new CamelCmisException("Can not create folder on path:" + parentPath);
+ }
+
+ /**
+ * This method is called via reflection.
+ * It is not safe to delete it or rename it!
+ * Method's name are defined and retrieved from {@link CamelCMISActions}.
+ */
+ @SuppressWarnings("unused")
public List<String> deleteFolder(Exchange exchange) throws Exception {
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
@@ -160,9 +258,11 @@ public class CMISProducer extends DefaultProducer {
Message message = exchange.getIn();
String objectId = message.getHeader(CamelCMISConstants.CMIS_OBJECT_ID, String.class);
+ Boolean allVersions = message.getHeader(CamelCMISConstants.ALL_VERSIONS, Boolean.class);
+
Document document = (Document) getSessionFacade().getObjectById(objectId);
- document.deleteAllVersions();
+ document.delete(allVersions);
}
/**
@@ -171,7 +271,7 @@ public class CMISProducer extends DefaultProducer {
* Method's name are defined and retrieved from {@link CamelCMISActions}.
*/
@SuppressWarnings("unused")
- public void moveDocument(Exchange exchange) throws Exception {
+ public CmisObject moveDocument(Exchange exchange) throws Exception {
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_DESTIONATION_FOLDER_ID);
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_SOURCE_FOLDER_ID);
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
@@ -194,13 +294,13 @@ public class CMISProducer extends DefaultProducer {
}
try {
- document.move(sourceFolder, targetFolder);
- log.info("Moved document from " + sourceFolder.getName() + " to " + targetFolder.getName());
+ log.info("Moving document from " + sourceFolder.getName() + " to " + targetFolder.getName());
+ return document.move(sourceFolder, targetFolder);
} catch (Exception e) {
throw new CamelCmisException("Cannot move document to folder " + targetFolder.getName() + " : " + e.getMessage(), e);
}
} else {
- log.error("Document is null, cannot move!");
+ throw new CamelCmisException("Document is null, cannot move!");
}
}
@@ -210,7 +310,7 @@ public class CMISProducer extends DefaultProducer {
* Method's name are defined and retrieved from {@link CamelCMISActions}.
*/
@SuppressWarnings("unused")
- public Map<String, String> moveFolder(Exchange exchange) throws Exception {
+ public FileableCmisObject moveFolder(Exchange exchange) throws Exception {
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_DESTIONATION_FOLDER_ID);
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
@@ -221,11 +321,7 @@ public class CMISProducer extends DefaultProducer {
Folder toBeMoved = (Folder) getSessionFacade().getObjectById(objectId);
Folder targetFolder = (Folder) getSessionFacade().getObjectById(destinationFolderId);
-
- Map<String, String> folders = copyFolderRecursive(targetFolder, toBeMoved);
- toBeMoved.deleteTree(true, UnfileObject.DELETE, true);
-
- return folders;
+ return toBeMoved.move(toBeMoved.getFolderParent(), targetFolder);
}
/**
@@ -255,7 +351,7 @@ public class CMISProducer extends DefaultProducer {
* Method's name are defined and retrieved from {@link CamelCMISActions}.
*/
@SuppressWarnings("unused")
- public Map<String, String> copyFolder(Exchange exchange) throws Exception {
+ public Map<String, CmisObject> copyFolder(Exchange exchange) throws Exception {
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_DESTIONATION_FOLDER_ID);
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
@@ -267,27 +363,45 @@ public class CMISProducer extends DefaultProducer {
Folder destinationFolder = (Folder) getSessionFacade().getObjectById(destinationFolderId);
Folder toCopyFolder = (Folder) getSessionFacade().getObjectById(toCopyFolderId);
- return copyFolderRecursive(destinationFolder, toCopyFolder);
+ Map<String, CmisObject> result = new HashMap<>();
+ return copyFolderRecursive(destinationFolder, toCopyFolder, result);
+ }
+
+ /**
+ * This method is called via reflection.
+ * It is not safe to delete it or rename it!
+ * Method's name are defined and retrieved from {@link CamelCMISActions}.
+ */
+ @SuppressWarnings("unused")
+ public ItemIterable<CmisObject> listFolder(Exchange exchange) throws Exception {
+ validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
+
+ Message message = exchange.getIn();
+
+ String sourceFolderId = message.getHeader(CamelCMISConstants.CMIS_OBJECT_ID, String.class);
+ Folder sourceFolder = (Folder) getSessionFacade().getObjectById(sourceFolderId);
+
+ return sourceFolder.getChildren();
}
- private Map<String, String> copyFolderRecursive(Folder destinationFolder, Folder toCopyFolder) {
+ private Map<String, CmisObject> copyFolderRecursive(Folder destinationFolder, Folder toCopyFolder, Map<String, CmisObject> result) {
Map<String, Object> folderProperties = new HashMap<>();
folderProperties.put(PropertyIds.NAME, toCopyFolder.getName());
folderProperties.put(PropertyIds.OBJECT_TYPE_ID, toCopyFolder.getBaseTypeId().value());
- Map<String, String> folders = new HashMap<>();
Folder newFolder = destinationFolder.createFolder(folderProperties);
- folders.put(toCopyFolder.getId(), newFolder.getId());
- copyChildren(newFolder, toCopyFolder);
- return folders;
+ result.put(toCopyFolder.getId(), newFolder);
+ copyChildren(newFolder, toCopyFolder, result);
+ return result;
}
- private void copyChildren(Folder destinationFolder, Folder toCopyFolder) {
+ private void copyChildren(Folder destinationFolder, Folder toCopyFolder, Map<String, CmisObject> result) {
ItemIterable<CmisObject> immediateChildren = toCopyFolder.getChildren();
for (CmisObject child : immediateChildren) {
if (child instanceof Document) {
- ((Document) child).copy(destinationFolder);
+ Document newDocument = ((Document) child).copy(destinationFolder);
+ result.put(child.getId(), newDocument);
} else if (child instanceof Folder) {
- copyFolderRecursive(destinationFolder, (Folder) child);
+ copyFolderRecursive(destinationFolder, (Folder) child, result);
}
}
}
@@ -312,7 +426,7 @@ public class CMISProducer extends DefaultProducer {
return object;
} catch (Exception e) {
- throw new CamelCmisObjectNotFoundException("Object with id: " + objectId + " can not be found!");
+ throw new CamelCmisObjectNotFoundException("Object with id: " + objectId + " can not be found!", e);
}
}
@@ -322,7 +436,7 @@ public class CMISProducer extends DefaultProducer {
* Method's name are defined and retrieved from {@link CamelCMISActions}.
*/
@SuppressWarnings("unused")
- public void checkIn(Exchange exchange) throws Exception {
+ public ObjectId checkIn(Exchange exchange) throws Exception {
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
Message message = exchange.getIn();
@@ -335,12 +449,19 @@ public class CMISProducer extends DefaultProducer {
byte[] bytes = message.getBody(byte[].class);
Document document = (Document) getSessionFacade().getObjectById(objectId);
+ if (fileName == null) {
+ fileName = document.getName();
+ }
Map<String, Object> properties = filterTypeProperties(message.getHeaders());
ContentStream contentStream = getSessionFacade().createContentStream(fileName, bytes, mimeType);
- document.checkIn(true, properties, contentStream, checkInComment);
-
+ try {
+ return document.checkIn(true, properties, contentStream, checkInComment);
+ } catch (Exception e) {
+ document.cancelCheckOut();
+ throw e;
+ }
}
/**
@@ -349,7 +470,7 @@ public class CMISProducer extends DefaultProducer {
* Method's name are defined and retrieved from {@link CamelCMISActions}.
*/
@SuppressWarnings("unused")
- public void checkOut(Exchange exchange) throws Exception {
+ public ObjectId checkOut(Exchange exchange) throws Exception {
validateRequiredHeader(exchange, CamelCMISConstants.CMIS_OBJECT_ID);
Message message = exchange.getIn();
@@ -357,7 +478,8 @@ public class CMISProducer extends DefaultProducer {
String objectId = message.getHeader(CamelCMISConstants.CMIS_OBJECT_ID, String.class);
Document document = (Document) getSessionFacade().getObjectById(objectId);
- document.checkOut();
+
+ return document.checkOut();
}
/**
diff --git a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CamelCMISActions.java b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CamelCMISActions.java
index c7163c8..fa4861c 100644
--- a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CamelCMISActions.java
+++ b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CamelCMISActions.java
@@ -38,7 +38,19 @@ public enum CamelCMISActions {
CHECK_OUT { public String getMethodName() {
return "checkOut"; }},
CANCEL_CHECK_OUT { public String getMethodName() {
- return "cancelCheckOut"; }};
+ return "cancelCheckOut"; }},
+ GET_FOLDER { public String getMethodName() {
+ return "getFolder"; }},
+ LIST_FOLDER { public String getMethodName() {
+ return "listFolder"; }},
+ FIND_OBJECT_BY_ID { public String getMethodName() {
+ return "findObjectById"; }},
+ FIND_OBJECT_BY_PATH { public String getMethodName() {
+ return "findObjectByPath"; }},
+ CREATE_FOLDER_BY_PATH { public String getMethodName() {
+ return "createFolderByPath"; }},
+ DOWNLOAD_DOCUMENT { public String getMethodName() {
+ return "downloadDocument"; }};
public abstract String getMethodName();
}
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 029b11a..1a380e8 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
@@ -29,5 +29,7 @@ public interface CamelCMISConstants {
String CAMEL_CMIS_RETRIEVE_CONTENT = "CamelCMISRetrieveContent";
String CAMEL_CMIS_READ_SIZE = "CamelCMISReadSize";
String CAMEL_CMIS_CONTENT_STREAM = "CamelCMISContent";
+ String ALL_VERSIONS = "CamelCMISAllVersions";
}
+
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 e6e1299..14a0efb 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
@@ -31,6 +31,7 @@ import org.apache.camel.RuntimeCamelException;
import org.apache.camel.builder.RouteBuilder;
import org.apache.chemistry.opencmis.client.api.CmisObject;
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.exceptions.CmisObjectNotFoundException;
@@ -285,12 +286,9 @@ public class CMISProducerTest extends CMISTestSupport {
template.send(exchange);
- Map<String, String> movedFolders = exchange.getOut().getBody(HashMap.class);
+ FileableCmisObject movedFolder = exchange.getOut().getBody(FileableCmisObject.class);
-
- Folder movedFolder = (Folder) createSession().getObject(movedFolders.get(toBeMoved.getId()));
-
- assertEquals(movedFolder.getParentId(), destinationFolder.getId());
+ assertEquals(movedFolder.getParents().get(0).getId(), destinationFolder.getId());
}
@Test
@@ -346,10 +344,10 @@ public class CMISProducerTest extends CMISTestSupport {
template.send(exchange);
- Map<String, String> copiedFolders = exchange.getOut().getBody(HashMap.class);
+ Map<String, CmisObject> copiedFolders = exchange.getOut().getBody(HashMap.class);
Folder copy = (Folder) createSession().getObject(copiedFolders.get(folder.getId()));
assertEquals(folder.getName(), copy.getName());
assertNotEquals(folder.getId(), copy.getId());
}
-}
+}
\ No newline at end of file
diff --git a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISTestSupport.java b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISTestSupport.java
index f95b00f..edafa51 100644
--- a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISTestSupport.java
+++ b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISTestSupport.java
@@ -51,9 +51,9 @@ import org.junit.BeforeClass;
public class CMISTestSupport extends CamelTestSupport {
protected static final String CMIS_ENDPOINT_TEST_SERVER
- = "http://localhost:%s/chemistry-opencmis-server-inmemory/atom11";
+ = "http://localhost:%s/chemistry-opencmis-server-inmemory/atom11";
protected static final String OPEN_CMIS_SERVER_WAR_PATH
- = "target/dependency/chemistry-opencmis-server-inmemory.war";
+ = "target/dependency/chemistry-opencmis-server-inmemory.war";
protected static Server cmisServer;
protected static int port;
@@ -135,7 +135,7 @@ public class CMISTestSupport extends CamelTestSupport {
}
protected Document createTextDocument(Folder newFolder, String content, String fileName)
- throws UnsupportedEncodingException {
+ throws UnsupportedEncodingException {
byte[] buf = content.getBytes("UTF-8");
ByteArrayInputStream input = new ByteArrayInputStream(buf);
ContentStream contentStream = createSession().getObjectFactory()