improve error message if an 3rd party library is missing

Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/de9665f3
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/de9665f3
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/de9665f3

Branch: refs/heads/master
Commit: de9665f3cbaee56c5089392fbee0a6b81689ed8d
Parents: 6a80b20
Author: Stefan Bodewig <bode...@apache.org>
Authored: Sat Dec 30 12:24:48 2017 +0100
Committer: Stefan Bodewig <bode...@apache.org>
Committed: Sat Dec 30 12:24:48 2017 +0100

----------------------------------------------------------------------
 .../compressors/CompressorStreamFactory.java        | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-compress/blob/de9665f3/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 5c6063e..e6a4400 100644
--- 
a/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
+++ 
b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
@@ -201,6 +201,14 @@ public class CompressorStreamFactory implements 
CompressorStreamProvider {
      */
     public static final String ZSTANDARD = "zstd";
 
+    private static final String YOU_NEED_BROTLI_DEC = youNeed("Google Brotli 
Dec", "https://github.com/google/brotli/";);
+    private static final String YOU_NEED_XZ_JAVA = youNeed("XZ for Java", 
"https://tukaani.org/xz/java.html";);
+    private static final String YOU_NEED_ZSTD_JNI = youNeed("Zstd JNI", 
"https://github.com/luben/zstd-jni";);
+
+    private static String youNeed(String name, String url) {
+        return " In addition to Apache Commons Compress you need the " + name 
+ " library - see " + url;
+    }
+
     /**
      * Constructs a new sorted map from input stream provider names to provider
      * objects.
@@ -562,28 +570,28 @@ public class CompressorStreamFactory implements 
CompressorStreamProvider {
 
             if (BROTLI.equalsIgnoreCase(name)) {
                 if (!BrotliUtils.isBrotliCompressionAvailable()) {
-                    throw new CompressorException("Brotli compression is not 
available.");
+                    throw new CompressorException("Brotli compression is not 
available." + YOU_NEED_BROTLI_DEC);
                 }
                 return new BrotliCompressorInputStream(in);
             }
 
             if (XZ.equalsIgnoreCase(name)) {
                 if (!XZUtils.isXZCompressionAvailable()) {
-                    throw new CompressorException("XZ compression is not 
available.");
+                    throw new CompressorException("XZ compression is not 
available." + YOU_NEED_XZ_JAVA);
                 }
                 return new XZCompressorInputStream(in, 
actualDecompressConcatenated, memoryLimitInKb);
             }
 
             if (ZSTANDARD.equalsIgnoreCase(name)) {
                 if (!ZstdUtils.isZstdCompressionAvailable()) {
-                    throw new CompressorException("Zstandard compression is 
not available.");
+                    throw new CompressorException("Zstandard compression is 
not available." + YOU_NEED_ZSTD_JNI);
                 }
                 return new ZstdCompressorInputStream(in);
             }
 
             if (LZMA.equalsIgnoreCase(name)) {
                 if (!LZMAUtils.isLZMACompressionAvailable()) {
-                    throw new CompressorException("LZMA compression is not 
available");
+                    throw new CompressorException("LZMA compression is not 
available" + YOU_NEED_XZ_JAVA);
                 }
                 return new LZMACompressorInputStream(in, memoryLimitInKb);
             }

Reply via email to