build, WorldCoords3dParam
@Override
public void validate() {
- at.validate();
build.forEach(LayoutBuilderParams::validate);
}
diff --git a/src/main/java/fr/ign/voxatile/core/parameters/utils/WorldBBox3dParams.java b/src/main/java/fr/ign/voxatile/core/parameters/utils/WorldBBox3dParams.java
index f43a13f84..382bc30bb 100644
--- a/src/main/java/fr/ign/voxatile/core/parameters/utils/WorldBBox3dParams.java
+++ b/src/main/java/fr/ign/voxatile/core/parameters/utils/WorldBBox3dParams.java
@@ -1,11 +1,7 @@
package fr.ign.voxatile.core.parameters.utils;
-import java.util.List;
+import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonSetter;
-import com.fasterxml.jackson.annotation.Nulls;
-
-import fr.ign.voxatile.core.parameters.JsonWrapper;
import fr.ign.voxatile.core.utils.IntegerInterval;
import fr.ign.voxatile.core.utils.world3d.WorldBBox3d;
@@ -13,24 +9,20 @@
* Parameters describing a {@link WorldBBox3d}.
*
* A BBox can be described as an array of three coordinates or coordinates intervals (in x, y, z order).
+ *
+ * @param x coordinate interval on the x-axis
+ * @param y coordinate interval on the y-axis
+ * @param z coordinate interval on the z-axis
*/
-@JsonWrapper
-public class WorldBBox3dParams {
- /**
- * The three intervals (required).
- */
- @JsonSetter(nulls = Nulls.FAIL, contentNulls = Nulls.FAIL)
- public List intervals;
-
+@JsonFormat(shape = JsonFormat.Shape.ARRAY)
+public record WorldBBox3dParams(IntegerIntervalParams x, IntegerIntervalParams y, IntegerIntervalParams z) {
/**
* Validates parameters.
*/
public void validate() {
- if (intervals.size() != 3)
- throw new IllegalArgumentException("3d box should have three coordinates");
- intervals.get(0).validate();
- intervals.get(1).validate();
- intervals.get(2).validate();
+ x.validate();
+ y.validate();
+ z.validate();
}
/**
@@ -39,9 +31,9 @@ public void validate() {
* @return created {@link WorldBBox3d}
*/
public WorldBBox3d create() {
- IntegerInterval xs = intervals.get(0).create();
- IntegerInterval ys = intervals.get(1).create();
- IntegerInterval zs = intervals.get(2).create();
+ IntegerInterval xs = x.create();
+ IntegerInterval ys = y.create();
+ IntegerInterval zs = z.create();
return new WorldBBox3d(xs.begin(), ys.begin(), zs.begin(), xs.size(), ys.size(), zs.size());
}
diff --git a/src/main/java/fr/ign/voxatile/core/parameters/utils/WorldCoords3dParams.java b/src/main/java/fr/ign/voxatile/core/parameters/utils/WorldCoords3dParams.java
index 0c1c9c788..c108c90a1 100644
--- a/src/main/java/fr/ign/voxatile/core/parameters/utils/WorldCoords3dParams.java
+++ b/src/main/java/fr/ign/voxatile/core/parameters/utils/WorldCoords3dParams.java
@@ -1,38 +1,24 @@
package fr.ign.voxatile.core.parameters.utils;
-import java.util.List;
+import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonSetter;
-import com.fasterxml.jackson.annotation.Nulls;
-
-import fr.ign.voxatile.core.parameters.JsonWrapper;
import fr.ign.voxatile.core.utils.world3d.WorldCoords3d;
/**
* Parameters describing a 3d position as {@link WorldCoords3d}.
+ *
+ * @param x coordinate on the x-axis
+ * @param y coordinate on the y-axis
+ * @param z coordinate on the z-axis
*/
-@JsonWrapper
-public class WorldCoords3dParams {
- /**
- * The three coordinates (required).
- */
- @JsonSetter(nulls = Nulls.FAIL, contentNulls = Nulls.FAIL)
- public List coordinates;
-
- /**
- * Validates parameters.
- */
- public void validate() {
- if (coordinates.size() != 3)
- throw new IllegalArgumentException("3d position should have three coordinates");
- }
-
+@JsonFormat(shape = JsonFormat.Shape.ARRAY)
+public record WorldCoords3dParams(int x, int y, int z) {
/**
* Creates a new {@link WorldCoords3d} out of parameters.
*
* @return created {@link WorldCoords3d}
*/
public WorldCoords3d create() {
- return new WorldCoords3d(coordinates.get(0), coordinates.get(1), coordinates.get(2));
+ return new WorldCoords3d(x, y, z);
}
}
diff --git a/src/test/java/fr/ign/voxatile/core/parameters/utils/WorldBBox3dParamsTest.java b/src/test/java/fr/ign/voxatile/core/parameters/utils/WorldBBox3dParamsTest.java
index 8edaf1013..8a61cd3e2 100644
--- a/src/test/java/fr/ign/voxatile/core/parameters/utils/WorldBBox3dParamsTest.java
+++ b/src/test/java/fr/ign/voxatile/core/parameters/utils/WorldBBox3dParamsTest.java
@@ -1,6 +1,7 @@
package fr.ign.voxatile.core.parameters.utils;
import org.junit.jupiter.api.Test;
+import tools.jackson.databind.exc.MismatchedInputException;
import fr.ign.voxatile.core.parameters.ParamsTester;
import fr.ign.voxatile.core.utils.world3d.WorldBBox3d;
@@ -13,19 +14,11 @@ void testDeserialization() {
WorldBBox3dParams params;
WorldBBox3d box;
- params = assertDeserialize("[]");
- assertThrows(IllegalArgumentException.class, params::validate);
+ assertThrows(MismatchedInputException.class, () -> ParamsTester.deserialize(WorldBBox3dParams.class, "[]"));
- params = assertDeserialize("[1, 2]");
- assertThrows(IllegalArgumentException.class, params::validate);
+ assertThrows(MismatchedInputException.class, () -> ParamsTester.deserialize(WorldBBox3dParams.class, "[1, 2]"));
- params = assertDeserialize("[1, 2, 3, 4]");
- assertThrows(IllegalArgumentException.class, params::validate);
-
- params = assertDeserialize("[1, 2, 3]");
- assertDoesNotThrow(params::validate);
- box = assertDoesNotThrow(params::create);
- assertEquals(new WorldBBox3d(1, 2, 3, 1, 1, 1), box);
+ assertThrows(MismatchedInputException.class, () -> ParamsTester.deserialize(WorldBBox3dParams.class, "[1, 2, 3, 4]"));
params = assertDeserialize("[1, 2, 3]");
assertDoesNotThrow(params::validate);
diff --git a/src/test/java/fr/ign/voxatile/core/parameters/utils/WorldCoords3dParamsTest.java b/src/test/java/fr/ign/voxatile/core/parameters/utils/WorldCoords3dParamsTest.java
new file mode 100644
index 000000000..015edaefa
--- /dev/null
+++ b/src/test/java/fr/ign/voxatile/core/parameters/utils/WorldCoords3dParamsTest.java
@@ -0,0 +1,24 @@
+package fr.ign.voxatile.core.parameters.utils;
+
+import org.junit.jupiter.api.Test;
+import tools.jackson.databind.exc.MismatchedInputException;
+
+import fr.ign.voxatile.core.parameters.ParamsTester;
+import fr.ign.voxatile.core.utils.world3d.WorldCoords3d;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class WorldCoords3dParamsTest {
+ @Test
+ void testDeserialization() {
+ assertThrows(MismatchedInputException.class, () -> ParamsTester.deserialize(WorldCoords3dParams.class, "[]"));
+
+ assertThrows(MismatchedInputException.class, () -> ParamsTester.deserialize(WorldCoords3dParams.class, "[1, 2]"));
+
+ assertThrows(MismatchedInputException.class, () -> ParamsTester.deserialize(WorldCoords3dParams.class, "[1, 2, 3, 4]"));
+
+ WorldCoords3dParams params = assertDoesNotThrow(() -> ParamsTester.deserialize(WorldCoords3dParams.class, "[1, 2, 3]"));
+ WorldCoords3d coords = assertDoesNotThrow(params::create);
+ assertEquals(new WorldCoords3d(1, 2, 3), coords);
+ }
+}