diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 44d5f4406..45692307b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,9 +56,9 @@ jobs: report: ${{ steps.prepare-report.outputs.report }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Set up Java & Maven - uses: actions/setup-java@v4 + uses: actions/setup-java@v6 with: java-version: 17 distribution: temurin @@ -87,7 +87,7 @@ jobs: echo "date=$(TZ=Europe/Paris date +'%Y-%m-%dT%H:%M:%S (%Z)')" >> "$GITHUB_OUTPUT" exit $code - name: Upload voxatile.jar as build artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 id: upload-artifact with: name: voxatile.jar @@ -148,14 +148,14 @@ jobs: if: ${{ always() && needs.build.outputs.pr-number != 0 }} steps: - name: Find existing comment - uses: peter-evans/find-comment@v3 + uses: peter-evans/find-comment@v4 id: find-comment with: issue-number: ${{ needs.build.outputs.pr-number }} comment-author: "github-actions[bot]" body-includes: "[Maven Build Status]" - name: Create or update comment - uses: peter-evans/create-or-update-comment@v4 + uses: peter-evans/create-or-update-comment@v5 with: issue-number: ${{ needs.build.outputs.pr-number }} comment-id: ${{ steps.find-comment.outputs.comment-id }} @@ -169,6 +169,6 @@ jobs: if: ${{ always() && needs.build.outputs.pr-number == 0 }} steps: - name: Create commit comment with artifact URL - uses: peter-evans/commit-comment@v3 + uses: peter-evans/commit-comment@v4 with: body: ${{ needs.build.outputs.report }} diff --git a/.github/workflows/checkstyle.yml b/.github/workflows/checkstyle.yml index 713b9c17d..7f17862a1 100644 --- a/.github/workflows/checkstyle.yml +++ b/.github/workflows/checkstyle.yml @@ -14,9 +14,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Run checkstyle - uses: dbelyaev/action-checkstyle@v1.12.0 + uses: dbelyaev/action-checkstyle@v4.4.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} checkstyle_config: checkstyle.xml diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index df3c28ab1..e5571b2b4 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -23,10 +23,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Log into registry ${{ env.REGISTRY }} - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -45,7 +45,7 @@ jobs: - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . push: true diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 0504c6650..950bbdad8 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -27,9 +27,9 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Set up Java & Maven - uses: actions/setup-java@v4 + uses: actions/setup-java@v6 with: java-version: 17 distribution: temurin @@ -37,11 +37,11 @@ jobs: - name: Generate Javadoc with Maven run: mvn --batch-mode --no-transfer-progress --update-snapshots javadoc:javadoc - name: Setup Pages - uses: actions/configure-pages@v5 + uses: actions/configure-pages@v6 - name: Upload GitHub Pages artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v5 with: path: target/reports/apidocs - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v5 diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index c5b5e5f78..c8503437d 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -16,9 +16,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Set up Java & Maven - uses: actions/setup-java@v4 + uses: actions/setup-java@v6 with: java-version: 17 distribution: temurin @@ -26,7 +26,7 @@ jobs: - name: Generate Javadoc with Maven run: mvn --batch-mode --no-transfer-progress --update-snapshots javadoc:javadoc - name: Upload standard artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: Javadoc path: target/reports/apidocs diff --git a/.github/workflows/parameters-tests.yml b/.github/workflows/parameters-tests.yml index 1db70a2ca..2f581e7e7 100644 --- a/.github/workflows/parameters-tests.yml +++ b/.github/workflows/parameters-tests.yml @@ -12,13 +12,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Set up JDK 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@v6 with: - java-version: '17' - distribution: 'temurin' + java-version: 17 + distribution: temurin + cache: maven - name: Build with Maven run: | diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 49321d95b..129bdc524 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -19,9 +19,9 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Set up Java & Maven - uses: actions/setup-java@v4 + uses: actions/setup-java@v6 with: java-version: 17 distribution: temurin diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index f87961a39..1a18b209e 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -13,9 +13,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Set up Java & Maven - uses: actions/setup-java@v4 + uses: actions/setup-java@v6 with: java-version: 17 distribution: temurin diff --git a/pom.xml b/pom.xml index 118e07231..b31f1d2cf 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ tools.jackson jackson-bom - 3.1.0 + 3.2.3 pom import @@ -88,25 +88,25 @@ org.xerial sqlite-jdbc - 3.43.2.2 + 3.53.4.0 org.slf4j slf4j-api - 2.0.9 + 2.0.19 org.slf4j slf4j-simple - 2.0.9 + 2.0.19 org.locationtech.jts jts-core - 1.19.0 + 1.20.0 @@ -170,19 +170,19 @@ commons-cli commons-cli - 1.8.0 + 1.11.0 it.unimi.dsi fastutil-core - 8.5.16 + 8.5.19 org.apache.commons commons-pool2 - 2.12.1 + 2.13.1 @@ -212,14 +212,14 @@ org.junit.jupiter junit-jupiter-engine - 5.10.2 + 6.1.3 test org.slf4j slf4j-nop - 2.0.9 + 2.0.19 test @@ -239,23 +239,23 @@ maven-compiler-plugin - 3.15.0 + 3.16.0 maven-surefire-plugin - 3.5.6 + 3.6.0 maven-jar-plugin - 3.5.0 + 3.5.1 maven-install-plugin - 3.1.4 + 3.2.0 maven-deploy-plugin - 3.1.4 + 3.2.0 diff --git a/src/main/java/fr/ign/voxatile/core/parameters/tasks/BuildLayoutTaskParams.java b/src/main/java/fr/ign/voxatile/core/parameters/tasks/BuildLayoutTaskParams.java index d3f3e074a..d94000109 100644 --- a/src/main/java/fr/ign/voxatile/core/parameters/tasks/BuildLayoutTaskParams.java +++ b/src/main/java/fr/ign/voxatile/core/parameters/tasks/BuildLayoutTaskParams.java @@ -58,7 +58,6 @@ public BuildLayoutTaskParams(List 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); + } +}