From 9afd1ea5ce58e59041d0f1ba826c50e533f95e28 Mon Sep 17 00:00:00 2001
From: Vojtech Moravec <vojtech.moravec.st@vsb.cz>
Date: Fri, 23 Oct 2020 11:13:22 +0200
Subject: [PATCH] Change type of dataset dimensions V3i -> HyperStackDimensions

---
 .../java/cz/it4i/qcmp/io/BufferInputData.java | 15 +++++------
 .../cz/it4i/qcmp/io/CallbackInputData.java    | 18 ++++++++++---
 .../java/cz/it4i/qcmp/io/FileInputData.java   | 14 +++++-----
 .../cz/it4i/qcmp/io/FlatBufferInputData.java  | 15 +++++------
 src/main/java/cz/it4i/qcmp/io/InputData.java  | 26 ++++++++++++-------
 5 files changed, 52 insertions(+), 36 deletions(-)

diff --git a/src/main/java/cz/it4i/qcmp/io/BufferInputData.java b/src/main/java/cz/it4i/qcmp/io/BufferInputData.java
index 3b263a2..094123e 100644
--- a/src/main/java/cz/it4i/qcmp/io/BufferInputData.java
+++ b/src/main/java/cz/it4i/qcmp/io/BufferInputData.java
@@ -1,6 +1,6 @@
 package cz.it4i.qcmp.io;
 
-import cz.it4i.qcmp.data.V3i;
+import cz.it4i.qcmp.data.HyperStackDimensions;
 
 /**
  * Input data backed by the buffer object.
@@ -17,19 +17,16 @@ public class BufferInputData extends InputData {
     /**
      * Create input data backed by buffer object.
      *
-     * @param imageBuffers    Image buffer references.
-     * @param imageDimensions Image dimensions.
-     * @param pixelType       Image pixel type.
-     * @param cacheHint       Name of the image used in caching.
+     * @param imageBuffers      Image buffer references.
+     * @param datasetDimensions Dataset dimensions.
+     * @param cacheHint         Name of the image used in caching.
      */
     public BufferInputData(final Object[] imageBuffers,
-                           final V3i imageDimensions,
-                           final PixelType pixelType,
+                           final HyperStackDimensions datasetDimensions,
                            final String cacheHint) {
+        super(datasetDimensions);
         this.imageBuffers = imageBuffers;
         setDataLoaderType(DataLoaderType.ImageJBufferLoader);
-        setDimension(imageDimensions);
-        setPixelType(pixelType);
         this.cacheHint = cacheHint;
     }
 
diff --git a/src/main/java/cz/it4i/qcmp/io/CallbackInputData.java b/src/main/java/cz/it4i/qcmp/io/CallbackInputData.java
index ef046c2..cfe9c02 100644
--- a/src/main/java/cz/it4i/qcmp/io/CallbackInputData.java
+++ b/src/main/java/cz/it4i/qcmp/io/CallbackInputData.java
@@ -1,6 +1,6 @@
 package cz.it4i.qcmp.io;
 
-import cz.it4i.qcmp.data.V3i;
+import cz.it4i.qcmp.data.HyperStackDimensions;
 
 public class CallbackInputData extends InputData {
 
@@ -22,14 +22,21 @@ public class CallbackInputData extends InputData {
         int getValueAt(final int x, final int y, final int z);
     }
 
+    /**
+     * Create very generic loader, which load data by executing callbacks with parameters.
+     *
+     * @param pixelLoadCallback Object with callbacks.
+     * @param datasetDimensions Dataset dimensions.
+     * @param cacheHint         Qcmp cache file name.
+     */
     public CallbackInputData(final LoadCallback pixelLoadCallback,
-                             final V3i dimensions,
+                             final HyperStackDimensions datasetDimensions,
                              final String cacheHint) {
+        super(datasetDimensions);
         this.pixelLoadCallback = pixelLoadCallback;
         this.cacheHint = cacheHint;
         setDataLoaderType(DataLoaderType.CallbackLoader);
         setPixelType(PixelType.Gray16);
-        setDimension(dimensions);
     }
 
     @Override
@@ -37,6 +44,11 @@ public class CallbackInputData extends InputData {
         return cacheHint;
     }
 
+    /**
+     * Get the pixel value callback object.
+     *
+     * @return Callback object.
+     */
     public final LoadCallback getPixelLoadCallback() {
         return pixelLoadCallback;
     }
diff --git a/src/main/java/cz/it4i/qcmp/io/FileInputData.java b/src/main/java/cz/it4i/qcmp/io/FileInputData.java
index fccce4c..1d1186a 100644
--- a/src/main/java/cz/it4i/qcmp/io/FileInputData.java
+++ b/src/main/java/cz/it4i/qcmp/io/FileInputData.java
@@ -1,8 +1,7 @@
 package cz.it4i.qcmp.io;
 
-/**
- * Input data backed by the file.
- */
+import cz.it4i.qcmp.data.HyperStackDimensions;
+
 public class FileInputData extends InputData {
 
     /**
@@ -13,16 +12,19 @@ public class FileInputData extends InputData {
     /**
      * Create input data backed by data file.
      *
-     * @param filePath
+     * @param filePath          Path to the file.
+     * @param datasetDimensions Dataset dimensions.
      */
-    public FileInputData(final String filePath) {
+    public FileInputData(final String filePath,
+                         final HyperStackDimensions datasetDimensions) {
+        super(datasetDimensions);
         this.filePath = filePath;
     }
 
     /**
      * Get path to the data file.
      *
-     * @return
+     * @return Path to data file.
      */
     @Override
     public String getFilePath() {
diff --git a/src/main/java/cz/it4i/qcmp/io/FlatBufferInputData.java b/src/main/java/cz/it4i/qcmp/io/FlatBufferInputData.java
index 3cad98b..490e694 100644
--- a/src/main/java/cz/it4i/qcmp/io/FlatBufferInputData.java
+++ b/src/main/java/cz/it4i/qcmp/io/FlatBufferInputData.java
@@ -1,6 +1,6 @@
 package cz.it4i.qcmp.io;
 
-import cz.it4i.qcmp.data.V3i;
+import cz.it4i.qcmp.data.HyperStackDimensions;
 
 /**
  * Input data backed by the single buffer object.
@@ -20,19 +20,16 @@ public class FlatBufferInputData extends InputData {
     /**
      * Create input data backed by buffer object.
      *
-     * @param imageBuffer     Image buffer reference.
-     * @param imageDimensions Image dimensions.
-     * @param pixelType       Image pixel type.
-     * @param cacheHint       Name of the image used in caching.
+     * @param imageBuffer       Image buffer reference.
+     * @param datasetDimensions Dataset dimensions.
+     * @param cacheHint         Name of the image used in caching.
      */
     public FlatBufferInputData(final Object imageBuffer,
-                               final V3i imageDimensions,
-                               final PixelType pixelType,
+                               final HyperStackDimensions datasetDimensions,
                                final String cacheHint) {
+        super(datasetDimensions);
         this.imageBuffer = imageBuffer;
         setDataLoaderType(DataLoaderType.FlatBufferLoader);
-        setDimension(imageDimensions);
-        setPixelType(pixelType);
         this.cacheHint = cacheHint;
     }
 
diff --git a/src/main/java/cz/it4i/qcmp/io/InputData.java b/src/main/java/cz/it4i/qcmp/io/InputData.java
index 0cda830..1441b18 100644
--- a/src/main/java/cz/it4i/qcmp/io/InputData.java
+++ b/src/main/java/cz/it4i/qcmp/io/InputData.java
@@ -1,7 +1,7 @@
 package cz.it4i.qcmp.io;
 
+import cz.it4i.qcmp.data.HyperStackDimensions;
 import cz.it4i.qcmp.data.Range;
-import cz.it4i.qcmp.data.V3i;
 
 /**
  * Information about the input file.
@@ -15,6 +15,7 @@ public abstract class InputData {
         CallbackLoader
     }
 
+    // NOTE(Moravec): Supporting this will need a lot of work. If only we had C++ templates.
     public enum PixelType {
         Gray16,
         AnythingElse
@@ -32,9 +33,9 @@ public abstract class InputData {
     private PixelType pixelType = PixelType.Gray16;
 
     /**
-     * Image dimension.
+     * Dataset dimensions.
      */
-    private V3i dimension;
+    private HyperStackDimensions dimension;
 
     /**
      * Index of the plane to compress.
@@ -46,6 +47,15 @@ public abstract class InputData {
      */
     Range<Integer> planeRange = null;
 
+    /**
+     * Create InputData object with dataset dimensions.
+     *
+     * @param datasetDimensions Dataset dimensions.
+     */
+    public InputData(final HyperStackDimensions datasetDimensions) {
+        this.dimension = datasetDimensions;
+    }
+
 
     public boolean isPlaneIndexSet() {
         return (planeIndex != null);
@@ -55,12 +65,11 @@ public abstract class InputData {
         return (planeRange != null);
     }
 
-    public void setDimension(final V3i dimension) {
+    public void setDimension(final HyperStackDimensions dimension) {
         this.dimension = dimension;
     }
 
-
-    public V3i getDimensions() {
+    public HyperStackDimensions getDimensions() {
         return dimension;
     }
 
@@ -96,11 +105,10 @@ public abstract class InputData {
         this.pixelType = pixelType;
     }
 
-
     /**
-     * Override in FileInputData!!!
+     * This is mostly used by loaders which are backed by file.
      *
-     * @return null!
+     * @return Basic non-overloaded versions always returns null.
      */
     public String getFilePath() {
         return null;
-- 
GitLab