You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by am...@apache.org on 2022/12/01 17:33:31 UTC

[sis] 01/02: chore(Feature): change contract of utility TiledImageMock.initializeAllTiles member function.

This is an automated email from the ASF dual-hosted git repository.

amanin pushed a commit to branch feat/resource-processor
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 5a487bb1989f2e2e187e344c3e078e874eff9097
Author: Alexis Manin <al...@geomatys.com>
AuthorDate: Wed Nov 30 11:27:08 2022 +0100

    chore(Feature): change contract of utility TiledImageMock.initializeAllTiles member function.
    
    Fix an inconsistency in the contract: the javadoc was saying that only specified band was affected, which is not true. The new contract aims to fix that by:
     1. Updating javadoc to match code behavior: all other bands are reset
     2. Allow to provide multiple bands as input: user can now have more than one band with TXY values.
---
 .../java/org/apache/sis/image/TiledImageMock.java  | 36 ++++++++++++++++------
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/core/sis-feature/src/test/java/org/apache/sis/image/TiledImageMock.java b/core/sis-feature/src/test/java/org/apache/sis/image/TiledImageMock.java
index a12ed0edf2..8ac715b200 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/image/TiledImageMock.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/image/TiledImageMock.java
@@ -32,8 +32,10 @@ import java.awt.image.SampleModel;
 import java.awt.image.TileObserver;
 import java.awt.image.WritableRaster;
 import java.awt.image.WritableRenderedImage;
+import java.util.Arrays;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 import org.apache.sis.internal.coverage.j2d.ImageUtilities;
 import org.apache.sis.internal.coverage.j2d.WritableTiledImage;
 import org.apache.sis.internal.util.Numerics;
@@ -271,19 +273,32 @@ public final strictfp class TiledImageMock extends PlanarImage implements Writab
 
     /**
      * Initializes the sample values of all tiles to testing values.
-     * The sample values will be 3 digits numbers of the form "TXY" where:
+     * The sample values will be 3 digits numbers of the form "TYX" where:
      * <ul>
      *   <li><var>T</var> is the tile index starting with 1 for the first tile and increasing in a row-major fashion.</li>
-     *   <li><var>X</var> is the <var>x</var> coordinate (column index) of the sample value relative to current tile.</li>
-     *   <li><var>Y</var> is the <var>y</var> coordinate (row index) of the sample value relative to current tile.</li>
+     *   <li><var>Y</var> is the <var>y</var> coordinate (row 0-based index) of the sample value relative to current tile.</li>
+     *   <li><var>X</var> is the <var>x</var> coordinate (column 0-based index) of the sample value relative to current tile.</li>
      * </ul>
      *
-     * The "TXY" pattern holds if all values are less than 10. If some values are greater than 10,
-     * then the sample values are a mix of above values resulting from arithmetic sums.
-     *
-     * @param  band  band index where to set values. Other bands will be unmodified.
+     * The "TYX" pattern holds if all values are less than 10. If some values are greater than 10,
+     * then the sample values are a mix of above values resulting from the following arithmetic sum:
+     * {@code T * 100 + Y * 10 + X}.
+     * <br>
+     * All bands will be affected the same value.
+     * <br>
+     * <em>Important</em>: This method resets all tiles of this image. It means that:
+     * <ul>
+     *     <li>All previous modifications will be erased</li>
+     *     <li>Any band omitted as input will be erased. This is true even when omitting all tiles.</li>
+     * </ul>
+     * @param bands  band index where to set values. If none provided, all bands are <em>emptied</em>,
+     *               i.e. a fresh raster is created for each tile, but not filled.
      */
-    public synchronized void initializeAllTiles(final int band) {
+    public synchronized void initializeAllTiles(int... bands) {
+        if (bands == null) bands = new int[] {};
+        else if (Arrays.stream(bands).boxed().collect(Collectors.toSet()).size() < bands.length) {
+            throw new IllegalArgumentException("Input band list contain doublons. Please verify your input.");
+        }
         int ti = 0;
         for (int ty=0; ty<numYTiles; ty++) {
             for (int tx=0; tx<numXTiles; tx++) {
@@ -293,7 +308,8 @@ public final strictfp class TiledImageMock extends PlanarImage implements Writab
                 final WritableRaster raster = Raster.createWritableRaster(sampleModel, new Point(x, y));
                 for (int j=0; j<tileHeight; j++) {
                     for (int i=0; i<tileWidth; i++) {
-                        raster.setSample(x+i, y+j, band, value + 10*j + i);
+                        final int pixelValue = value + 10 * j + i;
+                        for (int band : bands) raster.setSample(x+i, y+j, band, pixelValue);
                     }
                 }
                 tiles[ti++] = raster;
@@ -304,7 +320,7 @@ public final strictfp class TiledImageMock extends PlanarImage implements Writab
 
     /**
      * Initializes the sample values of all tiles to random values. The image must have been
-     * initialized by a call to {@link #initializeAllTiles(int)} before to invoke this method.
+     * initialized by a call to {@link #initializeAllTiles(int...)} before to invoke this method.
      *
      * @param  band       band index where to set values. Other bands will be unmodified.
      * @param  generator  the random number generator to use for obtaining values.