From commits-return-84308-archive-asf-public=cust-asf.ponee.io@camel.apache.org Wed Dec 25 12:10:28 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id 7DE43180629 for ; Wed, 25 Dec 2019 13:10:28 +0100 (CET) Received: (qmail 53748 invoked by uid 500); 25 Dec 2019 12:10:27 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 53739 invoked by uid 99); 25 Dec 2019 12:10:27 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 Dec 2019 12:10:27 +0000 Received: by gitbox.apache.org (ASF Mail Server at gitbox.apache.org, from userid 33) id 9E1228D80D; Wed, 25 Dec 2019 12:10:27 +0000 (UTC) Date: Wed, 25 Dec 2019 12:10:27 +0000 To: "commits@camel.apache.org" Subject: [camel] branch master updated: Camel 14325/add new functions (#3439) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Message-ID: <157727582687.16400.14842229226807030372@gitbox.apache.org> From: davsclaus@apache.org X-Git-Host: gitbox.apache.org X-Git-Repo: camel X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: d6f999a29eedeeeb0b420b7dbbbc7346a287563d X-Git-Newrev: 080114734341101b4b6e127489b7960c50b7f2b5 X-Git-Rev: 080114734341101b4b6e127489b7960c50b7f2b5 X-Git-NotificationType: ref_changed_plus_diff X-Git-Multimail-Version: 1.5.dev Auto-Submitted: auto-generated 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 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 filterTypeProperties(Map properties) throws Exception { Map 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 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 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 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 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 copyFolder(Exchange exchange) throws Exception { + public Map 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 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 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 copyFolderRecursive(Folder destinationFolder, Folder toCopyFolder) { + private Map copyFolderRecursive(Folder destinationFolder, Folder toCopyFolder, Map result) { Map folderProperties = new HashMap<>(); folderProperties.put(PropertyIds.NAME, toCopyFolder.getName()); folderProperties.put(PropertyIds.OBJECT_TYPE_ID, toCopyFolder.getBaseTypeId().value()); - Map 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 result) { ItemIterable 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 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 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 copiedFolders = exchange.getOut().getBody(HashMap.class); + Map 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()