From d82fde8afb2f03326cea16cac9c6323538b1f6b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vojt=C4=9Bch=20Moravec?= <theazgra@gmail.com>
Date: Mon, 20 Jul 2020 11:44:44 +0200
Subject: [PATCH] Add helpers for checks and move verbose flag to
 CompressionOptions.

---
 .../azgracompress/cli/ParsedCliOptions.java   | 29 ++--------------
 .../compression/CompressionOptions.java       | 34 ++++++++++++++-----
 .../CompressorDecompressorBase.java           |  4 +--
 .../compression/ImageCompressor.java          | 18 +++++++++-
 .../compression/SQImageCompressor.java        |  2 +-
 .../compression/SQImageDecompressor.java      |  2 +-
 .../compression/VQImageCompressor.java        |  2 +-
 .../compression/VQImageDecompressor.java      |  2 +-
 8 files changed, 50 insertions(+), 43 deletions(-)

diff --git a/src/main/java/azgracompress/cli/ParsedCliOptions.java b/src/main/java/azgracompress/cli/ParsedCliOptions.java
index c77f346..28a3bde 100644
--- a/src/main/java/azgracompress/cli/ParsedCliOptions.java
+++ b/src/main/java/azgracompress/cli/ParsedCliOptions.java
@@ -19,11 +19,6 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable {
      */
     private ProgramMethod method;
 
-    /**
-     * Flag whether the CLI app should be verbose while running.
-     */
-    private boolean verbose;
-
     /**
      * Flag whether parse error occurred.
      */
@@ -107,7 +102,7 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable {
         final String[] fileInfo = cmd.getArgs();
         parseInputFilePart(errorBuilder, fileInfo);
 
-        verbose = cmd.hasOption(CliConstants.VERBOSE_LONG);
+        setVerbose(cmd.hasOption(CliConstants.VERBOSE_LONG));
 
         if (cmd.hasOption(CliConstants.WORKER_COUNT_LONG)) {
             final String wcString = cmd.getOptionValue(CliConstants.WORKER_COUNT_LONG);
@@ -373,10 +368,6 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable {
         return method;
     }
 
-    public boolean isVerbose() {
-        return verbose;
-    }
-
     public boolean parseError() {
         return parseErrorOccurred;
     }
@@ -456,28 +447,12 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable {
             sb.append("ToPlaneIndex: ").append(getPlaneRange().getInclusiveTo()).append('\n');
         }
 
-        sb.append("Verbose: ").append(verbose).append('\n');
+        sb.append("Verbose: ").append(isVerbose()).append('\n');
         sb.append("ThreadWorkerCount: ").append(getWorkerCount()).append('\n');
 
         return sb.toString();
     }
 
-    /**
-     * Get number of planes to be compressed.
-     *
-     * @return Number of planes for compression.
-     */
-    public int getNumberOfPlanes() {
-        if (getPlaneIndex() != null) {
-            return 1;
-        } else if (getPlaneRange() != null) {
-            final Interval<Integer> planeRange = getPlaneRange();
-            return ((planeRange.getInclusiveTo() + 1) - planeRange.getFrom());
-        } else {
-            return getImageDimension().getZ();
-        }
-    }
-
     @Override
     public Object clone() throws CloneNotSupportedException {
         return super.clone();
diff --git a/src/main/java/azgracompress/compression/CompressionOptions.java b/src/main/java/azgracompress/compression/CompressionOptions.java
index 2f94b24..ac77295 100644
--- a/src/main/java/azgracompress/compression/CompressionOptions.java
+++ b/src/main/java/azgracompress/compression/CompressionOptions.java
@@ -64,8 +64,32 @@ public class CompressionOptions {
      */
     private int workerCount = 1;
 
-    // NOTE(Moravec): Getters and setters for the private fields.
+    /**
+     * Flag whether the CLI app should be verbose while running.
+     */
+    private boolean verbose;
+
+    public boolean isPlaneIndexSet() {
+        return (planeIndex != null);
+    }
+
+    public boolean isPlaneRangeSet() {
+        return (planeRange != null);
+    }
+
+    public boolean hasCodebookCacheFolder() {
+        return codebookCacheFolder != null;
+    }
 
+    protected void setVerbose(boolean verbose) {
+        this.verbose = verbose;
+    }
+
+    // NOTE(Moravec): Generated getters and setters for the private fields.
+
+    public boolean isVerbose() {
+        return verbose;
+    }
 
     public String getInputFilePath() {
         return inputFilePath;
@@ -135,14 +159,6 @@ public class CompressionOptions {
         return planeIndex;
     }
 
-    public boolean isPlaneIndexSet() {
-        return (planeIndex != null);
-    }
-
-    public boolean isPlaneRangeSet() {
-        return (planeRange != null);
-    }
-
     public void setPlaneIndex(Integer planeIndex) {
         this.planeIndex = planeIndex;
     }
diff --git a/src/main/java/azgracompress/compression/CompressorDecompressorBase.java b/src/main/java/azgracompress/compression/CompressorDecompressorBase.java
index 8ab8f5a..896222d 100644
--- a/src/main/java/azgracompress/compression/CompressorDecompressorBase.java
+++ b/src/main/java/azgracompress/compression/CompressorDecompressorBase.java
@@ -11,10 +11,10 @@ public abstract class CompressorDecompressorBase {
     public static final int LONG_BYTES = 8;
     public static final String EXTENSION = ".QCMP";
 
-    protected final ParsedCliOptions options;
+    protected final CompressionOptions options;
     private final int codebookSize;
 
-    public CompressorDecompressorBase(ParsedCliOptions options) {
+    public CompressorDecompressorBase(CompressionOptions options) {
         this.options = options;
         this.codebookSize = (int) Math.pow(2, this.options.getBitsPerCodebookIndex());
     }
diff --git a/src/main/java/azgracompress/compression/ImageCompressor.java b/src/main/java/azgracompress/compression/ImageCompressor.java
index 90db3d2..8267667 100644
--- a/src/main/java/azgracompress/compression/ImageCompressor.java
+++ b/src/main/java/azgracompress/compression/ImageCompressor.java
@@ -113,6 +113,22 @@ public class ImageCompressor extends CompressorDecompressorBase {
         }
     }
 
+    /**
+     * Get number of planes to be compressed.
+     *
+     * @return Number of planes for compression.
+     */
+    private int getNumberOfPlanes() {
+        if (options.isPlaneIndexSet()) {
+            return 1;
+        } else if (options.isPlaneRangeSet()) {
+            final Interval<Integer> planeRange = options.getPlaneRange();
+            return ((planeRange.getInclusiveTo() + 1) - planeRange.getFrom());
+        } else {
+            return options.getImageDimension().getZ();
+        }
+    }
+
     /**
      * Create QCMPFile header for compressed file.
      *
@@ -131,7 +147,7 @@ public class ImageCompressor extends CompressorDecompressorBase {
 
         header.setImageSizeX(options.getImageDimension().getX());
         header.setImageSizeY(options.getImageDimension().getY());
-        header.setImageSizeZ(options.getNumberOfPlanes());
+        header.setImageSizeZ(getNumberOfPlanes());
 
         header.setVectorDimension(options.getVectorDimension());
 
diff --git a/src/main/java/azgracompress/compression/SQImageCompressor.java b/src/main/java/azgracompress/compression/SQImageCompressor.java
index 09efdea..a73f3a9 100644
--- a/src/main/java/azgracompress/compression/SQImageCompressor.java
+++ b/src/main/java/azgracompress/compression/SQImageCompressor.java
@@ -17,7 +17,7 @@ import java.io.IOException;
 
 public class SQImageCompressor extends CompressorDecompressorBase implements IImageCompressor {
 
-    public SQImageCompressor(ParsedCliOptions options) {
+    public SQImageCompressor(CompressionOptions options) {
         super(options);
     }
 
diff --git a/src/main/java/azgracompress/compression/SQImageDecompressor.java b/src/main/java/azgracompress/compression/SQImageDecompressor.java
index 1009794..7200807 100644
--- a/src/main/java/azgracompress/compression/SQImageDecompressor.java
+++ b/src/main/java/azgracompress/compression/SQImageDecompressor.java
@@ -15,7 +15,7 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 
 public class SQImageDecompressor extends CompressorDecompressorBase implements IImageDecompressor {
-    public SQImageDecompressor(ParsedCliOptions options) {
+    public SQImageDecompressor(CompressionOptions options) {
         super(options);
     }
 
diff --git a/src/main/java/azgracompress/compression/VQImageCompressor.java b/src/main/java/azgracompress/compression/VQImageCompressor.java
index 3b6eb76..7365bf2 100644
--- a/src/main/java/azgracompress/compression/VQImageCompressor.java
+++ b/src/main/java/azgracompress/compression/VQImageCompressor.java
@@ -15,7 +15,7 @@ import java.io.IOException;
 
 public class VQImageCompressor extends CompressorDecompressorBase implements IImageCompressor {
 
-    public VQImageCompressor(ParsedCliOptions options) {
+    public VQImageCompressor(CompressionOptions options) {
         super(options);
     }
 
diff --git a/src/main/java/azgracompress/compression/VQImageDecompressor.java b/src/main/java/azgracompress/compression/VQImageDecompressor.java
index e86a980..1f2894b 100644
--- a/src/main/java/azgracompress/compression/VQImageDecompressor.java
+++ b/src/main/java/azgracompress/compression/VQImageDecompressor.java
@@ -19,7 +19,7 @@ import java.io.IOException;
 // TODO(Moravec): Handle huffman decoding.
 
 public class VQImageDecompressor extends CompressorDecompressorBase implements IImageDecompressor {
-    public VQImageDecompressor(ParsedCliOptions options) {
+    public VQImageDecompressor(CompressionOptions options) {
         super(options);
     }
 
-- 
GitLab