You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2022/10/13 14:27:05 UTC

[camel] branch CAMEL-16484/dropbox-v5 created (now 3713489e8c4)

This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a change to branch CAMEL-16484/dropbox-v5
in repository https://gitbox.apache.org/repos/asf/camel.git


      at 3713489e8c4 CAMEL-16484: camel-dropbox - Bump to Dropbox 5.4.2

This branch includes the following new commits:

     new dcc2e4e0af3 CAMEL-16484: camel-dropbox - Fix existing tests and doc
     new 3713489e8c4 CAMEL-16484: camel-dropbox - Bump to Dropbox 5.4.2

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[camel] 02/02: CAMEL-16484: camel-dropbox - Bump to Dropbox 5.4.2

Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a commit to branch CAMEL-16484/dropbox-v5
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 3713489e8c40bfaa245180f4257a242f4cfd72b7
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Thu Oct 13 16:26:24 2022 +0200

    CAMEL-16484: camel-dropbox - Bump to Dropbox 5.4.2
---
 camel-dependencies/pom.xml                         |   2 +-
 .../apache/camel/component/dropbox/dropbox.json    |   2 +-
 .../src/main/docs/dropbox-component.adoc           |   9 +-
 .../dropbox/DropboxComponentVerifierExtension.java |   5 +-
 .../component/dropbox/DropboxConfiguration.java    |   2 +-
 .../component/dropbox/core/DropboxAPIFacade.java   | 109 +++++++++------------
 .../component/dropbox/dto/DropboxSearchResult.java |   8 +-
 .../consumer/DropboxScheduledPollConsumer.java     |   4 +-
 .../DropboxScheduledPollSearchConsumer.java        |  10 +-
 .../integration/producer/DropboxGetProducer.java   |   4 +-
 .../integration/producer/DropboxProducer.java      |   8 +-
 .../integration/producer/DropboxPutProducer.java   |   4 +-
 .../producer/DropboxSearchProducer.java            |  10 +-
 .../dropbox/integration/DropboxTestSupport.java    |  17 ++--
 parent/pom.xml                                     |   2 +-
 15 files changed, 88 insertions(+), 108 deletions(-)

diff --git a/camel-dependencies/pom.xml b/camel-dependencies/pom.xml
index 0650428be3a..7961773bdec 100644
--- a/camel-dependencies/pom.xml
+++ b/camel-dependencies/pom.xml
@@ -174,7 +174,7 @@
     <dnsjava-version>3.5.1</dnsjava-version>
     <docker-java-version>3.2.13</docker-java-version>
     <dozer-version>6.5.2</dozer-version>
-    <dropbox-version>3.2.0</dropbox-version>
+    <dropbox-version>5.4.2</dropbox-version>
     <eddsa-version>0.3.0</eddsa-version>
     <egit-github-core-version>2.1.5</egit-github-core-version>
     <ehcache3-version>3.10.1</ehcache3-version>
diff --git a/components/camel-dropbox/src/generated/resources/org/apache/camel/component/dropbox/dropbox.json b/components/camel-dropbox/src/generated/resources/org/apache/camel/component/dropbox/dropbox.json
index 03f023a154c..626adb07be2 100644
--- a/components/camel-dropbox/src/generated/resources/org/apache/camel/component/dropbox/dropbox.json
+++ b/components/camel-dropbox/src/generated/resources/org/apache/camel/component/dropbox/dropbox.json
@@ -53,7 +53,7 @@
     "newRemotePath": { "kind": "parameter", "displayName": "New Remote Path", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "Destination file or folder" },
     "uploadMode": { "kind": "parameter", "displayName": "Upload Mode", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.dropbox.util.DropboxUploadMode", "enum": [ "add", "force" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "Which mode to upload. in case of add the new fi [...]
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may other [...]
-    "client": { "kind": "parameter", "displayName": "Client", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "com.dropbox.core.v2.DbxClientV2", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "To use an existing DbxClient instance as DropBox client." },
+    "client": { "kind": "parameter", "displayName": "Client", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "com.dropbox.core.v2.DbxClientV2", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "To use an existing DbxClient instance as Dropbox client." },
     "accessToken": { "kind": "parameter", "displayName": "Access Token", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "The access token to make API requests for a specific Dropbox user" },
     "apiKey": { "kind": "parameter", "displayName": "Api Key", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "The apiKey to make API requests for a specific Dropbox user" },
     "apiSecret": { "kind": "parameter", "displayName": "Api Secret", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "The apiSecret to make API requests for a specific Dropbox user" },
diff --git a/components/camel-dropbox/src/main/docs/dropbox-component.adoc b/components/camel-dropbox/src/main/docs/dropbox-component.adoc
index c62480acb8d..608a49f9c3a 100644
--- a/components/camel-dropbox/src/main/docs/dropbox-component.adoc
+++ b/components/camel-dropbox/src/main/docs/dropbox-component.adoc
@@ -335,13 +335,8 @@ The following objects are set on message body result:
 |===
 |Object type |Description
 
-|`List<DbxEntry>` |list of file path founded. For more information on this object refer to
-Dropbox documentation,
+|`List<com.dropbox.core.v2.files.SearchMatchV2>` |list of file path founded. For more information on this object refer to
+https://javadoc.io/doc/com.dropbox.core/dropbox-core-sdk/latest/com/dropbox/core/v2/files/SearchMatchV2.html[Dropbox documentation].
 |===
 
-
-
- 
-
-
 include::spring-boot:partial$starter.adoc[]
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java
index cd3bc740b83..a993eec2902 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java
@@ -64,10 +64,11 @@ public class DropboxComponentVerifierExtension extends DefaultComponentVerifierE
 
         try {
             // Create Dropbox client
-            DbxRequestConfig config = new DbxRequestConfig(clientId, Locale.getDefault().toString());
+            DbxRequestConfig config = DbxRequestConfig.newBuilder(clientId)
+                    .withUserLocaleFrom(Locale.getDefault())
+                    .build();
             DbxClientV2 client = new DbxClientV2(config, token);
             client.users().getCurrentAccount();
-            client = null;
         } catch (Exception e) {
             builder.error(ResultErrorBuilder
                     .withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxConfiguration.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxConfiguration.java
index 45dd768de62..67020218fe9 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxConfiguration.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxConfiguration.java
@@ -74,7 +74,7 @@ public class DropboxConfiguration {
     private DbxClientV2 client;
 
     /**
-     * To use an existing DbxClient instance as DropBox client.
+     * To use an existing DbxClient instance as Dropbox client.
      */
     public void setClient(DbxClientV2 client) {
         this.client = client;
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/core/DropboxAPIFacade.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/core/DropboxAPIFacade.java
index a168f29b756..9a4da2686e2 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/core/DropboxAPIFacade.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/core/DropboxAPIFacade.java
@@ -23,10 +23,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.AbstractMap;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
-import java.util.List;
 import java.util.Map;
 
 import com.dropbox.core.DbxDownloader;
@@ -36,8 +34,8 @@ import com.dropbox.core.v2.files.FileMetadata;
 import com.dropbox.core.v2.files.ListFolderErrorException;
 import com.dropbox.core.v2.files.ListFolderResult;
 import com.dropbox.core.v2.files.Metadata;
-import com.dropbox.core.v2.files.SearchMatch;
-import com.dropbox.core.v2.files.SearchResult;
+import com.dropbox.core.v2.files.SearchOptions;
+import com.dropbox.core.v2.files.SearchV2Result;
 import com.dropbox.core.v2.files.WriteMode;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.dropbox.dto.DropboxDelResult;
@@ -50,7 +48,6 @@ import org.apache.camel.component.dropbox.util.DropboxException;
 import org.apache.camel.component.dropbox.util.DropboxResultCode;
 import org.apache.camel.component.dropbox.util.DropboxUploadMode;
 import org.apache.camel.support.builder.OutputStreamBuilder;
-import org.apache.camel.util.IOHelper;
 import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -83,7 +80,7 @@ public final class DropboxAPIFacade {
      *                          case a file with the same name already exists on dropbox. in case of "force" the file
      *                          already existing with the same name will be overridden.
      * @return                  a result object reporting for each remote path the result of the operation.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxFileUploadResult put(String localPath, String remotePath, DropboxUploadMode mode) throws DropboxException {
         // in case the remote path is not specified, the remotePath = localPath
@@ -114,10 +111,8 @@ public final class DropboxAPIFacade {
             }
             // in case the entry not exists on dropbox check if the filename
             // should be appended
-            if (!isPresent) {
-                if (dropboxPath.endsWith(DropboxConstants.DROPBOX_FILE_SEPARATOR)) {
-                    dropboxPath = dropboxPath + fileLocalPath.getName();
-                }
+            if (!isPresent && dropboxPath.endsWith(DropboxConstants.DROPBOX_FILE_SEPARATOR)) {
+                dropboxPath = dropboxPath + fileLocalPath.getName();
             }
 
             LOG.debug("Uploading: {},{}", fileLocalPath, dropboxPath);
@@ -192,10 +187,8 @@ public final class DropboxAPIFacade {
 
         // in case the entry not exists on dropbox check if the filename should
         // be appended
-        if (!isPresent) {
-            if (dropboxPath.endsWith(DropboxConstants.DROPBOX_FILE_SEPARATOR)) {
-                dropboxPath = dropboxPath + name;
-            }
+        if (!isPresent && dropboxPath.endsWith(DropboxConstants.DROPBOX_FILE_SEPARATOR)) {
+            dropboxPath = dropboxPath + name;
         }
 
         LOG.debug("Uploading message body: {}", dropboxPath);
@@ -215,87 +208,69 @@ public final class DropboxAPIFacade {
     }
 
     private FileMetadata putSingleFile(File inputFile, String dropboxPath, DropboxUploadMode mode) throws Exception {
-        FileInputStream inputStream = new FileInputStream(inputFile);
-        FileMetadata uploadedFile;
-        try {
+        try (FileInputStream inputStream = new FileInputStream(inputFile)) {
             WriteMode uploadMode;
             if (mode == DropboxUploadMode.force) {
                 uploadMode = WriteMode.OVERWRITE;
             } else {
                 uploadMode = WriteMode.ADD;
             }
-            uploadedFile = client.files().uploadBuilder(dropboxPath).withMode(uploadMode).uploadAndFinish(inputStream,
+            return client.files().uploadBuilder(dropboxPath).withMode(uploadMode).uploadAndFinish(inputStream,
                     inputFile.length());
-            return uploadedFile;
-        } finally {
-            IOHelper.close(inputStream);
         }
     }
 
     private FileMetadata putSingleBody(Exchange exchange, String dropboxPath, DropboxUploadMode mode) throws Exception {
         byte[] data = exchange.getIn().getMandatoryBody(byte[].class);
-        InputStream is = new ByteArrayInputStream(data);
-        try {
-            FileMetadata uploadedFile;
-            WriteMode uploadMode;
+        try (InputStream is = new ByteArrayInputStream(data)) {
+            final WriteMode uploadMode;
             if (mode == DropboxUploadMode.force) {
                 uploadMode = WriteMode.OVERWRITE;
             } else {
                 uploadMode = WriteMode.ADD;
             }
-            uploadedFile = client.files().uploadBuilder(dropboxPath).withMode(uploadMode).uploadAndFinish(is, data.length);
-            return uploadedFile;
-        } finally {
-            IOHelper.close(is);
+            return client.files().uploadBuilder(dropboxPath).withMode(uploadMode).uploadAndFinish(is, data.length);
         }
     }
 
     /**
-     * Search inside a remote path including its sub directories. The query param can be null.
+     * Search inside a remote path including its subdirectories. The query param can be null.
      *
      * @param  remotePath       the remote path where starting the search from
      * @param  query            a space-separated list of substrings to search for. A file matches only if it contains
      *                          all the substrings
      * @return                  a result object containing all the files found.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxSearchResult search(String remotePath, String query) throws DropboxException {
-        SearchResult listing;
-        List<SearchMatch> searchMatches;
         if (query == null) {
             LOG.debug("Search no query");
-            try {
-                listing = client.files().search(remotePath, null);
-                searchMatches = listing.getMatches();
-                return new DropboxSearchResult(searchMatches);
-            } catch (DbxException e) {
-                throw new DropboxException(remotePath + " does not exist or cannot obtain metadata", e);
-            }
         } else {
             LOG.debug("Search by query: {}", query);
-            try {
-                listing = client.files().search(remotePath, query);
-                searchMatches = listing.getMatches();
-                return new DropboxSearchResult(searchMatches);
-            } catch (DbxException e) {
-                throw new DropboxException(remotePath + " does not exist or cannot obtain metadata", e);
-            }
+        }
+        try {
+            SearchV2Result listing = client.files().searchV2Builder(query)
+                    .withOptions(SearchOptions.newBuilder().withPath(remotePath).build())
+                    .start();
+            return new DropboxSearchResult(listing.getMatches());
+        } catch (DbxException e) {
+            throw new DropboxException(String.format("%s does not exist or cannot obtain metadata", remotePath), e);
         }
     }
 
     /**
-     * Delete every files and subdirectories inside the remote directory. In case the remotePath is a file, delete the
+     * Delete every file and subdirectory inside the remote directory. In case the remotePath is a file, delete the
      * file.
      *
      * @param  remotePath       the remote location to delete
      * @return                  a result object with the result of the delete operation.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxDelResult del(String remotePath) throws DropboxException {
         try {
             client.files().deleteV2(remotePath);
         } catch (DbxException e) {
-            throw new DropboxException(remotePath + " does not exist or cannot obtain metadata", e);
+            throw new DropboxException(String.format("%s does not exist or cannot obtain metadata", remotePath), e);
         }
         return new DropboxDelResult(remotePath);
     }
@@ -306,7 +281,7 @@ public final class DropboxAPIFacade {
      * @param  remotePath       the existing remote path to be renamed
      * @param  newRemotePath    the new remote path substituting the old one
      * @return                  a result object with the result of the move operation.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxMoveResult move(String remotePath, String newRemotePath) throws DropboxException {
         try {
@@ -323,7 +298,7 @@ public final class DropboxAPIFacade {
      * @param  remotePath       the remote path where to download from
      * @return                  a result object with the content (ByteArrayOutputStream) of every files inside the
      *                          remote path.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxFileDownloadResult get(String remotePath) throws DropboxException {
         return new DropboxFileDownloadResult(downloadFilesInFolder(remotePath));
@@ -334,18 +309,24 @@ public final class DropboxAPIFacade {
             ListFolderResult folderResult = client.files().listFolder(path.equals("/") ? "" : path);
             Map<String, Object> returnMap = new LinkedHashMap<>();
             for (Metadata entry : folderResult.getEntries()) {
-                returnMap.put(entry.getPathDisplay(), downloadSingleFile(entry.getPathDisplay()).getValue());
+                Map.Entry<String, Object> singleFile = downloadSingleFile(entry.getPathDisplay());
+                if (singleFile == null) {
+                    continue;
+                }
+                returnMap.put(entry.getPathDisplay(), singleFile.getValue());
             }
             return returnMap;
         } catch (ListFolderErrorException e) {
-            try {
-                DbxDownloader<FileMetadata> listing = client.files().download(path);
+            try (DbxDownloader<FileMetadata> listing = client.files().download(path)) {
                 if (listing == null) {
-                    return Collections.emptyMap();
+                    return Map.of();
                 } else {
                     LOG.debug("downloading a single file...");
                     Map.Entry<String, Object> entry = downloadSingleFile(path);
-                    return Collections.singletonMap(entry.getKey(), entry.getValue());
+                    if (entry == null) {
+                        return Map.of();
+                    }
+                    return Map.of(entry.getKey(), entry.getValue());
                 }
             } catch (DbxException dbxException) {
                 throw new DropboxException(dbxException);
@@ -356,16 +337,14 @@ public final class DropboxAPIFacade {
     }
 
     private Map.Entry<String, Object> downloadSingleFile(String path) throws DropboxException {
-        try {
-            OutputStreamBuilder target = OutputStreamBuilder.withExchange(exchange);
-            DbxDownloader<FileMetadata> downloadedFile = client.files().download(path);
-            if (downloadedFile != null) {
-                downloadedFile.download(target);
-                LOG.debug("downloaded path={}", path);
-                return new AbstractMap.SimpleEntry<>(path, target.build());
-            } else {
+        try (OutputStreamBuilder target = OutputStreamBuilder.withExchange(exchange);
+             DbxDownloader<FileMetadata> downloadedFile = client.files().download(path)) {
+            if (downloadedFile == null) {
                 return null;
             }
+            downloadedFile.download(target);
+            LOG.debug("downloaded path={}", path);
+            return new AbstractMap.SimpleEntry<>(path, target.build());
         } catch (DbxException e) {
             throw new DropboxException(path + " does not exist or cannot obtain metadata", e);
         } catch (IOException e) {
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxSearchResult.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxSearchResult.java
index ce54a6f8841..cab9f9abaa5 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxSearchResult.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxSearchResult.java
@@ -20,17 +20,17 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import com.dropbox.core.v2.files.SearchMatch;
+import com.dropbox.core.v2.files.SearchMatchV2;
 
 public class DropboxSearchResult {
 
-    private final List<SearchMatch> found;
+    private final List<SearchMatchV2> found;
 
-    public DropboxSearchResult(List<SearchMatch> found) {
+    public DropboxSearchResult(List<SearchMatchV2> found) {
         this.found = new ArrayList<>(found);
     }
 
-    public List<SearchMatch> getFound() {
+    public List<SearchMatchV2> getFound() {
         return Collections.unmodifiableList(found);
     }
 
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java
index 36f82524e5c..91e328fc9ca 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java
@@ -47,7 +47,7 @@ public abstract class DropboxScheduledPollConsumer extends ScheduledPollConsumer
             //create dropbox client
             configuration.createClient();
 
-            LOG.debug("Consumer DropBox client created");
+            LOG.debug("Consumer Dropbox client created");
         }
 
         super.doStart();
@@ -61,7 +61,7 @@ public abstract class DropboxScheduledPollConsumer extends ScheduledPollConsumer
         if (configuration.getClient() == null) {
             configuration.setClient(null);
 
-            LOG.debug("Consumer DropBox client deleted");
+            LOG.debug("Consumer Dropbox client deleted");
         }
         super.doStop();
     }
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollSearchConsumer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollSearchConsumer.java
index 0e2beadf3a0..7a92cb82a5e 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollSearchConsumer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollSearchConsumer.java
@@ -16,7 +16,8 @@
  */
 package org.apache.camel.component.dropbox.integration.consumer;
 
-import com.dropbox.core.v2.files.SearchMatch;
+import com.dropbox.core.v2.files.Metadata;
+import com.dropbox.core.v2.files.SearchMatchV2;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.dropbox.DropboxConfiguration;
@@ -45,9 +46,10 @@ public class DropboxScheduledPollSearchConsumer extends DropboxScheduledPollCons
                     .search(configuration.getRemotePath(), configuration.getQuery());
 
             StringBuilder fileExtracted = new StringBuilder();
-            for (SearchMatch entry : result.getFound()) {
-                fileExtracted.append(entry.getMetadata().getName()).append("-").append(entry.getMetadata().getPathDisplay())
-                        .append("\n");
+            for (SearchMatchV2 entry : result.getFound()) {
+                Metadata metadata = entry.getMetadata().getMetadataValue();
+                fileExtracted.append(metadata.getName()).append('-').append(metadata.getPathDisplay())
+                        .append('\n');
             }
 
             exchange.getIn().setHeader(DropboxConstants.FOUND_FILES, fileExtracted.toString());
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxGetProducer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxGetProducer.java
index 457d0a40c9a..95ae5337c0a 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxGetProducer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxGetProducer.java
@@ -30,7 +30,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class DropboxGetProducer extends DropboxProducer {
-    private static final transient Logger LOG = LoggerFactory.getLogger(DropboxGetProducer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(DropboxGetProducer.class);
 
     public DropboxGetProducer(DropboxEndpoint endpoint, DropboxConfiguration configuration) {
         super(endpoint, configuration);
@@ -53,7 +53,7 @@ public class DropboxGetProducer extends DropboxProducer {
         } else {
             StringBuilder pathsExtracted = new StringBuilder();
             for (Map.Entry<String, Object> entry : map.entrySet()) {
-                pathsExtracted.append(entry.getKey()).append("\n");
+                pathsExtracted.append(entry.getKey()).append('\n');
             }
             exchange.getIn().setHeader(DropboxConstants.DOWNLOADED_FILES, pathsExtracted.toString());
             exchange.getIn().setBody(map);
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducer.java
index ce7599fae98..8aa07605095 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducer.java
@@ -24,12 +24,12 @@ import org.slf4j.LoggerFactory;
 
 public abstract class DropboxProducer extends DefaultProducer {
 
-    private static final transient Logger LOG = LoggerFactory.getLogger(DropboxProducer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(DropboxProducer.class);
 
     protected final DropboxEndpoint endpoint;
     protected final DropboxConfiguration configuration;
 
-    public DropboxProducer(DropboxEndpoint endpoint, DropboxConfiguration configuration) {
+    protected DropboxProducer(DropboxEndpoint endpoint, DropboxConfiguration configuration) {
         super(endpoint);
         this.endpoint = endpoint;
         this.configuration = configuration;
@@ -41,7 +41,7 @@ public abstract class DropboxProducer extends DefaultProducer {
             //create dropbox client
             configuration.createClient();
 
-            LOG.debug("Producer DropBox client created");
+            LOG.debug("Producer Dropbox client created");
         }
 
         super.doStart();
@@ -52,7 +52,7 @@ public abstract class DropboxProducer extends DefaultProducer {
         if (configuration.getClient() == null) {
             configuration.setClient(null);
 
-            LOG.debug("Producer DropBox client deleted");
+            LOG.debug("Producer Dropbox client deleted");
         }
         super.doStop();
     }
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxPutProducer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxPutProducer.java
index 03cbc54e176..b551f18629a 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxPutProducer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxPutProducer.java
@@ -32,7 +32,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class DropboxPutProducer extends DropboxProducer {
-    private static final transient Logger LOG = LoggerFactory.getLogger(DropboxPutProducer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(DropboxPutProducer.class);
 
     public DropboxPutProducer(DropboxEndpoint endpoint, DropboxConfiguration configuration) {
         super(endpoint, configuration);
@@ -59,7 +59,7 @@ public class DropboxPutProducer extends DropboxProducer {
         } else {
             StringBuilder pathsExtracted = new StringBuilder();
             for (Map.Entry<String, DropboxResultCode> entry : map.entrySet()) {
-                pathsExtracted.append(entry.getKey()).append("\n");
+                pathsExtracted.append(entry.getKey()).append('\n');
             }
             exchange.getIn().setHeader(DropboxConstants.UPLOADED_FILES, pathsExtracted.toString());
             exchange.getIn().setBody(map);
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxSearchProducer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxSearchProducer.java
index e0847c1bc82..8823be60942 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxSearchProducer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxSearchProducer.java
@@ -16,7 +16,8 @@
  */
 package org.apache.camel.component.dropbox.integration.producer;
 
-import com.dropbox.core.v2.files.SearchMatch;
+import com.dropbox.core.v2.files.Metadata;
+import com.dropbox.core.v2.files.SearchMatchV2;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.dropbox.DropboxConfiguration;
 import org.apache.camel.component.dropbox.DropboxEndpoint;
@@ -43,9 +44,10 @@ public class DropboxSearchProducer extends DropboxProducer {
                 .search(remotePath, query);
 
         StringBuilder fileExtracted = new StringBuilder();
-        for (SearchMatch entry : result.getFound()) {
-            fileExtracted.append(entry.getMetadata().getName()).append("-").append(entry.getMetadata().getPathDisplay())
-                    .append("\n");
+        for (SearchMatchV2 entry : result.getFound()) {
+            Metadata metadataValue = entry.getMetadata().getMetadataValue();
+            fileExtracted.append(metadataValue.getName()).append('-').append(metadataValue.getPathDisplay())
+                    .append('\n');
         }
         exchange.getIn().setHeader(DropboxConstants.FOUND_FILES, fileExtracted.toString());
         exchange.getIn().setBody(result.getFound());
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java
index 4664a6b684b..01963ca4471 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java
@@ -45,7 +45,7 @@ public class DropboxTestSupport extends CamelTestSupport {
     protected String refreshToken;
     protected Long expireIn;
 
-    private DbxClientV2 client;
+    private final DbxClientV2 client;
 
     protected DropboxTestSupport() {
         properties = loadProperties();
@@ -91,12 +91,12 @@ public class DropboxTestSupport extends CamelTestSupport {
         try {
             removeDir(name);
         } finally {
-            client.files().createFolder(name);
+            client.files().createFolderV2(name);
         }
     }
 
     protected void removeDir(String name) throws DbxException {
-        client.files().delete(name);
+        client.files().deleteV2(name);
     }
 
     protected void createFile(String fileName, String content) throws IOException {
@@ -113,12 +113,13 @@ public class DropboxTestSupport extends CamelTestSupport {
     }
 
     protected String getFileContent(String path) throws DbxException, IOException {
-        ByteArrayOutputStream target = new ByteArrayOutputStream();
-        DbxDownloader<FileMetadata> downloadedFile = client.files().download(path);
-        if (downloadedFile != null) {
-            downloadedFile.download(target);
+        try (ByteArrayOutputStream target = new ByteArrayOutputStream();
+             DbxDownloader<FileMetadata> downloadedFile = client.files().download(path)) {
+            if (downloadedFile != null) {
+                downloadedFile.download(target);
+            }
+            return target.toString();
         }
-        return new String(target.toByteArray());
     }
 
     @Override
diff --git a/parent/pom.xml b/parent/pom.xml
index a0bd149591e..065670bb149 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -153,7 +153,7 @@
         <djl-tensorflow-native-version>2.4.1</djl-tensorflow-native-version>
         <docker-java-version>3.2.13</docker-java-version>
         <dozer-version>6.5.2</dozer-version>
-        <dropbox-version>3.2.0</dropbox-version>
+        <dropbox-version>5.4.2</dropbox-version>
         <debezium-version>1.9.6.Final</debezium-version>
         <debezium-mysql-connector-version>8.0.28</debezium-mysql-connector-version>
         <eddsa-version>0.3.0</eddsa-version>


[camel] 01/02: CAMEL-16484: camel-dropbox - Fix existing tests and doc

Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a commit to branch CAMEL-16484/dropbox-v5
in repository https://gitbox.apache.org/repos/asf/camel.git

commit dcc2e4e0af371eecbed8428b9b5e901bfdbd9ee2
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Thu Oct 13 16:02:11 2022 +0200

    CAMEL-16484: camel-dropbox - Fix existing tests and doc
---
 .../src/main/docs/dropbox-component.adoc             |  4 ++--
 .../consumer/DropboxConsumerGetSingleIT.java         | 20 ++++++++++----------
 .../consumer/DropboxConsumerSearchQueryIT.java       | 20 ++++++++++----------
 .../producer/DropboxProducerGetFolderIT.java         | 11 +++++++----
 .../producer/DropboxProducerPutSingleFileIT.java     | 19 ++++++++++---------
 5 files changed, 39 insertions(+), 35 deletions(-)

diff --git a/components/camel-dropbox/src/main/docs/dropbox-component.adoc b/components/camel-dropbox/src/main/docs/dropbox-component.adoc
index eb5d89c370d..c62480acb8d 100644
--- a/components/camel-dropbox/src/main/docs/dropbox-component.adoc
+++ b/components/camel-dropbox/src/main/docs/dropbox-component.adoc
@@ -173,9 +173,9 @@ The following objects are set on message body result:
 |===
 |Object type |Description
 
-|`ByteArrayOutputStream` |in case of single file download, stream representing the file downloaded
+|`byte[]` or `CachedOutputStream`  if stream caching is enabled |in case of single file download, stream representing the file downloaded
 
-|`Map<String, ByteArrayOutputStream>` |in case of multiple files download, a map with as key the path of the
+|`Map<String, byte[]>` or `Map<String, CachedOutputStream>` if stream caching is enabled |in case of multiple files download, a map with as key the path of the
 remote file downloaded and as value the stream representing the file
 downloaded
 |===
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerGetSingleIT.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerGetSingleIT.java
index dad8edc993a..89cf369fdcc 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerGetSingleIT.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerGetSingleIT.java
@@ -24,21 +24,21 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
 
 @EnabledIf("org.apache.camel.component.dropbox.integration.DropboxTestSupport#hasCredentials")
-public class DropboxConsumerGetSingleIT extends DropboxTestSupport {
+class DropboxConsumerGetSingleIT extends DropboxTestSupport {
 
     public static final String FILE_NAME = "myFile.txt";
 
     @Test
-    public void testCamelDropbox() throws Exception {
+    void testCamelDropbox() throws Exception {
         final String content = "Hi camels";
         createFile(FILE_NAME, content);
 
-        context.start();
-
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived(content);
         mock.expectedHeaderReceived(DropboxResultHeader.DOWNLOADED_FILE.name(), String.format("%s/%s", workdir, FILE_NAME));
+
+        context.getRouteController().startRoute("consumer");
         mock.assertIsSatisfied();
     }
 
@@ -46,12 +46,12 @@ public class DropboxConsumerGetSingleIT extends DropboxTestSupport {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from(String.format("dropbox://get?accessToken={{accessToken}}" +
-                                   "&expireIn={{expireIn}}" +
-                                   "&refreshToken={{refreshToken}}" +
-                                   "&apiKey={{apiKey}}&apiSecret={{apiSecret}}" +
-                                   "&remotePath=%s/%s",
-                        workdir, FILE_NAME))
+                fromF("dropbox://get?accessToken={{accessToken}}" +
+                      "&expireIn={{expireIn}}" +
+                      "&refreshToken={{refreshToken}}" +
+                      "&apiKey={{apiKey}}&apiSecret={{apiSecret}}" +
+                      "&remotePath=%s/%s",
+                        workdir, FILE_NAME)
                                 .autoStartup(false).id("consumer")
                                 .to("mock:result");
             }
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerSearchQueryIT.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerSearchQueryIT.java
index bc6b83c29f4..925d6ec0177 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerSearchQueryIT.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerSearchQueryIT.java
@@ -24,20 +24,20 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
 
 @EnabledIf("org.apache.camel.component.dropbox.integration.DropboxTestSupport#hasCredentials")
-public class DropboxConsumerSearchQueryIT extends DropboxTestSupport {
+class DropboxConsumerSearchQueryIT extends DropboxTestSupport {
 
     public static final String FILE_NAME = "myTestFile.txt";
 
     @Test
-    public void testCamelDropbox() throws Exception {
+    void testCamelDropbox() throws Exception {
         final String content = "Hi camels";
         createFile(FILE_NAME, content);
 
-        context.start();
-
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
         mock.message(0).header(DropboxResultHeader.FOUND_FILES.name()).contains(String.format("%s/%s", workdir, FILE_NAME));
+
+        context.getRouteController().startRoute("consumer");
         mock.assertIsSatisfied();
     }
 
@@ -45,12 +45,12 @@ public class DropboxConsumerSearchQueryIT extends DropboxTestSupport {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from(String.format("dropbox://search?accessToken={{accessToken}}" +
-                                   "&expireIn={{expireIn}}" +
-                                   "&refreshToken={{refreshToken}}" +
-                                   "&apiKey={{apiKey}}&apiSecret={{apiSecret}}" +
-                                   "&remotePath=%s&query=%s",
-                        workdir, FILE_NAME))
+                fromF("dropbox://search?accessToken={{accessToken}}" +
+                      "&expireIn={{expireIn}}" +
+                      "&refreshToken={{refreshToken}}" +
+                      "&apiKey={{apiKey}}&apiSecret={{apiSecret}}" +
+                      "&remotePath=%s&query=%s",
+                        workdir, FILE_NAME)
                                 .id("consumer").autoStartup(false)
                                 .to("mock:result");
             }
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderIT.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderIT.java
index efbca85bea8..a270cd16b34 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderIT.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderIT.java
@@ -31,7 +31,7 @@ import org.junit.jupiter.api.condition.EnabledIf;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @EnabledIf("org.apache.camel.component.dropbox.integration.DropboxTestSupport#hasCredentials")
-public class DropboxProducerGetFolderIT extends DropboxTestSupport {
+class DropboxProducerGetFolderIT extends DropboxTestSupport {
 
     public static final String FILE_NAME1 = "myFile.txt";
     public static final String FILE_NAME2 = "myFile2.txt";
@@ -45,17 +45,17 @@ public class DropboxProducerGetFolderIT extends DropboxTestSupport {
     }
 
     @Test
-    public void testCamelDropbox() throws Exception {
+    void testCamelDropbox() throws Exception {
         test("direct:start");
     }
 
     @Test
-    public void testCamelDropboxWithOptionInHeader() throws Exception {
+    void testCamelDropboxWithOptionInHeader() throws Exception {
         test("direct:start2");
     }
 
     @Test
-    public void testCamelDropboxHeaderHasPriorityOnParameter() throws Exception {
+    void testCamelDropboxHeaderHasPriorityOnParameter() throws Exception {
         test("direct:start3");
     }
 
@@ -79,6 +79,7 @@ public class DropboxProducerGetFolderIT extends DropboxTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 from("direct:start")
+                        .noStreamCaching()
                         .to("dropbox://get?accessToken={{accessToken}}" +
                             "&expireIn={{expireIn}}" +
                             "&refreshToken={{refreshToken}}" +
@@ -87,6 +88,7 @@ public class DropboxProducerGetFolderIT extends DropboxTestSupport {
                         .to("mock:result");
 
                 from("direct:start2")
+                        .noStreamCaching()
                         .setHeader(DropboxConstants.HEADER_REMOTE_PATH, constant(workdir))
                         .to("dropbox://get?accessToken={{accessToken}}" +
                             "&expireIn={{expireIn}}" +
@@ -95,6 +97,7 @@ public class DropboxProducerGetFolderIT extends DropboxTestSupport {
                         .to("mock:result");
 
                 from("direct:start3")
+                        .noStreamCaching()
                         .setHeader(DropboxConstants.HEADER_REMOTE_PATH, constant(workdir))
                         .to("dropbox://get?accessToken={{accessToken}}" +
                             "&expireIn={{expireIn}}" +
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileIT.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileIT.java
index f869ce66e88..7613ee7cf11 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileIT.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileIT.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.dropbox.integration.DropboxTestSupport;
 import org.apache.camel.component.dropbox.util.DropboxConstants;
@@ -35,14 +36,14 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 
 @EnabledIf("org.apache.camel.component.dropbox.integration.DropboxTestSupport#hasCredentials")
-public class DropboxProducerPutSingleFileIT extends DropboxTestSupport {
+class DropboxProducerPutSingleFileIT extends DropboxTestSupport {
     public static final String FILENAME = "newFile.txt";
 
     @Test
-    public void testCamelDropboxWithOptionInHeader() throws Exception {
+    void testCamelDropboxWithOptionInHeader() throws Exception {
         final Path file = Files.createTempFile("camel", ".txt");
         final Map<String, Object> headers = new HashMap<>();
         headers.put(DropboxConstants.HEADER_LOCAL_PATH, file.toAbsolutePath().toString());
@@ -53,25 +54,25 @@ public class DropboxProducerPutSingleFileIT extends DropboxTestSupport {
     }
 
     @Test
-    public void uploadBodyTest() throws Exception {
-        template.sendBodyAndHeader("direct:start", "Helo Camels", DropboxConstants.HEADER_UPLOAD_MODE, DropboxUploadMode.add);
+    void uploadBodyTest() throws Exception {
+        template.sendBodyAndHeader("direct:start", "Hello Camels", DropboxConstants.HEADER_UPLOAD_MODE, DropboxUploadMode.add);
 
         assertFileUploaded();
     }
 
     @Test
-    public void uploadIfExistsAddTest() throws Exception {
+    void uploadIfExistsAddTest() throws Exception {
         createFile(FILENAME, "content");
         final Path file = Files.createTempFile("camel", ".txt");
         final Map<String, Object> headers = new HashMap<>();
         headers.put(DropboxConstants.HEADER_LOCAL_PATH, file.toAbsolutePath().toString());
         headers.put(DropboxConstants.HEADER_UPLOAD_MODE, DropboxUploadMode.add);
-        assertThrows(DropboxException.class,
-                () -> template.sendBodyAndHeaders("direct:start", null, headers));
+        Exchange exchange = template.send("direct:start", ex -> ex.getIn().setHeaders(headers));
+        assertInstanceOf(DropboxException.class, exchange.getException());
     }
 
     @Test
-    public void uploadIfExistsForceTest() throws Exception {
+    void uploadIfExistsForceTest() throws Exception {
         final String newContent = UUID.randomUUID().toString();
         createFile(FILENAME, "Hi camels");
         final Path file = Files.createTempFile("camel", ".txt");