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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git


The following commit(s) were added to refs/heads/master by this push:
     new b8babecbe [IO-831] Support getInputStream() for https & http in 
URIOrigin (#630)
b8babecbe is described below

commit b8babecbe42f2585c50f0dee7bc42b1201557151
Author: Thach Le <lephuocth...@gmail.com>
AuthorDate: Mon Jun 3 01:11:57 2024 +0700

    [IO-831] Support getInputStream() for https & http in URIOrigin (#630)
    
    * IO-831 Support https & http by URIOrigin
    
    * Update test
    
    * Fix typo
    
    * Fix comment
    
    * Remove extra whitespace
    
    * Missed refactoring
    
    ---------
    
    Co-authored-by: Gary Gregory <garydgreg...@users.noreply.github.com>
---
 .../apache/commons/io/build/AbstractOrigin.java    | 15 +++++++++++++
 .../org/apache/commons/io/build/URIOriginTest.java | 25 ++++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git a/src/main/java/org/apache/commons/io/build/AbstractOrigin.java 
b/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
index 3797c9cc5..fdaef97a9 100644
--- a/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
+++ b/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
@@ -33,12 +33,14 @@ import java.nio.file.Files;
 import java.nio.file.OpenOption;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.file.spi.FileSystemProvider;
 import java.util.Arrays;
 import java.util.Objects;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.RandomAccessFileMode;
 import org.apache.commons.io.RandomAccessFiles;
+import org.apache.commons.io.file.spi.FileSystemProviders;
 import org.apache.commons.io.input.CharSequenceInputStream;
 import org.apache.commons.io.input.CharSequenceReader;
 import org.apache.commons.io.input.ReaderInputStream;
@@ -402,6 +404,19 @@ public abstract class AbstractOrigin<T, B extends 
AbstractOrigin<T, B>> extends
             return Paths.get(get());
         }
 
+        @Override
+        public InputStream getInputStream(final OpenOption... options) throws 
IOException {
+            final URI uri = get();
+            final String scheme = uri.getScheme();
+            final FileSystemProvider fileSystemProvider = 
FileSystemProviders.installed().getFileSystemProvider(scheme);
+            if (fileSystemProvider != null) {
+                return Files.newInputStream(fileSystemProvider.getPath(uri), 
options);
+            }
+            if ("http".equalsIgnoreCase(scheme) || 
"https".equalsIgnoreCase(scheme)) {
+                return uri.toURL().openStream();
+            }
+            return Files.newInputStream(getPath(), options);
+        }
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/io/build/URIOriginTest.java 
b/src/test/java/org/apache/commons/io/build/URIOriginTest.java
index f609d7a21..6fe0f98be 100644
--- a/src/test/java/org/apache/commons/io/build/URIOriginTest.java
+++ b/src/test/java/org/apache/commons/io/build/URIOriginTest.java
@@ -16,11 +16,17 @@
  */
 package org.apache.commons.io.build;
 
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.io.InputStream;
 import java.net.URI;
 import java.nio.file.Paths;
 
 import org.apache.commons.io.build.AbstractOrigin.URIOrigin;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 /**
  * Tests {@link URIOrigin}.
@@ -35,4 +41,23 @@ public class URIOriginTest extends AbstractOriginTest<URI, 
URIOrigin> {
         setOriginRw(new URIOrigin(Paths.get(FILE_NAME_RW).toUri()));
     }
 
+    @ParameterizedTest
+    @ValueSource(strings = {
+            "http://example.com";,
+            "https://example.com";
+    })
+    void testGetInputStream(String uri) throws Exception {
+        final AbstractOrigin.URIOrigin origin = new 
AbstractOrigin.URIOrigin(new URI(uri));
+        try (final InputStream in = origin.getInputStream()) {
+            assertNotEquals(-1, in.read());
+        }
+    }
+
+    @Test
+    void testGetInputStreamFileURI() throws Exception {
+        final AbstractOrigin.URIOrigin origin = getOriginRo().asThis();
+        try (final InputStream in = origin.getInputStream()) {
+            assertNotEquals(-1, in.read());
+        }
+    }
 }

Reply via email to