From c5ea0f2ed11d4ab878f0c72c0690be979ccc1038 Mon Sep 17 00:00:00 2001
From: Vojtech Moravec <vojtech.moravec.st@vsb.cz>
Date: Wed, 14 Oct 2020 14:02:03 +0200
Subject: [PATCH] Return qcmpSupported in dataset list.

With this returned in dataset request, fiji plugin knows, if qcmp compression is available.
---
 src/main/java/bdv/server/CellHandler.java           | 13 ++++++++++---
 .../java/bdv/server/JsonDatasetListHandler.java     |  3 +++
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/main/java/bdv/server/CellHandler.java b/src/main/java/bdv/server/CellHandler.java
index 0a049b7..4b09666 100644
--- a/src/main/java/bdv/server/CellHandler.java
+++ b/src/main/java/bdv/server/CellHandler.java
@@ -158,6 +158,7 @@ public class CellHandler extends ContextHandler {
      */
     private final BigDataServer.ExtendedCompressionOptions compressionParams;
 
+    private boolean compressionSupport = false;
     private ArrayList<ICacheFile> cachedCodebooks = null;
     private HashMap<Integer, ImageCompressor> compressors = null;
     private ImageCompressor lowestResCompressor = null;
@@ -242,7 +243,8 @@ public class CellHandler extends ContextHandler {
                     return;
                 }
             } else {
-                LOG.warn("Didn't find any cached codebooks for " + this.baseFilename);
+                LOG.warn("Didn't find any cached codebooks for " + this.baseFilename + " and codebook training is not enabled. " +
+                                 "Enable with 'tcb' after xml file path.");
                 return;
             }
         }
@@ -276,16 +278,21 @@ public class CellHandler extends ContextHandler {
         for (int i = 0; i < initialCompressionCacheSize; i++) {
             cachedBuffers.push(new MemoryOutputStream(INITIAL_BUFFER_SIZE));
         }
+        compressionSupport = true;
+    }
+
+    public boolean isCompressionSupported() {
+        return compressionSupport;
     }
 
     private boolean trainCompressionCodebooks(final BigDataServer.ExtendedCompressionOptions compressionOptions,
                                               final Hdf5ImageLoader hdf5ImageLoader) {
 
         final ArrayImg<?, ?> arrImg = (ArrayImg<?, ?>) hdf5ImageLoader.getSetupImgLoader(0).getImage(0, 0, ImgLoaderHints.LOAD_COMPLETELY);
-        assert (arrImg.numDimensions() == 3);
-
+        assert (arrImg.numDimensions() == 3) : "arrImg.numDimensions() != 3";
         assert (compressionOptions.getInputDataInfo().getCacheFileName().equals(baseFilename));
 
+
         final CallbackInputData cid = new CallbackInputData((x, y, z) ->
                                                             {
                                                                 return ((UnsignedShortType) arrImg.getAt(x, y, z)).getInteger();
diff --git a/src/main/java/bdv/server/JsonDatasetListHandler.java b/src/main/java/bdv/server/JsonDatasetListHandler.java
index d976b5a..051ec84 100644
--- a/src/main/java/bdv/server/JsonDatasetListHandler.java
+++ b/src/main/java/bdv/server/JsonDatasetListHandler.java
@@ -6,6 +6,7 @@ import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.ContextHandler;
 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
+
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -85,6 +86,8 @@ public class JsonDatasetListHandler extends ContextHandler
 
 				writer.name( "datasetUrl" ).value( contextHandler.getDataSetURL() );
 
+				writer.name("qcmpSupported").value(contextHandler.isCompressionSupported());
+
 				writer.endObject();
 			}
 		}
-- 
GitLab