Repository: commons-compress Updated Branches: refs/heads/master 932d4f899 -> a793612b9
[COMPRESS-392] Add Brotli decoder based on the Google Brotli library. Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/a793612b Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/a793612b Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/a793612b Branch: refs/heads/master Commit: a793612b9e09795feb253aab9a738bd1f7280700 Parents: 932d4f8 Author: Philippe Mouawad <p.moua...@ubik-ingenierie.com> Authored: Tue May 2 12:22:04 2017 -0700 Committer: Gary Gregory <garydgreg...@gmail.com> Committed: Tue May 2 12:22:04 2017 -0700 ---------------------------------------------------------------------- pom.xml | 7 ++++++ src/changes/changes.xml | 3 +++ .../compressors/CompressorStreamFactory.java | 25 +++++++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/a793612b/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 9745d1b..4cc629a 100644 --- a/pom.xml +++ b/pom.xml @@ -68,6 +68,12 @@ jar, tar, zip, dump, 7z, arj. <scope>test</scope> </dependency> <dependency> + <groupId>org.brotli</groupId> + <artifactId>dec</artifactId> + <version>0.1.1</version> + <optional>true</optional> + </dependency> + <dependency> <groupId>org.tukaani</groupId> <artifactId>xz</artifactId> <version>1.6</version> @@ -245,6 +251,7 @@ jar, tar, zip, dump, 7z, arj. <configuration> <instructions> <Import-Package>org.tukaani.xz;resolution:=optional</Import-Package> + <Import-Package>org.brotli.dec;resolution:=optional</Import-Package> </instructions> </configuration> </plugin> http://git-wip-us.apache.org/repos/asf/commons-compress/blob/a793612b/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index d40a1a8..acd06f0 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -103,6 +103,9 @@ The <action> type attribute can be add,update,fix,remove. Internal location pointer in ZipFile could get incremented even if nothing had been read. </action> + <action issue="COMPRESS-392" type="add" date="2017-05-02" due-to="Philippe Mouawad"> + Add Brotli decoder based on the Google Brotli library. + </action> </release> <release version="1.13" date="2016-12-29" description="Release 1.13 - API compatible to 1.12 but requires Java 7 at runtime."> http://git-wip-us.apache.org/repos/asf/commons-compress/blob/a793612b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java index b12fc1a..29cf0cf 100644 --- a/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java +++ b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java @@ -31,6 +31,8 @@ import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import org.apache.commons.compress.compressors.brotli.BrotliCompressorInputStream; +import org.apache.commons.compress.compressors.brotli.BrotliUtils; import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream; import org.apache.commons.compress.compressors.deflate.DeflateCompressorInputStream; @@ -93,6 +95,16 @@ public class CompressorStreamFactory implements CompressorStreamProvider { private static final CompressorStreamFactory SINGLETON = new CompressorStreamFactory(); + + + /** + * Constant (value {@value}) used to identify the BROTLI compression + * algorithm. + * + * @since 1.1 + */ + public static final String BROTLI = "br"; + /** * Constant (value {@value}) used to identify the BZIP2 compression * algorithm. @@ -263,6 +275,10 @@ public class CompressorStreamFactory implements CompressorStreamProvider { private static ArrayList<CompressorStreamProvider> findCompressorStreamProviders() { return Lists.newArrayList(serviceLoaderIterator()); } + + public static String getBrotli() { + return BROTLI; + } public static String getBzip2() { return BZIP2; @@ -524,6 +540,13 @@ public class CompressorStreamFactory implements CompressorStreamProvider { if (BZIP2.equalsIgnoreCase(name)) { return new BZip2CompressorInputStream(in, actualDecompressConcatenated); } + + if (BROTLI.equalsIgnoreCase(name)) { + if (!BrotliUtils.isBrotliCompressionAvailable()) { + throw new CompressorException("Brotli compression is not available."); + } + return new BrotliCompressorInputStream(in); + } if (XZ.equalsIgnoreCase(name)) { if (!XZUtils.isXZCompressionAvailable()) { @@ -677,7 +700,7 @@ public class CompressorStreamFactory implements CompressorStreamProvider { @Override public Set<String> getInputStreamCompressorNames() { - return Sets.newHashSet(GZIP, BZIP2, XZ, LZMA, PACK200, DEFLATE, SNAPPY_RAW, SNAPPY_FRAMED, Z, LZ4_BLOCK, + return Sets.newHashSet(GZIP, BROTLI, BZIP2, XZ, LZMA, PACK200, DEFLATE, SNAPPY_RAW, SNAPPY_FRAMED, Z, LZ4_BLOCK, LZ4_FRAMED); }