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 2023/03/30 09:14:19 UTC

[camel] 01/02: CAMEL-19223: camel-core - StreamCache to have position method

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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e91b40ae96eef0b6b5a14d7c8406a6cf54f822d8
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 30 10:51:44 2023 +0200

    CAMEL-19223: camel-core - StreamCache to have position method
---
 .../src/main/java/org/apache/camel/StreamCache.java         |  7 +++++++
 .../converter/stream/ByteArrayInputStreamCacheTest.java     | 13 +++++++++++--
 .../test/java/org/apache/camel/util/MessageHelperTest.java  |  5 +++++
 .../camel/converter/stream/ByteArrayInputStreamCache.java   |  7 +++++++
 .../apache/camel/converter/stream/FileInputStreamCache.java |  5 +++++
 .../org/apache/camel/converter/stream/InputStreamCache.java |  4 ++++
 .../java/org/apache/camel/converter/stream/ReaderCache.java |  5 +++++
 .../main/java/org/apache/camel/util/xml/SourceCache.java    |  5 +++++
 .../java/org/apache/camel/util/xml/StreamSourceCache.java   |  4 ++++
 9 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/StreamCache.java b/core/camel-api/src/main/java/org/apache/camel/StreamCache.java
index 622c9bc6e86..515ef286df8 100644
--- a/core/camel-api/src/main/java/org/apache/camel/StreamCache.java
+++ b/core/camel-api/src/main/java/org/apache/camel/StreamCache.java
@@ -77,4 +77,11 @@ public interface StreamCache {
      */
     long length();
 
+    /**
+     * Read position
+     *
+     * @return position or -1 if not supported in the cached implementation
+     */
+    long position();
+
 }
diff --git a/core/camel-core/src/test/java/org/apache/camel/converter/stream/ByteArrayInputStreamCacheTest.java b/core/camel-core/src/test/java/org/apache/camel/converter/stream/ByteArrayInputStreamCacheTest.java
index 890c5704e78..70066f6d58e 100644
--- a/core/camel-core/src/test/java/org/apache/camel/converter/stream/ByteArrayInputStreamCacheTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/converter/stream/ByteArrayInputStreamCacheTest.java
@@ -30,12 +30,21 @@ public class ByteArrayInputStreamCacheTest extends ContextTestSupport {
     @Test
     public void testByteArrayInputStream() throws Exception {
         ByteArrayInputStreamCache cache = new ByteArrayInputStreamCache(new ByteArrayInputStream("<foo>bar</foo>".getBytes()));
-
+        assertEquals(0, cache.position());
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         cache.writeTo(bos);
-
         String s = context.getTypeConverter().convertTo(String.class, bos);
         assertEquals("<foo>bar</foo>", s);
+        assertEquals(14, cache.position());
+
+        // reset and try again
+        cache.reset();
+        assertEquals(0, cache.position());
+        bos = new ByteArrayOutputStream();
+        cache.writeTo(bos);
+        s = context.getTypeConverter().convertTo(String.class, bos);
+        assertEquals("<foo>bar</foo>", s);
+        assertEquals(14, cache.position());
 
         IOHelper.close(cache, bos);
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java b/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java
index ab9947c9220..50bd014673d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java
@@ -80,6 +80,11 @@ public class MessageHelperTest {
             public long length() {
                 return 0;
             }
+
+            @Override
+            public long position() {
+                return 0;
+            }
         });
         MessageHelper.resetStreamCache(message);
         assertTrue(reset.get(), "Should have reset the stream cache");
diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/ByteArrayInputStreamCache.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/ByteArrayInputStreamCache.java
index 664793c4fa6..dac938d5238 100644
--- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/ByteArrayInputStreamCache.java
+++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/ByteArrayInputStreamCache.java
@@ -31,11 +31,13 @@ import org.apache.camel.util.IOHelper;
  */
 public class ByteArrayInputStreamCache extends FilterInputStream implements StreamCache {
 
+    private final ByteArrayInputStream bais;
     private final int length;
     private byte[] byteArrayForCopy;
 
     public ByteArrayInputStreamCache(ByteArrayInputStream in) {
         super(in);
+        this.bais = in;
         this.length = in.available();
     }
 
@@ -75,4 +77,9 @@ public class ByteArrayInputStreamCache extends FilterInputStream implements Stre
     public long length() {
         return length;
     }
+
+    @Override
+    public long position() {
+        return length - bais.available();
+    }
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
index c44abd8f7a4..2af4f309917 100644
--- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
+++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
@@ -116,6 +116,11 @@ public final class FileInputStreamCache extends InputStream implements StreamCac
         return length;
     }
 
+    @Override
+    public long position() {
+        return -1;
+    }
+
     @Override
     public int available() throws IOException {
         return getInputStream().available();
diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/InputStreamCache.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/InputStreamCache.java
index 2413809745c..5c7cf3c54ab 100644
--- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/InputStreamCache.java
+++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/InputStreamCache.java
@@ -56,4 +56,8 @@ public final class InputStreamCache extends ByteArrayInputStream implements Stre
     public long length() {
         return count;
     }
+
+    public long position() {
+        return available() - count;
+    }
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/ReaderCache.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/ReaderCache.java
index 70e5dd618e4..03ad1c283df 100644
--- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/ReaderCache.java
+++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/ReaderCache.java
@@ -69,6 +69,11 @@ public class ReaderCache extends StringReader implements StreamCache {
         return data.length();
     }
 
+    @Override
+    public long position() {
+        return -1;
+    }
+
     String getData() {
         return data;
     }
diff --git a/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/SourceCache.java b/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/SourceCache.java
index 4dc9b0f6d3e..f101997aff2 100644
--- a/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/SourceCache.java
+++ b/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/SourceCache.java
@@ -60,4 +60,9 @@ public final class SourceCache extends StringSource implements StreamCache {
     public long length() {
         return length;
     }
+
+    @Override
+    public long position() {
+        return -1;
+    }
 }
diff --git a/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/StreamSourceCache.java b/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/StreamSourceCache.java
index 6d61187f1fb..e800ee82c91 100644
--- a/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/StreamSourceCache.java
+++ b/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/StreamSourceCache.java
@@ -123,4 +123,8 @@ public final class StreamSourceCache extends StreamSource implements StreamCache
         }
     }
 
+    @Override
+    public long position() {
+        return -1;
+    }
 }