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 2017/03/14 17:34:43 UTC

[05/10] camel git commit: CAMEL-10791-added option to handle empty directories while unzipping

CAMEL-10791-added option to handle empty directories while unzipping


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/033bb9d9
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/033bb9d9
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/033bb9d9

Branch: refs/heads/master
Commit: 033bb9d9a1f0db458c7121d93aabeefe6d4bc476
Parents: 741b047
Author: onders86 <on...@gmail.com>
Authored: Mon Mar 13 11:04:44 2017 +0300
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Mar 14 18:29:38 2017 +0100

----------------------------------------------------------------------
 .../camel/dataformat/zipfile/ZipFileDataFormat.java   | 14 ++++++++++++++
 .../apache/camel/dataformat/zipfile/ZipIterator.java  |  7 +++++++
 2 files changed, 21 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/033bb9d9/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java
index b251201..3704d94 100644
--- a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java
+++ b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java
@@ -39,6 +39,7 @@ import static org.apache.camel.Exchange.FILE_NAME;
  */
 public class ZipFileDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
     private boolean usingIterator;
+    private boolean supportEmptyDirectory;
 
     @Override
     public String getDataFormatName() {
@@ -72,6 +73,11 @@ public class ZipFileDataFormat extends ServiceSupport implements DataFormat, Dat
 
     @Override
     public Object unmarshal(final Exchange exchange, final InputStream inputStream) throws Exception {
+        if (supportEmptyDirectory) {
+            exchange.getIn().setHeader("unzipEmptyDirectorySupported", true);
+        } else {
+            exchange.getIn().setHeader("unzipEmptyDirectorySupported", false);
+        }
         if (usingIterator) {
             return new ZipIterator(exchange.getIn());
         } else {
@@ -104,6 +110,14 @@ public class ZipFileDataFormat extends ServiceSupport implements DataFormat, Dat
     public void setUsingIterator(boolean usingIterator) {
         this.usingIterator = usingIterator;
     }
+    
+    public boolean isSupportEmptyDirectory() {
+        return supportEmptyDirectory;
+    }
+
+    public void setSupportEmptyDirectory(boolean supportEmptyDirectory) {
+        this.supportEmptyDirectory = supportEmptyDirectory;
+    }
 
     @Override
     protected void doStart() throws Exception {

http://git-wip-us.apache.org/repos/asf/camel/blob/033bb9d9/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
----------------------------------------------------------------------
diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
index 77312a3..6d58ad8 100644
--- a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
+++ b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
@@ -40,11 +40,13 @@ public class ZipIterator implements Iterator<Message>, Closeable {
     static final Logger LOGGER = LoggerFactory.getLogger(ZipIterator.class);
     
     private final Message inputMessage;
+    private final boolean unzipEmptyDirectorySupported;
     private volatile ZipInputStream zipInputStream;
     private volatile Message parent;
     
     public ZipIterator(Message inputMessage) {
         this.inputMessage = inputMessage;
+        this.unzipEmptyDirectorySupported = (boolean)inputMessage.getHeader("unzipEmptyDirectorySupported");
         InputStream inputStream = inputMessage.getBody(InputStream.class);
         if (inputStream instanceof ZipInputStream) {
             zipInputStream = (ZipInputStream)inputStream;
@@ -129,6 +131,11 @@ public class ZipIterator implements Iterator<Message>, Closeable {
         while ((entry = zipInputStream.getNextEntry()) != null) {
             if (!entry.isDirectory()) {
                 return entry;
+            } else {
+                if (unzipEmptyDirectorySupported) {
+                    ZipEntry dirEntry = new ZipEntry(entry.getName() + ".");
+                    return dirEntry;
+                }
             }
         }