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

bchapuis pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git


The following commit(s) were added to refs/heads/main by this push:
     new 2cf01119 Fix some issues detected by sonar  (#877)
2cf01119 is described below

commit 2cf01119caf48caa41e5820250b98b27616bf535
Author: Bertil Chapuis <[email protected]>
AuthorDate: Thu Jun 13 22:15:07 2024 +0200

    Fix some issues detected by sonar  (#877)
    
    * Add mandatory html tags
    
    * Suppress warnings related to picocli's print writer
    
    * Inline variables
    
    * Improve exception handling
    
    * Rename class because record keyword is now reserved
    
    * Fix naming issues
    
    * Fix sonar issues
    
    * Fix unit test
---
 .../java/org/apache/baremaps/cli/Baremaps.java     | 13 ++++--
 .../org/apache/baremaps/cli/database/Database.java |  5 ++-
 .../apache/baremaps/cli/database/ExecuteSql.java   |  5 ++-
 .../apache/baremaps/cli/database/ImportOsm.java    |  5 ++-
 .../apache/baremaps/cli/database/UpdateOsm.java    |  5 ++-
 .../org/apache/baremaps/cli/geocoder/Geocoder.java |  8 +++-
 .../org/apache/baremaps/cli/geocoder/Search.java   |  5 ++-
 .../org/apache/baremaps/cli/geocoder/Serve.java    |  5 ++-
 .../java/org/apache/baremaps/cli/iploc/IpLoc.java  |  7 ++-
 .../java/org/apache/baremaps/cli/iploc/Serve.java  |  5 ++-
 .../main/java/org/apache/baremaps/cli/map/Dev.java |  5 ++-
 .../java/org/apache/baremaps/cli/map/Export.java   |  5 ++-
 .../java/org/apache/baremaps/cli/map/Init.java     |  5 ++-
 .../java/org/apache/baremaps/cli/map/MBTiles.java  |  5 ++-
 .../main/java/org/apache/baremaps/cli/map/Map.java |  9 ++--
 .../java/org/apache/baremaps/cli/map/Serve.java    |  5 ++-
 .../org/apache/baremaps/cli/workflow/Execute.java  |  5 ++-
 .../org/apache/baremaps/cli/workflow/Init.java     |  5 ++-
 .../org/apache/baremaps/cli/workflow/Workflow.java |  7 ++-
 .../org/apache/baremaps/config/ConfigReader.java   |  3 +-
 .../database/metadata/DatabaseMetadata.java        | 35 ++++++++-------
 .../baremaps/geocoder/GeonamesDocumentMapper.java  | 50 ++++++++++-----------
 .../{GeonamesRecord.java => GeonamesEntry.java}    |  4 +-
 .../apache/baremaps/geocoder/GeonamesReader.java   |  8 ++--
 .../apache/baremaps/iploc/InetAddressUtils.java    |  4 ++
 .../org/apache/baremaps/iploc/IpLocMapper.java     |  2 +-
 .../org/apache/baremaps/iploc/IpLocRepository.java | 52 +++++++++++++---------
 .../flatgeobuf/FlatGeoBufTypeConversion.java       |  3 +-
 .../storage/geopackage/GeoPackageDataTable.java    | 39 ++++++++--------
 .../storage/postgres/PostgresDataStore.java        | 32 ++++++++-----
 .../shapefile/internal/CommonByteReader.java       |  2 +-
 .../shapefile/internal/DbaseByteReader.java        |  5 +--
 .../org/apache/baremaps/tilestore/TileCoord.java   | 11 ++---
 .../tilestore/postgres/PostgresQueryGenerator.java | 17 ++++---
 .../apache/baremaps/utils/ObjectMapperUtils.java   |  4 ++
 .../java/org/apache/baremaps/workflow/Task.java    |  1 +
 .../workflow/tasks/CreateGeonamesIndex.java        |  6 +--
 .../baremaps/workflow/tasks/UpdateOsmDatabase.java |  3 +-
 .../baremaps/geocoder/GeonamesReaderTest.java      |  6 +--
 .../geopackage/GeoPackageToPostgresTest.java       |  2 +-
 .../baremaps/tilestore/TileCoordIteratorTest.java  | 10 ++---
 .../postgres/PostgresQueryGeneratorTest.java       |  3 +-
 .../baremaps/utils/ProjectionTransformerTest.java  |  2 +-
 .../org/apache/baremaps/workflow/WorkflowTest.java | 10 ++---
 .../workflow/tasks/ExecuteCommandTest.java         |  2 +-
 .../workflow/tasks/ImportGeoPackageTest.java       |  7 ++-
 .../baremaps/data/algorithm/BinarySearch.java      |  4 ++
 .../baremaps/data/algorithm/ExternalMergeSort.java | 18 ++++----
 .../apache/baremaps/data/algorithm/Hilbert.java    |  6 ++-
 .../data/collection/FixedSizeDataList.java         |  4 +-
 .../data/collection/MemoryAlignedDataList.java     |  7 +--
 .../data/collection/MemoryAlignedDataMap.java      |  4 +-
 .../apache/baremaps/data/storage/DataRowImpl.java  |  2 +-
 .../baremaps/data/type/FixedSizeDataType.java      |  2 +-
 .../baremaps/data/type/GeometryDataType.java       |  9 ++--
 .../baremaps/data/type/MemoryAlignedDataType.java  |  2 +-
 .../baremaps/data/type/SmallIntegerDataType.java   |  4 +-
 .../baremaps/data/util/MappedByteBufferUtils.java  |  9 ++--
 .../baremaps/data/algorithm/UnionStreamTest.java   |  8 ++--
 .../geoparquet/data/GeoParquetGroupImpl.java       |  7 +--
 .../org/apache/baremaps/maplibre/style/Style.java  | 12 ++++-
 .../apache/baremaps/maplibre/style/StyleLayer.java | 12 ++++-
 .../baremaps/maplibre/tilejson/TileJSON.java       | 17 ++++++-
 .../apache/baremaps/maplibre/tileset/Tileset.java  | 23 ++++++++--
 .../maplibre/vectortile/VectorTileEncoder.java     | 22 ++++-----
 .../maplibre/vectortile/VectorTileFunctions.java   |  4 ++
 .../maplibre/vectortile/VectorTileDecoderTest.java | 14 +++---
 .../maplibre/vectortile/VectorTileEncoderTest.java | 14 +++---
 .../maplibre/vectortile/VectorTileTest.java        |  6 +--
 .../function/EntityToGeometryMapper.java           |  4 +-
 .../baremaps/openstreetmap/model/Element.java      |  4 +-
 .../openstreetmap/stream/BatchedSpliterator.java   |  2 +-
 .../openstreetmap/stream/ConsumerUtils.java        |  8 +++-
 .../baremaps/openstreetmap/stream/StreamUtils.java |  4 ++
 .../openstreetmap/stream/SupplierUtils.java        |  8 ++--
 .../baremaps/openstreetmap/utils/CRSUtils.java     |  2 +-
 .../openstreetmap/utils/GeometryUtils.java         |  2 -
 .../openstreetmap/xml/XmlChangeSpliterator.java    | 11 ++---
 .../openstreetmap/xml/XmlEntitySpliterator.java    | 11 ++---
 .../{OsmTestData.java => OsmDataTest.java}         | 12 ++---
 .../openstreetmap/stream/StreamUtilsTest.java      | 11 +++--
 .../xml/XmlChangeSpliteratorTest.java              | 10 ++---
 ...DataType.java => XmlEntitySpliteratorTest.java} |  6 +--
 .../org/apache/baremaps/pmtiles/Compression.java   | 12 ++---
 .../java/org/apache/baremaps/pmtiles/Header.java   |  1 +
 .../org/apache/baremaps/pmtiles/PMTilesReader.java | 18 +++-----
 .../org/apache/baremaps/pmtiles/PMTilesUtils.java  | 10 ++---
 .../apache/baremaps/pmtiles/PMTilesUtilsTest.java  |  1 -
 .../apache/baremaps/server/GeocoderResource.java   |  3 +-
 .../org/apache/baremaps/server/IpLocResource.java  |  3 +-
 .../org/apache/baremaps/server/SearchResource.java |  2 +-
 .../baremaps/testing/GeometryAssertions.java       |  4 ++
 .../org/apache/baremaps/testing/TestFiles.java     |  4 ++
 93 files changed, 481 insertions(+), 319 deletions(-)

diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/Baremaps.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/Baremaps.java
index e931ff65..ca8ff7d6 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/Baremaps.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/Baremaps.java
@@ -31,17 +31,24 @@ import org.apache.baremaps.cli.map.Map;
 import org.apache.baremaps.cli.workflow.Workflow;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.config.Configurator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.IVersionProvider;
 import picocli.CommandLine.Option;
 
-@Command(name = "baremaps", description = "A toolkit for producing vector 
tiles.",
-    versionProvider = VersionProvider.class, subcommands = {Workflow.class, 
Database.class,
-        Map.class, Geocoder.class, IpLoc.class},
+@Command(
+    name = "baremaps",
+    description = "A toolkit for producing vector tiles.",
+    versionProvider = VersionProvider.class,
+    subcommands = {Workflow.class, Database.class, Map.class, Geocoder.class, 
IpLoc.class},
     sortOptions = false)
+@SuppressWarnings("squid:S106")
 public class Baremaps implements Callable<Integer> {
 
+  private static final Logger logger = LoggerFactory.getLogger(Baremaps.class);
+
   @Option(names = {"-V", "--version"}, versionHelp = true, description = 
"Print version info.")
   boolean version;
 
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/Database.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/Database.java
index fcf1cb6e..5bdcf3d7 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/Database.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/Database.java
@@ -22,9 +22,12 @@ package org.apache.baremaps.cli.database;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
-@Command(name = "database", description = "Database commands.",
+@Command(
+    name = "database",
+    description = "Database commands.",
     subcommands = {ExecuteSql.class, ImportOsm.class, UpdateOsm.class},
     sortOptions = false)
+@SuppressWarnings("squid:S106")
 public class Database implements Runnable {
 
   @Override
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/ExecuteSql.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/ExecuteSql.java
index ada71330..f6ac9f05 100644
--- 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/ExecuteSql.java
+++ 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/ExecuteSql.java
@@ -27,7 +27,10 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
-@Command(name = "execute-sql", description = "Execute SQL queries in the 
database.")
+@Command(
+    name = "execute-sql",
+    description = "Execute SQL queries in the database.")
+@SuppressWarnings("squid:S106")
 public class ExecuteSql implements Callable<Integer> {
 
   @Mixin
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/ImportOsm.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/ImportOsm.java
index ad962fcc..b470319f 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/ImportOsm.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/ImportOsm.java
@@ -27,7 +27,10 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
-@Command(name = "import-osm", description = "Import OpenStreetMap data in 
Postgres.")
+@Command(
+    name = "import-osm",
+    description = "Import OpenStreetMap data in Postgres.")
+@SuppressWarnings("squid:S106")
 public class ImportOsm implements Callable<Integer> {
 
   @Mixin
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/UpdateOsm.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/UpdateOsm.java
index 11fb8d6c..2502c4fe 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/UpdateOsm.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/database/UpdateOsm.java
@@ -27,7 +27,10 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
-@Command(name = "update-osm", description = "Update OpenStreetMap data in 
Postgres.")
+@Command(
+    name = "update-osm",
+    description = "Update OpenStreetMap data in Postgres.")
+@SuppressWarnings("squid:S106")
 public class UpdateOsm implements Callable<Integer> {
 
   @Mixin
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Geocoder.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Geocoder.java
index 766c205d..d9d2dbb1 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Geocoder.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Geocoder.java
@@ -22,8 +22,12 @@ package org.apache.baremaps.cli.geocoder;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
-@Command(name = "geocoder", description = "Geocoder commands (experimental).",
-    subcommands = {Serve.class, Search.class}, sortOptions = false)
+@Command(
+    name = "geocoder",
+    description = "Geocoder commands (experimental).",
+    sortOptions = false,
+    subcommands = {Serve.class, Search.class})
+@SuppressWarnings("squid:S106")
 public class Geocoder implements Runnable {
 
   @Override
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Search.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Search.java
index 379b0c27..e14fbc2a 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Search.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Search.java
@@ -29,7 +29,10 @@ import org.slf4j.LoggerFactory;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
 
-@Command(name = "search", description = "Search geonames index.")
+@Command(
+    name = "search",
+    description = "Search geonames index.")
+@SuppressWarnings("squid:S106")
 public class Search implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(Search.class);
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Serve.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Serve.java
index 3af14e17..8a3afb24 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Serve.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Serve.java
@@ -39,7 +39,10 @@ import org.slf4j.LoggerFactory;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
 
-@Command(name = "serve", description = "Start a tile server with caching 
capabilities.")
+@Command(
+    name = "serve",
+    description = "Start a tile server with caching capabilities.")
+@SuppressWarnings("squid:S106")
 public class Serve implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(Serve.class);
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/IpLoc.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/IpLoc.java
index 355de748..f17b9d3b 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/IpLoc.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/IpLoc.java
@@ -22,8 +22,11 @@ package org.apache.baremaps.cli.iploc;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
-@Command(name = "iploc", subcommands = {Serve.class},
-    description = "IP to location commands (experimental).")
+@Command(
+    name = "iploc",
+    description = "IP to location commands (experimental).",
+    subcommands = {Serve.class})
+@SuppressWarnings("squid:S106")
 public class IpLoc implements Runnable {
 
   @Override
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/Serve.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/Serve.java
index f7aeefc5..0f129334 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/Serve.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/Serve.java
@@ -39,7 +39,10 @@ import org.slf4j.LoggerFactory;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
 
-@Command(name = "serve", description = "Start an IP to location web service.")
+@Command(
+    name = "serve",
+    description = "Start an IP to location web service.")
+@SuppressWarnings("squid:S106")
 public class Serve implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(Serve.class);
diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Dev.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Dev.java
index 2ba6c766..13b37356 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Dev.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Dev.java
@@ -48,7 +48,10 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
-@Command(name = "dev", description = "Start a development server with live 
reload.")
+@Command(
+    name = "dev",
+    description = "Start a development server with live reload.")
+@SuppressWarnings("squid:S106")
 public class Dev implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(Dev.class);
diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Export.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Export.java
index 741e3403..197a0545 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Export.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Export.java
@@ -30,7 +30,10 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
-@Command(name = "export", description = "Export vector tiles from the 
database.")
+@Command(
+    name = "export",
+    description = "Export vector tiles from the database.")
+@SuppressWarnings("squid:S106")
 public class Export implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(Export.class);
diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Init.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Init.java
index 0542db86..e7c116ed 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Init.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Init.java
@@ -34,7 +34,10 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
-@Command(name = "init", description = "Init configuration files.")
+@Command(
+    name = "init",
+    description = "Init configuration files.")
+@SuppressWarnings("squid:S106")
 public class Init implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(Init.class);
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/MBTiles.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/MBTiles.java
index 1644e719..9628169d 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/MBTiles.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/MBTiles.java
@@ -46,7 +46,10 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
-@Command(name = "mbtiles", description = "Start a mbtiles server with caching 
capabilities.")
+@Command(
+    name = "mbtiles",
+    description = "Start a mbtiles server with caching capabilities.")
+@SuppressWarnings("squid:S106")
 public class MBTiles implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(MBTiles.class);
diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Map.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Map.java
index fa825607..296c3132 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Map.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Map.java
@@ -22,9 +22,12 @@ package org.apache.baremaps.cli.map;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
-@Command(name = "map", description = "Map commands.",
-    subcommands = {Init.class, Export.class, Serve.class, Dev.class, 
MBTiles.class},
-    sortOptions = false)
+@Command(
+    name = "map",
+    description = "Map commands.",
+    sortOptions = false,
+    subcommands = {Init.class, Export.class, Serve.class, Dev.class, 
MBTiles.class})
+@SuppressWarnings("squid:S106")
 public class Map implements Runnable {
 
   @Override
diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java
index cd99a8d2..fc6c648d 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java
@@ -50,7 +50,10 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
-@Command(name = "serve", description = "Start a tile server with caching 
capabilities.")
+@Command(
+    name = "serve",
+    description = "Start a tile server with caching capabilities.")
+@SuppressWarnings("squid:S106")
 public class Serve implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(Serve.class);
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Execute.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Execute.java
index 6e67645e..e290f9c4 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Execute.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Execute.java
@@ -31,7 +31,10 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
-@Command(name = "execute", description = "Execute a workflow.")
+@Command(
+    name = "execute",
+    description = "Execute a workflow.")
+@SuppressWarnings("squid:S106")
 public class Execute implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(Execute.class);
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Init.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Init.java
index 5179ab23..c1de8793 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Init.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Init.java
@@ -31,7 +31,10 @@ import org.slf4j.LoggerFactory;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
 
-@Command(name = "init", description = "Initialize a workflow.")
+@Command(
+    name = "init",
+    description = "Initialize a workflow.")
+@SuppressWarnings("squid:S106")
 public class Init implements Callable<Integer> {
 
   private static final Logger logger = LoggerFactory.getLogger(Init.class);
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Workflow.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Workflow.java
index c23ebbaa..10891a31 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Workflow.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/workflow/Workflow.java
@@ -22,8 +22,11 @@ package org.apache.baremaps.cli.workflow;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
-@Command(name = "workflow", subcommands = {Init.class, Execute.class},
-    description = "Manage a workflow.")
+@Command(
+    name = "workflow",
+    description = "Manage a workflow.",
+    subcommands = {Init.class, Execute.class})
+@SuppressWarnings("squid:S106")
 public class Workflow implements Runnable {
 
   @Override
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/config/ConfigReader.java 
b/baremaps-core/src/main/java/org/apache/baremaps/config/ConfigReader.java
index 244a2800..0423e62b 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/config/ConfigReader.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/config/ConfigReader.java
@@ -36,11 +36,10 @@ public class ConfigReader {
 
   public String read(Path path) throws IOException {
     var extension = 
com.google.common.io.Files.getFileExtension(path.toString());
-    var config = switch (extension) {
+    return switch (extension) {
       case "js" -> eval(path);
       default -> Files.readString(path);
     };
-    return config;
   }
 
   private String eval(Path path) throws IOException {
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/metadata/DatabaseMetadata.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/metadata/DatabaseMetadata.java
index 1c0a180c..77bc51b6 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/metadata/DatabaseMetadata.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/metadata/DatabaseMetadata.java
@@ -66,12 +66,15 @@ public class DatabaseMetadata {
     this.dataSource = dataSource;
   }
 
-  public List<TableMetadata> getTableMetaData() {
+  public List<TableMetadata> getTableMetaData() throws SQLException {
     return getTableMetaData(null, null, null, null);
   }
 
-  public List<TableMetadata> getTableMetaData(String catalog, String schema,
-      String tableNamePattern, String[] types) {
+  public List<TableMetadata> getTableMetaData(
+      String catalog,
+      String schema,
+      String tableNamePattern,
+      String[] types) throws SQLException {
     Map<String, TableResult> descriptions = getTables(catalog, schema, 
tableNamePattern, types)
         .stream().collect(Collectors.toMap(TableResult::tableName, 
Function.identity()));
     Map<String, List<ColumnResult>> columns = getColumns(catalog, schema, 
tableNamePattern, null)
@@ -86,8 +89,11 @@ public class DatabaseMetadata {
         .toList();
   }
 
-  private List<TableResult> getTables(String catalog, String schemaPattern, 
String tableNamePattern,
-      String[] types) {
+  private List<TableResult> getTables(
+      String catalog,
+      String schemaPattern,
+      String tableNamePattern,
+      String[] types) throws SQLException {
     var tableDescriptions = new ArrayList<TableResult>();
     try (var connection = dataSource.getConnection();
         var resultSet =
@@ -105,14 +111,15 @@ public class DatabaseMetadata {
             resultSet.getString(SELF_REFERENCING_COL_NAME),
             resultSet.getString(REF_GENERATION)));
       }
-    } catch (SQLException e) {
-      throw new RuntimeException(e);
     }
     return tableDescriptions;
   }
 
-  private List<ColumnResult> getColumns(String catalog, String schemaPattern,
-      String tableNamePattern, String columnNamePattern) {
+  private List<ColumnResult> getColumns(
+      String catalog,
+      String schemaPattern,
+      String tableNamePattern,
+      String columnNamePattern) throws SQLException {
     var tableColumns = new ArrayList<ColumnResult>();
     try (var connection = dataSource.getConnection();
         var resultSet = connection.getMetaData().getColumns(catalog, 
schemaPattern,
@@ -143,14 +150,14 @@ public class DatabaseMetadata {
             resultSet.getString(IS_AUTOINCREMENT),
             resultSet.getString(IS_GENERATEDCOLUMN)));
       }
-    } catch (SQLException e) {
-      throw new RuntimeException(e);
     }
     return tableColumns;
   }
 
-  private List<PrimaryKeyResult> getPrimaryKeys(String catalog, String 
schemaPattern,
-      String table) {
+  private List<PrimaryKeyResult> getPrimaryKeys(
+      String catalog,
+      String schemaPattern,
+      String table) throws SQLException {
     var tablePrimaryKeyColumns = new ArrayList<PrimaryKeyResult>();
     try (var connection = dataSource.getConnection();
         var resultSet = connection.getMetaData().getPrimaryKeys(catalog, 
schemaPattern, table)) {
@@ -163,8 +170,6 @@ public class DatabaseMetadata {
             resultSet.getShort(KEY_SEQ),
             resultSet.getString(PK_NAME)));
       }
-    } catch (SQLException e) {
-      throw new RuntimeException(e);
     }
     return tablePrimaryKeyColumns;
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesDocumentMapper.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesDocumentMapper.java
index b1afc1d1..7f704aff 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesDocumentMapper.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesDocumentMapper.java
@@ -24,38 +24,38 @@ import org.apache.baremaps.utils.IsoCountriesUtils;
 import org.apache.lucene.document.*;
 
 /**
- * Maps a {@link GeonamesRecord} to a Lucene {@link Document}.
+ * Maps a {@link GeonamesEntry} to a Lucene {@link Document}.
  */
-public class GeonamesDocumentMapper implements Function<GeonamesRecord, 
Document> {
+public class GeonamesDocumentMapper implements Function<GeonamesEntry, 
Document> {
 
   @Override
-  public Document apply(GeonamesRecord record) {
+  public Document apply(GeonamesEntry entry) {
     Document document = new Document();
-    document.add(new TextField("name", record.getName(), Field.Store.YES));
-    document.add(new TextField("country", 
IsoCountriesUtils.getCountry(record.getCountryCode()),
+    document.add(new TextField("name", entry.getName(), Field.Store.YES));
+    document.add(new TextField("country", 
IsoCountriesUtils.getCountry(entry.getCountryCode()),
         Field.Store.YES));
     // countryCode is not analyzed and thus must be queried using uppercase
-    document.add(new StringField("countryCode", record.getCountryCode(), 
Field.Store.YES));
-    document.add(new LatLonPoint("point", record.getLatitude(), 
record.getLongitude()));
-    document.add(new StoredField("longitude", record.getLongitude()));
-    document.add(new StoredField("latitude", record.getLatitude()));
-    document.add(new TextField("asciiname", record.getAsciiname(), 
Field.Store.YES));
-    document.add(new StoredField("alternatenames", 
record.getAlternatenames()));
-    document.add(new StringField("featureClass", record.getFeatureClass(), 
Field.Store.YES));
-    document.add(new StringField("featureCode", record.getFeatureCode(), 
Field.Store.YES));
-    document.add(new StoredField("cc2", record.getCc2()));
-    document.add(new StoredField("admin1Code", record.getAdmin1Code()));
-    document.add(new StoredField("admin2Code", record.getAdmin2Code()));
-    document.add(new StoredField("admin3Code", record.getAdmin3Code()));
-    document.add(new StoredField("admin4Code", record.getAdmin4Code()));
-    document.add(new NumericDocValuesField("population", 
record.getPopulation()));
-    document.add(new StoredField("population", record.getPopulation()));
-    if (record.getElevation() != null) {
-      document.add(new StoredField("elevation", record.getElevation()));
+    document.add(new StringField("countryCode", entry.getCountryCode(), 
Field.Store.YES));
+    document.add(new LatLonPoint("point", entry.getLatitude(), 
entry.getLongitude()));
+    document.add(new StoredField("longitude", entry.getLongitude()));
+    document.add(new StoredField("latitude", entry.getLatitude()));
+    document.add(new TextField("asciiname", entry.getAsciiname(), 
Field.Store.YES));
+    document.add(new StoredField("alternatenames", entry.getAlternatenames()));
+    document.add(new StringField("featureClass", entry.getFeatureClass(), 
Field.Store.YES));
+    document.add(new StringField("featureCode", entry.getFeatureCode(), 
Field.Store.YES));
+    document.add(new StoredField("cc2", entry.getCc2()));
+    document.add(new StoredField("admin1Code", entry.getAdmin1Code()));
+    document.add(new StoredField("admin2Code", entry.getAdmin2Code()));
+    document.add(new StoredField("admin3Code", entry.getAdmin3Code()));
+    document.add(new StoredField("admin4Code", entry.getAdmin4Code()));
+    document.add(new NumericDocValuesField("population", 
entry.getPopulation()));
+    document.add(new StoredField("population", entry.getPopulation()));
+    if (entry.getElevation() != null) {
+      document.add(new StoredField("elevation", entry.getElevation()));
     }
-    document.add(new StoredField("dem", record.getDem()));
-    document.add(new StoredField("timezone", record.getTimezone()));
-    document.add(new StoredField("modificationDate", 
record.getModificationDate()));
+    document.add(new StoredField("dem", entry.getDem()));
+    document.add(new StoredField("timezone", entry.getTimezone()));
+    document.add(new StoredField("modificationDate", 
entry.getModificationDate()));
     return document;
   }
 }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesRecord.java 
b/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesEntry.java
similarity index 98%
rename from 
baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesRecord.java
rename to 
baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesEntry.java
index 56138ee8..601cc3b0 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesRecord.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesEntry.java
@@ -20,7 +20,7 @@ package org.apache.baremaps.geocoder;
 /**
  * A record from the Geonames database.
  */
-public class GeonamesRecord {
+public class GeonamesEntry {
 
   // integer id of record in geonames database
   private Integer geonameid;
@@ -84,7 +84,7 @@ public class GeonamesRecord {
   // date of last modification in yyyy-MM-dd format
   private String modificationDate;
 
-  public GeonamesRecord() {
+  public GeonamesEntry() {
     // Default constructor
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesReader.java 
b/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesReader.java
index 768f283b..b35c4c45 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesReader.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/geocoder/GeonamesReader.java
@@ -37,7 +37,7 @@ import java.util.stream.StreamSupport;
  */
 public class GeonamesReader {
 
-  public Stream<GeonamesRecord> stream(InputStream inputStream) throws 
IOException {
+  public Stream<GeonamesEntry> stream(InputStream inputStream) throws 
IOException {
     CsvMapper mapper = new CsvMapper();
 
     CsvSchema schema = CsvSchema.builder()
@@ -65,11 +65,11 @@ public class GeonamesReader {
         .withoutQuoteChar();
 
     var reader = new BufferedReader(new InputStreamReader(inputStream, 
StandardCharsets.UTF_8));
-    MappingIterator<GeonamesRecord> recordIterator = mapper
-        .readerFor(GeonamesRecord.class)
+    MappingIterator<GeonamesEntry> recordIterator = mapper
+        .readerFor(GeonamesEntry.class)
         .with(schema)
         .readValues(reader);
-    Spliterator<GeonamesRecord> recordSpliterator =
+    Spliterator<GeonamesEntry> recordSpliterator =
         Spliterators.spliteratorUnknownSize(recordIterator, 0);
 
     return StreamSupport.stream(recordSpliterator, false);
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/iploc/InetAddressUtils.java 
b/baremaps-core/src/main/java/org/apache/baremaps/iploc/InetAddressUtils.java
index 9f774bca..2b337440 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/iploc/InetAddressUtils.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/iploc/InetAddressUtils.java
@@ -23,6 +23,10 @@ import java.net.UnknownHostException;
 /** Utility methods for {@code InetAddress}. */
 public class InetAddressUtils {
 
+  private InetAddressUtils() {
+    // Prevent instantiation
+  }
+
   /**
    * Returns the {@code InetAddress} having the given address.
    *
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/iploc/IpLocMapper.java 
b/baremaps-core/src/main/java/org/apache/baremaps/iploc/IpLocMapper.java
index f2a605b7..5602f09c 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/iploc/IpLocMapper.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/iploc/IpLocMapper.java
@@ -40,7 +40,7 @@ public class IpLocMapper implements Function<NicObject, 
Optional<IpLocObject>> {
 
   private static final Logger logger = 
LoggerFactory.getLogger(IpLocMapper.class);
 
-  private final float SCORE_THRESHOLD = 0.1f;
+  private static final float SCORE_THRESHOLD = 0.1f;
 
   private final SearcherManager searcherManager;
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/iploc/IpLocRepository.java 
b/baremaps-core/src/main/java/org/apache/baremaps/iploc/IpLocRepository.java
index d4f69673..a98fe058 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/iploc/IpLocRepository.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/iploc/IpLocRepository.java
@@ -38,42 +38,50 @@ import org.slf4j.LoggerFactory;
  */
 public final class IpLocRepository {
 
-  private static final String DROP_TABLE = """
-      DROP TABLE IF EXISTS inetnum_locations""";
-
-  private static final String CREATE_TABLE = """
-      CREATE TABLE IF NOT EXISTS inetnum_locations (
-          id integer PRIMARY KEY,
-          geocoder_input text,
-          ip_start blob,
-          ip_end blob,
-          longitude real,
-          latitude real,
-          network text,
-          country text,
-          source text,
-          precision text
-      )""";
-
-  private static final String CREATE_INDEX = """
-      CREATE INDEX inetnum_locations_ips ON inetnum_locations 
(ip_start,ip_end);""";
+  private static final String DROP_TABLE =
+      """
+          DROP TABLE IF EXISTS inetnum_locations;
+          """;
+
+  private static final String CREATE_TABLE =
+      """
+          CREATE TABLE IF NOT EXISTS inetnum_locations (
+              id integer PRIMARY KEY,
+              geocoder_input text,
+              ip_start blob,
+              ip_end blob,
+              longitude real,
+              latitude real,
+              network text,
+              country text,
+              source text,
+              precision text
+          )""";
+
+  private static final String CREATE_INDEX =
+      """
+          CREATE INDEX inetnum_locations_ips ON inetnum_locations 
(ip_start,ip_end);
+          """;
 
   private static final String INSERT_SQL =
       """
           INSERT INTO inetnum_locations(geocoder_input, ip_start, ip_end, 
longitude, latitude, network, country, source, precision)
-          VALUES(?,?,?,?,?,?,?,?,?)""";
+          VALUES(?,?,?,?,?,?,?,?,?);
+          """;
 
   private static final String SELECT_ALL_SQL =
       """
           SELECT id, geocoder_input, ip_start, ip_end, longitude, latitude, 
network, country, source, precision
-          FROM inetnum_locations;""";
+          FROM inetnum_locations;
+          """;
 
   private static final String SELECT_ALL_BY_IP_SQL =
       """
           SELECT id, geocoder_input, ip_start, ip_end, longitude, latitude, 
network, country, source, precision
           FROM inetnum_locations
           WHERE ip_start <= ? AND ip_end >= ?
-          ORDER BY ip_start DESC, ip_end ASC;""";
+          ORDER BY ip_start DESC, ip_end ASC;
+          """;
 
   private static final Logger logger = 
LoggerFactory.getLogger(IpLocRepository.class);
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufTypeConversion.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufTypeConversion.java
index 6c46a913..c65e3109 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufTypeConversion.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufTypeConversion.java
@@ -67,7 +67,7 @@ public class FlatGeoBufTypeConversion {
   }
 
   public static DataRow asRow(HeaderMeta headerMeta, DataSchema dataType, 
Feature feature) {
-    var values = new ArrayList();
+    var values = new ArrayList<>();
 
     var geometryBuffer = feature.geometry();
     var geometry = GeometryConversions.deserialize(geometryBuffer, 
geometryBuffer.type());
@@ -161,6 +161,7 @@ public class FlatGeoBufTypeConversion {
       case ColumnType.DateTime -> writeDateTime(propertiesBuffer, value);
       case ColumnType.Binary -> writeBinary(propertiesBuffer, value);
       default -> {
+        // Do nothing
       }
     };
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageDataTable.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageDataTable.java
index 5518cb4b..504d2fda 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageDataTable.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageDataTable.java
@@ -99,22 +99,6 @@ public class GeoPackageDataTable implements DataTable {
     return schema;
   }
 
-  /**
-   * Converts a GeoPackage value to a Java value.
-   *
-   * @param value the GeoPackage value
-   * @return the Java value
-   */
-  private Object asJavaValue(Object value) {
-    if (value instanceof GeoPackageGeometryData geometry) {
-      return asJtsGeometry(geometry.getGeometry());
-    } else if (value instanceof Date date) {
-      return value.toString();
-    } else {
-      return value;
-    }
-  }
-
   /**
    * Converts a GeoPackage geometry to a JTS geometry.
    *
@@ -134,7 +118,7 @@ public class GeoPackageDataTable implements DataTable {
       return asJtsMultiLineString(multiLineString);
     } else if (geometry instanceof mil.nga.sf.MultiPolygon multiPolygon) {
       return asJtsMultiPolygon(multiPolygon);
-    } else if (geometry instanceof mil.nga.sf.GeometryCollection 
geometryCollection) {
+    } else if (geometry instanceof mil.nga.sf.GeometryCollection<? extends 
mil.nga.sf.Geometry>geometryCollection) {
       return asJstGeometryCollection(geometryCollection);
     } else {
       // Unknown geometries are discarded
@@ -149,8 +133,8 @@ public class GeoPackageDataTable implements DataTable {
    * @return the JTS geometry collection
    */
   private GeometryCollection asJstGeometryCollection(
-      mil.nga.sf.GeometryCollection geometryCollection) {
-    List<mil.nga.sf.Geometry> geometries = geometryCollection.getGeometries();
+      mil.nga.sf.GeometryCollection<? extends mil.nga.sf.Geometry> 
geometryCollection) {
+    List<? extends mil.nga.sf.Geometry> geometries = 
geometryCollection.getGeometries();
     return geometryFactory.createGeometryCollection(
         geometries.stream().map(this::asJtsGeometry).toArray(Geometry[]::new));
   }
@@ -275,6 +259,21 @@ public class GeoPackageDataTable implements DataTable {
       hasNext = featureResultSet.moveToNext();
       return row;
     }
-  }
 
+    /**
+     * Converts a GeoPackage value to a Java value.
+     *
+     * @param value the GeoPackage value
+     * @return the Java value
+     */
+    private Object asJavaValue(Object value) {
+      if (value instanceof GeoPackageGeometryData geometry) {
+        return asJtsGeometry(geometry.getGeometry());
+      } else if (value instanceof Date date) {
+        return date.toString();
+      } else {
+        return value;
+      }
+    }
+  }
 }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataStore.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataStore.java
index e767b0d1..58445f92 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataStore.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataStore.java
@@ -65,10 +65,14 @@ public class PostgresDataStore implements DataStore {
    */
   @Override
   public List<String> list() throws DataStoreException {
-    DatabaseMetadata metadata = new DatabaseMetadata(dataSource);
-    return metadata.getTableMetaData(null, "public", null, TYPES).stream()
-        .map(table -> table.table().tableName())
-        .toList();
+    try {
+      DatabaseMetadata metadata = new DatabaseMetadata(dataSource);
+      return metadata.getTableMetaData(null, "public", null, TYPES).stream()
+          .map(table -> table.table().tableName())
+          .toList();
+    } catch (SQLException e) {
+      throw new DataStoreException(e);
+    }
   }
 
   /**
@@ -76,15 +80,19 @@ public class PostgresDataStore implements DataStore {
    */
   @Override
   public DataTable get(String name) throws DataStoreException {
-    var databaseMetadata = new DatabaseMetadata(dataSource);
-    var postgresName = name.replaceAll(REGEX, "_").toLowerCase();
-    var tableMetadata = databaseMetadata.getTableMetaData(null, null, 
postgresName, TYPES)
-        .stream().findFirst();
-    if (tableMetadata.isEmpty()) {
-      throw new DataStoreException("Table " + name + " does not exist.");
+    try {
+      var databaseMetadata = new DatabaseMetadata(dataSource);
+      var postgresName = name.replaceAll(REGEX, "_").toLowerCase();
+      var tableMetadata = databaseMetadata.getTableMetaData(null, null, 
postgresName, TYPES)
+          .stream().findFirst();
+      if (tableMetadata.isEmpty()) {
+        throw new DataStoreException("Table " + name + " does not exist.");
+      }
+      var schema = createSchema(tableMetadata.get());
+      return new PostgresDataTable(dataSource, schema);
+    } catch (SQLException e) {
+      throw new DataStoreException(e);
     }
-    var schema = createSchema(tableMetadata.get());
-    return new PostgresDataTable(dataSource, schema);
   }
 
   /**
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/CommonByteReader.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/CommonByteReader.java
index a0db24c9..4448a9dc 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/CommonByteReader.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/CommonByteReader.java
@@ -51,7 +51,7 @@ public abstract class CommonByteReader implements 
AutoCloseable {
    *
    * @param f File.
    */
-  public CommonByteReader(File f) throws IOException {
+  protected CommonByteReader(File f) throws IOException {
     Objects.requireNonNull(f, "The file cannot be null.");
     this.file = f;
     this.fis = new FileInputStream(this.file);
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/DbaseByteReader.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/DbaseByteReader.java
index a29ffead..bd379602 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/DbaseByteReader.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/DbaseByteReader.java
@@ -186,9 +186,8 @@ public class DbaseByteReader extends CommonByteReader 
implements AutoCloseable {
    */
   public int getRowNum() {
     int position = getByteBuffer().position();
-    int recordNumber = (position - 
Short.toUnsignedInt(this.firstRecordPosition))
-        / Short.toUnsignedInt(this.recordLength);
-    return recordNumber;
+    return (position - Short.toUnsignedInt(firstRecordPosition))
+        / Short.toUnsignedInt(recordLength);
   }
 
   /**
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/tilestore/TileCoord.java 
b/baremaps-core/src/main/java/org/apache/baremaps/tilestore/TileCoord.java
index 86914908..6e3d2f9e 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/tilestore/TileCoord.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/tilestore/TileCoord.java
@@ -134,11 +134,12 @@ public final class TileCoord implements 
Comparable<TileCoord> {
    * @return the tile
    */
   public static TileCoord fromLonLat(double lon, double lat, int z) {
-    int x = (int) ((lon + 180.0) / 360.0 * (1 << z));
-    int y = (int) ((1
-        - Math.log(Math.tan(Math.toRadians(lat)) + 1 / 
Math.cos(Math.toRadians(lat))) / Math.PI)
-        / 2.0 * (1 << z));
-    return new TileCoord(x, y, z);
+    return new TileCoord(
+        (int) ((lon + 180.0) / 360.0 * (1 << z)),
+        (int) ((1 - Math.log(
+            Math.tan(Math.toRadians(lat)) + 1 / Math.cos(Math.toRadians(lat))) 
/ Math.PI) / 2.0
+            * (1 << z)),
+        z);
   }
 
   /**
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGenerator.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGenerator.java
index 73f189fb..1e640fab 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGenerator.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGenerator.java
@@ -18,6 +18,7 @@
 package org.apache.baremaps.tilestore.postgres;
 
 
+import java.sql.SQLException;
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.sql.DataSource;
@@ -67,8 +68,13 @@ public class PostgresQueryGenerator {
    * @param columnNamePattern the column name pattern
    * @param types the types
    */
-  public PostgresQueryGenerator(DataSource dataSource, String catalog, String 
schemaPattern,
-      String typeNamePattern, String columnNamePattern, String... types) {
+  public PostgresQueryGenerator(
+      DataSource dataSource,
+      String catalog,
+      String schemaPattern,
+      String typeNamePattern,
+      String columnNamePattern,
+      String... types) {
     this.dataSource = dataSource;
     this.catalog = catalog;
     this.schemaPattern = schemaPattern;
@@ -82,17 +88,16 @@ public class PostgresQueryGenerator {
    *
    * @return the queries
    */
-  public List<TilesetQuery> generate() {
+  public List<TilesetQuery> generate() throws SQLException {
     return new DatabaseMetadata(dataSource)
         .getTableMetaData(catalog, schemaPattern, tableNamePattern, 
types).stream()
         .filter(table -> table.primaryKeys().size() == 1)
-        .filter(table -> table.getGeometryColumns().size() == 
1).map(this::getLayer).toList();
+        .filter(table -> table.getGeometryColumns().size() == 1)
+        .map(this::getLayer).toList();
   }
 
   private TilesetQuery getLayer(TableMetadata table) {
-    String tableSchema = table.table().tableSchem();
     String tableName = table.table().tableName();
-    String layer = String.format("%s.%s", tableSchema, tableName);
     String idColumn = table.primaryKeys().get(0).columnName();
     String geometryColumn = table.getGeometryColumns().get(0).columnName();
     String tagsColumns =
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/utils/ObjectMapperUtils.java 
b/baremaps-core/src/main/java/org/apache/baremaps/utils/ObjectMapperUtils.java
index 0b642399..50a4af26 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/utils/ObjectMapperUtils.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/utils/ObjectMapperUtils.java
@@ -26,6 +26,10 @@ import org.apache.baremaps.maplibre.expression.Expressions;
 
 public class ObjectMapperUtils {
 
+  private ObjectMapperUtils() {
+    // Prevent instantiation
+  }
+
   public static ObjectMapper objectMapper() {
     return new ObjectMapper()
         .registerModule(Expressions.createModule())
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/Task.java 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/Task.java
index 0a1f156f..3dc09b22 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/Task.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/Task.java
@@ -62,6 +62,7 @@ public interface Task {
    * @param context the context of the workflow
    * @throws Exception if an error occurs during the execution of the task
    */
+  @SuppressWarnings("java:S112")
   void execute(WorkflowContext context) throws Exception;
 
 }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/CreateGeonamesIndex.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/CreateGeonamesIndex.java
index a370ef1c..07655c37 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/CreateGeonamesIndex.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/CreateGeonamesIndex.java
@@ -47,7 +47,7 @@ public class CreateGeonamesIndex implements Task {
    * Constructs a {@code CreateGeonamesIndex}.
    */
   public CreateGeonamesIndex() {
-
+    // Default constructor
   }
 
   /**
@@ -65,7 +65,7 @@ public class CreateGeonamesIndex implements Task {
    * {@inheritDoc}
    */
   @Override
-  public void execute(WorkflowContext context) throws Exception {
+  public void execute(WorkflowContext context) throws IOException {
     var directory = FSDirectory.open(indexDirectory);
     var config = new IndexWriterConfig(GeocoderConstants.ANALYZER);
     try (var indexWriter = new IndexWriter(directory, config);
@@ -75,8 +75,6 @@ public class CreateGeonamesIndex implements Task {
           .stream(inputStream)
           .map(new GeonamesDocumentMapper());
       indexWriter.addDocuments((Iterable<Document>) documents::iterator);
-    } catch (IOException exception) {
-      throw new RuntimeException();
     }
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOsmDatabase.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOsmDatabase.java
index f4170dab..3decfced 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOsmDatabase.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOsmDatabase.java
@@ -18,6 +18,7 @@
 package org.apache.baremaps.workflow.tasks;
 
 import java.io.BufferedInputStream;
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 import java.util.StringJoiner;
@@ -111,7 +112,7 @@ public class UpdateOsmDatabase implements Task {
       Repository<Long, Way> wayRepository,
       Repository<Long, Relation> relationRepository,
       Integer databaseSrid,
-      String replicationUrl) throws Exception {
+      String replicationUrl) throws IOException, RepositoryException {
 
     // Get the latest header from the database
     var header = headerRepository.selectLatest();
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/geocoder/GeonamesReaderTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/geocoder/GeonamesReaderTest.java
index 2d6126a2..efc90e6d 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/geocoder/GeonamesReaderTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/geocoder/GeonamesReaderTest.java
@@ -36,9 +36,9 @@ class GeonamesReaderTest {
       var list = stream.toList();
       assertEquals(5, list.size());
 
-      var record = list.get(0);
-      assertEquals(1, record.getGeonameid());
-      assertEquals("HEIG", record.getAsciiname());
+      var entry = list.get(0);
+      assertEquals(1, entry.getGeonameid());
+      assertEquals("HEIG", entry.getAsciiname());
     }
   }
 }
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/storage/geopackage/GeoPackageToPostgresTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/storage/geopackage/GeoPackageToPostgresTest.java
index 3296be4d..42ff6514 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/storage/geopackage/GeoPackageToPostgresTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/storage/geopackage/GeoPackageToPostgresTest.java
@@ -25,7 +25,7 @@ import org.apache.baremaps.testing.TestFiles;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
-public class GeoPackageToPostgresTest extends PostgresContainerTest {
+class GeoPackageToPostgresTest extends PostgresContainerTest {
 
   @Test
   @Tag("integration")
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/tilestore/TileCoordIteratorTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/tilestore/TileCoordIteratorTest.java
index e0d7ccce..d86d39e7 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/tilestore/TileCoordIteratorTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/tilestore/TileCoordIteratorTest.java
@@ -32,15 +32,15 @@ class TileCoordIteratorTest {
 
     TileCoordIterator i0 = new TileCoordIterator(e, 0, 0);
     List<TileCoord> l0 = ImmutableList.copyOf(i0);
-    assertEquals(l0.size(), 1);
+    assertEquals(1, l0.size());
 
     TileCoordIterator i1 = new TileCoordIterator(e, 1, 1);
     List<TileCoord> l1 = ImmutableList.copyOf(i1);
-    assertEquals(l1.size(), 4);
+    assertEquals(4, l1.size());
 
     TileCoordIterator i2 = new TileCoordIterator(e, 2, 2);
     List<TileCoord> l2 = ImmutableList.copyOf(i2);
-    assertEquals(l2.size(), 16);
+    assertEquals(16, l2.size());
   }
 
   @Test
@@ -48,11 +48,11 @@ class TileCoordIteratorTest {
     Envelope e0 = new TileCoord(0, 0, 1).envelope();
     TileCoordIterator i0 = new TileCoordIterator(e0, 2, 2);
     List<TileCoord> l0 = ImmutableList.copyOf(i0);
-    assertEquals(l0.size(), 4);
+    assertEquals(4, l0.size());
 
     Envelope e1 = new TileCoord(1, 1, 1).envelope();
     TileCoordIterator i1 = new TileCoordIterator(e1, 2, 2);
     List<TileCoord> l1 = ImmutableList.copyOf(i1);
-    assertEquals(l1.size(), 4);
+    assertEquals(4, l1.size());
   }
 }
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGeneratorTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGeneratorTest.java
index 98affb2b..214c13a6 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGeneratorTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGeneratorTest.java
@@ -19,6 +19,7 @@ package org.apache.baremaps.tilestore.postgres;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import java.sql.SQLException;
 import java.util.List;
 import javax.sql.DataSource;
 import org.apache.baremaps.database.postgres.PostgresRepositoryTest;
@@ -30,7 +31,7 @@ class PostgresQueryGeneratorTest extends 
PostgresRepositoryTest {
 
   @Test
   @Tag("integration")
-  void generate() {
+  void generate() throws SQLException {
     DataSource dataSource = dataSource();
     List<TilesetQuery> queries =
         new PostgresQueryGenerator(dataSource, null, "public", null, null, 
"TABLE").generate();
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/utils/ProjectionTransformerTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/utils/ProjectionTransformerTest.java
index 2171eb98..2f5faba8 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/utils/ProjectionTransformerTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/utils/ProjectionTransformerTest.java
@@ -29,7 +29,7 @@ import org.locationtech.jts.geom.PrecisionModel;
 class ProjectionTransformerTest {
 
   @Test
-  public void testPoint() {
+  void testPoint() {
     var inputGeom =
         new GeometryFactory(new PrecisionModel(), 4326).createPoint(new 
Coordinate(1, 1));
     var outputGeom = (Point) new ProjectionTransformer(4326, 
3857).transform(inputGeom);
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/WorkflowTest.java 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/WorkflowTest.java
index d55d913a..28f79cb9 100644
--- a/baremaps-core/src/test/java/org/apache/baremaps/workflow/WorkflowTest.java
+++ b/baremaps-core/src/test/java/org/apache/baremaps/workflow/WorkflowTest.java
@@ -31,7 +31,7 @@ import org.junit.jupiter.api.Test;
 class WorkflowTest extends PostgresContainerTest {
 
   @Test
-  @Disabled
+  @Disabled("requires internet access")
   void naturalearthGeoPackage() {
     var workflow = new Workflow(List.of(new Step("fetch-geopackage", 
List.of(), List.of(
         new 
DownloadUrl("https://naciscdn.org/naturalearth/packages/natural_earth_vector.gpkg.zip";,
@@ -45,7 +45,7 @@ class WorkflowTest extends PostgresContainerTest {
   }
 
   @Test
-  @Disabled
+  @Disabled("requires internet access")
   void coastlineShapefile() {
     var workflow = new Workflow(List.of(new Step("fetch-geopackage", List.of(),
         List.of(
@@ -60,7 +60,7 @@ class WorkflowTest extends PostgresContainerTest {
   }
 
   @Test
-  @Disabled
+  @Disabled("requires internet access")
   void simplifiedWaterPolygonsShapefile() {
     var workflow = new Workflow(List.of(new Step("simplified-water-polygons", 
List.of(), List.of(
         /*
@@ -78,7 +78,7 @@ class WorkflowTest extends PostgresContainerTest {
   }
 
   @Test
-  @Disabled
+  @Disabled("requires internet access")
   void workflow() {
     var workflow = new Workflow(List.of(new Step("fetch-geopackage", 
List.of(), List.of(
         new 
DownloadUrl("https://naciscdn.org/naturalearth/packages/natural_earth_vector.gpkg.zip";,
@@ -88,7 +88,7 @@ class WorkflowTest extends PostgresContainerTest {
   }
 
   @Test
-  @Disabled
+  @Disabled("requires internet access")
   void execute() {
     var workflow = new Workflow(List.of(
         new Step("fetch-geopackage", List.of(),
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ExecuteCommandTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ExecuteCommandTest.java
index 780a4c01..db249aeb 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ExecuteCommandTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ExecuteCommandTest.java
@@ -28,7 +28,7 @@ import org.junit.jupiter.api.Test;
 class ExecuteCommandTest {
 
   @Test
-  @Disabled
+  @Disabled("requires a shell")
   void execute() throws Exception {
     var path = Paths.get("file.txt").toAbsolutePath();
     new ExecuteCommand(String.format("echo test > %s", path)).execute(new 
WorkflowContext());
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportGeoPackageTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportGeoPackageTest.java
index 438539b5..f703b7ee 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportGeoPackageTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportGeoPackageTest.java
@@ -31,8 +31,11 @@ class ImportGeoPackageTest extends PostgresContainerTest {
   @Tag("integration")
   void execute() throws Exception {
     var task =
-        new 
ImportGeoPackage(TestFiles.resolve("baremaps-testing/data/samples/data.gpkg"), 
4326,
-            jdbcUrl(), 3857);
+        new ImportGeoPackage(
+            TestFiles.resolve("baremaps-testing/data/samples/data.gpkg"),
+            4326,
+            jdbcUrl(),
+            3857);
     task.execute(new WorkflowContext());
   }
 }
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/BinarySearch.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/BinarySearch.java
index ae3bd5ca..7539d1db 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/BinarySearch.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/BinarySearch.java
@@ -28,6 +28,10 @@ import org.apache.baremaps.data.collection.DataList;
  */
 public class BinarySearch {
 
+  private BinarySearch() {
+    // Prevent instantiation
+  }
+
   /**
    * Returns the index of the search key, if it is contained in the list; null 
otherwise.
    *
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/ExternalMergeSort.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/ExternalMergeSort.java
index 76bcd32b..3704ce3f 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/ExternalMergeSort.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/ExternalMergeSort.java
@@ -19,7 +19,6 @@ package org.apache.baremaps.data.algorithm;
 
 
 
-import java.io.IOException;
 import java.util.*;
 import java.util.function.Supplier;
 import java.util.stream.Stream;
@@ -33,6 +32,10 @@ import org.apache.baremaps.data.collection.DataList;
 @SuppressWarnings({"squid:S2095", "squid:S3776"})
 public class ExternalMergeSort {
 
+  private ExternalMergeSort() {
+    // Prevent instantiation
+  }
+
   /**
    * Sorts an input list to an output list.
    *
@@ -44,7 +47,6 @@ public class ExternalMergeSort {
    * @param batchSize The batch size
    * @param distinct The flag indicating if duplicates should be discarded
    * @param parallel The flag indicating if parallelism should be used
-   * @throws IOException
    */
   public static <T> void sort(
       DataList<T> input,
@@ -53,7 +55,7 @@ public class ExternalMergeSort {
       Supplier<DataList<T>> tempLists,
       long batchSize,
       boolean distinct,
-      boolean parallel) throws IOException {
+      boolean parallel) {
     mergeSortedBatches(sortInBatch(input, comparator, tempLists, batchSize, 
distinct, parallel),
         output, comparator, distinct);
   }
@@ -78,10 +80,10 @@ public class ExternalMergeSort {
         new PriorityQueue<>(batches.size(), (i, j) -> 
comparator.compare(i.peek(), j.peek()));
 
     for (DataList<T> input : batches) {
-      if (input.size() == 0) {
+      if (input.isEmpty()) {
         continue;
       }
-      DataStack stack = new DataStack(input);
+      DataStack<T> stack = new DataStack<>(input);
       if (!stack.empty()) {
         queue.add(stack);
       }
@@ -89,7 +91,7 @@ public class ExternalMergeSort {
 
     long counter = 0;
     if (!distinct) {
-      while (queue.size() > 0) {
+      while (!queue.isEmpty()) {
         DataStack<T> stack = queue.poll();
         T value = stack.pop();
         output.addIndexed(value);
@@ -102,7 +104,7 @@ public class ExternalMergeSort {
       }
     } else {
       T last = null;
-      if (queue.size() > 0) {
+      if (!queue.isEmpty()) {
         DataStack<T> stack = queue.poll();
         last = stack.pop();
         output.addIndexed(last);
@@ -113,7 +115,7 @@ public class ExternalMergeSort {
           queue.add(stack);
         }
       }
-      while (queue.size() > 0) {
+      while (!queue.isEmpty()) {
         DataStack<T> stack = queue.poll();
         T value = stack.pop();
         // Skip duplicate lines
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/Hilbert.java 
b/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/Hilbert.java
index 85b90706..ac4674fb 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/Hilbert.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/algorithm/Hilbert.java
@@ -27,7 +27,11 @@ import org.locationtech.jts.geom.Geometry;
  */
 public class Hilbert {
 
-  final static int HILBERT_MAX = (1 << 16) - 1;
+  private static final int HILBERT_MAX = (1 << 16) - 1;
+
+  private Hilbert() {
+    // Prevent instantiation
+  }
 
   /**
    * A comparator for sorting geometries by their Hilbert curve index.
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/FixedSizeDataList.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/FixedSizeDataList.java
index bfbbaece..1d5d01dc 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/FixedSizeDataList.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/FixedSizeDataList.java
@@ -35,7 +35,7 @@ public class FixedSizeDataList<E> implements DataList<E> {
 
   private final FixedSizeDataType<E> dataType;
 
-  private final Memory memory;
+  private final Memory<?> memory;
 
   private AtomicLong size;
 
@@ -54,7 +54,7 @@ public class FixedSizeDataList<E> implements DataList<E> {
    * @param dataType the data type
    * @param memory the memory
    */
-  public FixedSizeDataList(FixedSizeDataType<E> dataType, Memory memory) {
+  public FixedSizeDataList(FixedSizeDataType<E> dataType, Memory<?> memory) {
     if (dataType.size() > memory.segmentSize()) {
       throw new DataCollectionException("The segment size is too small for the 
data type");
     }
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataList.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataList.java
index 1d59156a..e29f3383 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataList.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataList.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.concurrent.atomic.AtomicLong;
 import org.apache.baremaps.data.memory.Memory;
+import org.apache.baremaps.data.memory.MemoryException;
 import org.apache.baremaps.data.memory.OffHeapMemory;
 import org.apache.baremaps.data.type.FixedSizeDataType;
 
@@ -36,7 +37,7 @@ public class MemoryAlignedDataList<E> implements DataList<E> {
 
   private final FixedSizeDataType<E> dataType;
 
-  private final Memory memory;
+  private final Memory<?> memory;
 
   private final int valueShift;
 
@@ -61,7 +62,7 @@ public class MemoryAlignedDataList<E> implements DataList<E> {
    * @param dataType the data type
    * @param memory the memory
    */
-  public MemoryAlignedDataList(FixedSizeDataType<E> dataType, Memory memory) {
+  public MemoryAlignedDataList(FixedSizeDataType<E> dataType, Memory<?> 
memory) {
     if (dataType.size() > memory.segmentSize()) {
       throw new DataCollectionException("The segment size is too small for the 
data type");
     }
@@ -124,7 +125,7 @@ public class MemoryAlignedDataList<E> implements 
DataList<E> {
     try {
       memory.clear();
     } catch (IOException e) {
-      throw new RuntimeException(e);
+      throw new MemoryException(e);
     }
   }
 
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataMap.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataMap.java
index 3e521acc..ca0380ba 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataMap.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataMap.java
@@ -37,7 +37,7 @@ public class MemoryAlignedDataMap<E> implements DataMap<Long, 
E> {
 
   private final FixedSizeDataType<E> dataType;
 
-  private final Memory memory;
+  private final Memory<?> memory;
 
   private final int valueShift;
 
@@ -51,7 +51,7 @@ public class MemoryAlignedDataMap<E> implements DataMap<Long, 
E> {
    * @param dataType the data type
    * @param memory the memory
    */
-  public MemoryAlignedDataMap(FixedSizeDataType<E> dataType, Memory memory) {
+  public MemoryAlignedDataMap(FixedSizeDataType<E> dataType, Memory<?> memory) 
{
     if (dataType.size() > memory.segmentSize()) {
       throw new DataCollectionException("The segment size is too small for the 
data type");
     }
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/storage/DataRowImpl.java 
b/baremaps-data/src/main/java/org/apache/baremaps/data/storage/DataRowImpl.java
index 26b27f44..72c7c6de 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/storage/DataRowImpl.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/storage/DataRowImpl.java
@@ -22,7 +22,7 @@ import java.util.List;
 /**
  * A row in a table.
  */
-public record DataRowImpl(DataSchema schema, List values) implements DataRow {
+public record DataRowImpl(DataSchema schema, List<Object> values) implements 
DataRow {
 
   /**
    * {@inheritDoc}
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/type/FixedSizeDataType.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/type/FixedSizeDataType.java
index 3aeedcf2..04a51bcf 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/type/FixedSizeDataType.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/type/FixedSizeDataType.java
@@ -35,7 +35,7 @@ public abstract class FixedSizeDataType<T> implements 
DataType<T> {
    *
    * @param size the size of the value
    */
-  public FixedSizeDataType(final int size) {
+  protected FixedSizeDataType(final int size) {
     this.size = size;
   }
 
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/type/GeometryDataType.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/type/GeometryDataType.java
index 87e96c6a..8e741d00 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/type/GeometryDataType.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/type/GeometryDataType.java
@@ -26,6 +26,7 @@ import org.locationtech.jts.geom.*;
  */
 public class GeometryDataType implements DataType<Geometry> {
 
+  public static final String UNSUPPORTED_GEOMETRY = "Unsupported geometry 
type: ";
   private final PointDataType pointDataType;
 
   private final LineStringDataType lineStringDataType;
@@ -88,7 +89,7 @@ public class GeometryDataType implements DataType<Geometry> {
     } else if (value instanceof GeometryCollection geometryCollection) {
       size += geometryCollectionDataType.size(geometryCollection);
     } else {
-      throw new IllegalArgumentException("Unsupported geometry type: " + 
value.getClass());
+      throw new IllegalArgumentException(UNSUPPORTED_GEOMETRY + 
value.getClass());
     }
 
     return size;
@@ -121,7 +122,7 @@ public class GeometryDataType implements DataType<Geometry> 
{
     } else if (type == 7) {
       size += geometryCollectionDataType.size(buffer, position + Byte.BYTES);
     } else {
-      throw new IllegalArgumentException("Unsupported geometry type: " + type);
+      throw new IllegalArgumentException(UNSUPPORTED_GEOMETRY + type);
     }
 
     return size;
@@ -158,7 +159,7 @@ public class GeometryDataType implements DataType<Geometry> 
{
       buffer.put(position, (byte) 7);
       geometryCollectionDataType.write(buffer, position + Byte.BYTES, 
geometryCollection);
     } else {
-      throw new IllegalArgumentException("Unsupported geometry type: " + 
value.getClass());
+      throw new IllegalArgumentException(UNSUPPORTED_GEOMETRY + 
value.getClass());
     }
   }
 
@@ -191,7 +192,7 @@ public class GeometryDataType implements DataType<Geometry> 
{
     } else if (type == 7) {
       return geometryCollectionDataType.read(buffer, p);
     } else {
-      throw new IllegalArgumentException("Unsupported geometry type: " + type);
+      throw new IllegalArgumentException(UNSUPPORTED_GEOMETRY + type);
     }
   }
 }
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/type/MemoryAlignedDataType.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/type/MemoryAlignedDataType.java
index 8c237bc9..94c44a25 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/type/MemoryAlignedDataType.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/type/MemoryAlignedDataType.java
@@ -34,7 +34,7 @@ public abstract class MemoryAlignedDataType<T> extends 
FixedSizeDataType<T> {
    *
    * @param size
    */
-  public MemoryAlignedDataType(int size) {
+  protected MemoryAlignedDataType(int size) {
     super(size);
     if ((size & -size) != size) {
       throw new IllegalArgumentException("The size must be a power of 2");
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/type/SmallIntegerDataType.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/type/SmallIntegerDataType.java
index 97e67062..b8ccd7e5 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/type/SmallIntegerDataType.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/type/SmallIntegerDataType.java
@@ -54,10 +54,10 @@ public class SmallIntegerDataType extends 
FixedSizeDataType<Integer> {
     byte s = (byte) (buffer.get(position + n - 1) >= 0 ? 0 : -1);
     int l = 0;
     for (int i = 3; i > n - 1; i--) {
-      l |= ((int) s & 0xff) << (i << 3);
+      l |= (s & 0xff) << (i << 3);
     }
     for (int i = n - 1; i >= 0; i--) {
-      l |= ((int) buffer.get(position + i) & 0xff) << (i << 3);
+      l |= (buffer.get(position + i) & 0xff) << (i << 3);
     }
     return l;
   }
diff --git 
a/baremaps-data/src/main/java/org/apache/baremaps/data/util/MappedByteBufferUtils.java
 
b/baremaps-data/src/main/java/org/apache/baremaps/data/util/MappedByteBufferUtils.java
index bff1e03f..947d3541 100644
--- 
a/baremaps-data/src/main/java/org/apache/baremaps/data/util/MappedByteBufferUtils.java
+++ 
b/baremaps-data/src/main/java/org/apache/baremaps/data/util/MappedByteBufferUtils.java
@@ -19,7 +19,6 @@ package org.apache.baremaps.data.util;
 
 
 
-import java.io.IOException;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.nio.ByteBuffer;
@@ -28,13 +27,17 @@ import java.nio.MappedByteBuffer;
 /** Utilities for working with memory-mapped files. */
 public class MappedByteBufferUtils {
 
+  private MappedByteBufferUtils() {
+    // Prevent instantiation
+  }
+
   /**
    * Attempt to force-unmap a list of memory-mapped file segments, so it can 
safely be deleted.
    *
    * @param buffer The buffer to unmap
-   * @throws IOException If any error occurs unmapping the segment
    */
-  public static void unmap(MappedByteBuffer buffer) throws IOException {
+  @SuppressWarnings("squid:S1141")
+  public static void unmap(MappedByteBuffer buffer) {
     try {
       // attempt to force-unmap the file, so we can delete it later
       // 
https://stackoverflow.com/questions/2972986/how-to-unmap-a-file-from-memory-mapped-using-filechannel-in-java
diff --git 
a/baremaps-data/src/test/java/org/apache/baremaps/data/algorithm/UnionStreamTest.java
 
b/baremaps-data/src/test/java/org/apache/baremaps/data/algorithm/UnionStreamTest.java
index d31c9c08..1e8cdda5 100644
--- 
a/baremaps-data/src/test/java/org/apache/baremaps/data/algorithm/UnionStreamTest.java
+++ 
b/baremaps-data/src/test/java/org/apache/baremaps/data/algorithm/UnionStreamTest.java
@@ -64,10 +64,8 @@ class UnionStreamTest {
     DataList<Geometry> list =
         DataConversions.asDataList(List.of(polygon1, polygon2, polygon3, 
polygon4));
     var union = new UnionStream(list).union().toList();
-    assertEquals(union.size(), 2);
-    assertEquals(union.get(0), UnaryUnionOp.union(List.of(polygon1, polygon2, 
polygon3)));
-    assertEquals(union.get(1), polygon4);
-
+    assertEquals(2, union.size());
+    assertEquals(UnaryUnionOp.union(List.of(polygon1, polygon2, polygon3)), 
union.get(0));
+    assertEquals(polygon4, union.get(1));
   }
-
 }
diff --git 
a/baremaps-geoparquet/src/main/java/org/apache/baremaps/geoparquet/data/GeoParquetGroupImpl.java
 
b/baremaps-geoparquet/src/main/java/org/apache/baremaps/geoparquet/data/GeoParquetGroupImpl.java
index 7e85b013..a108e383 100644
--- 
a/baremaps-geoparquet/src/main/java/org/apache/baremaps/geoparquet/data/GeoParquetGroupImpl.java
+++ 
b/baremaps-geoparquet/src/main/java/org/apache/baremaps/geoparquet/data/GeoParquetGroupImpl.java
@@ -315,9 +315,10 @@ public class GeoParquetGroupImpl implements 
GeoParquetGroup {
     }
 
     GroupField field = ((GroupField) 
geoParquetSchema.fields().get(fieldIndex));
-    GeoParquetGroupImpl group =
-        new GeoParquetGroupImpl(schema.getType(fieldIndex).asGroupType(), 
metadata, field.schema());
-    return group;
+    return new GeoParquetGroupImpl(
+        schema.getType(fieldIndex).asGroupType(),
+        metadata,
+        field.schema());
   }
 
   @Override
diff --git 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/style/Style.java 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/style/Style.java
index 500510c6..51e2d9dc 100644
--- 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/style/Style.java
+++ 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/style/Style.java
@@ -78,8 +78,16 @@ public class Style {
    *        rendering
    * @param zoom The zoom level of the map
    */
-  public Style(Integer version, String name, Map<String, StyleSource> sources, 
String sprite,
-      String glyphs, List<StyleLayer> layers, List<BigDecimal> center, Object 
metadata,
+  @SuppressWarnings("squid:S107")
+  public Style(
+      Integer version,
+      String name,
+      Map<String, StyleSource> sources,
+      String sprite,
+      String glyphs,
+      List<StyleLayer> layers,
+      List<BigDecimal> center,
+      Object metadata,
       BigDecimal zoom) {
     this.version = version;
     this.name = name;
diff --git 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/style/StyleLayer.java
 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/style/StyleLayer.java
index efb64816..452675f8 100644
--- 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/style/StyleLayer.java
+++ 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/style/StyleLayer.java
@@ -75,8 +75,16 @@ public class StyleLayer {
    * @param maxzoom the maximum zoom of the layer
    * @param paint the paint of the layer
    */
-  public StyleLayer(String type, List<Object> filter, String source, String 
sourceLayer,
-      Object layout, Integer minzoom, Integer maxzoom, Object paint) {
+  @SuppressWarnings("squid:S107")
+  public StyleLayer(
+      String type,
+      List<Object> filter,
+      String source,
+      String sourceLayer,
+      Object layout,
+      Integer minzoom,
+      Integer maxzoom,
+      Object paint) {
     this.type = type;
     this.filter = filter;
     this.source = source;
diff --git 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/tilejson/TileJSON.java
 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/tilejson/TileJSON.java
index 1bccbf7c..d4398b83 100644
--- 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/tilejson/TileJSON.java
+++ 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/tilejson/TileJSON.java
@@ -33,37 +33,52 @@ import java.util.List;
  *      https://github.com/mapbox/tilejson-spec</a>
  */
 public class TileJSON {
-  String tilejson;
+
   @JsonProperty("tiles")
   List<String> tiles;
+
   @JsonProperty("vector_layers")
   List<VectorLayer> vectorLayers;
+
   @JsonProperty("attribution")
   String attribution;
+
   @JsonProperty("bounds")
   List<Double> bounds;
+
   @JsonProperty("center")
   List<Double> center;
+
   @JsonProperty("data")
   List<String> data;
+
   @JsonProperty("description")
   String description;
+
   @JsonProperty("fillzoom")
   Integer fillzoom;
+
   @JsonProperty("grids")
   List<String> grids;
+
   @JsonProperty("legend")
   String legend;
+
   @JsonProperty("maxzoom")
   Integer maxzoom;
+
   @JsonProperty("minzoom")
   Integer minzoom;
+
   @JsonProperty("name")
   String name;
+
   @JsonProperty("scheme")
   String scheme;
+
   @JsonProperty("template")
   String template;
+
   @JsonProperty("version")
   String version;
 
diff --git 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/tileset/Tileset.java
 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/tileset/Tileset.java
index 83032b42..7af2058a 100644
--- 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/tileset/Tileset.java
+++ 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/tileset/Tileset.java
@@ -86,10 +86,25 @@ public class Tileset {
 
   public Tileset() {}
 
-  public Tileset(String tilejson, String name, String description, String 
version,
-      String attribution, String template, String legend, String scheme, 
List<String> tiles,
-      List<String> grids, List<String> data, Integer minzoom, Integer maxzoom, 
List<Double> bounds,
-      List<Double> center, List<TilesetLayer> vectorLayers, Integer fillzoom) {
+  @SuppressWarnings("squid:S107")
+  public Tileset(
+      String tilejson,
+      String name,
+      String description,
+      String version,
+      String attribution,
+      String template,
+      String legend,
+      String scheme,
+      List<String> tiles,
+      List<String> grids,
+      List<String> data,
+      Integer minzoom,
+      Integer maxzoom,
+      List<Double> bounds,
+      List<Double> center,
+      List<TilesetLayer> vectorLayers,
+      Integer fillzoom) {
     this.tilejson = tilejson;
     this.name = name;
     this.description = description;
diff --git 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/vectortile/VectorTileEncoder.java
 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/vectortile/VectorTileEncoder.java
index 8a883f59..9a8b73c2 100644
--- 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/vectortile/VectorTileEncoder.java
+++ 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/vectortile/VectorTileEncoder.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.function.Consumer;
+import java.util.function.IntConsumer;
 import org.apache.baremaps.maplibre.binary.VectorTile;
 import org.locationtech.jts.geom.*;
 
@@ -159,7 +160,7 @@ public class VectorTileEncoder {
    * @param tags The tags of a feature.
    * @param encoding The consumer of the tags.
    */
-  protected void encodeTag(Map<String, Object> tags, Consumer<Integer> 
encoding) {
+  protected void encodeTag(Map<String, Object> tags, IntConsumer encoding) {
     for (Entry<String, Object> tag : tags.entrySet()) {
       int keyIndex = keys.indexOf(tag.getKey());
       if (keyIndex == -1) {
@@ -182,7 +183,7 @@ public class VectorTileEncoder {
    * @param geometry The geometry to encode.
    * @param encoding The consumer of commands and parameters.
    */
-  protected void encodeGeometry(Geometry geometry, Consumer<Integer> encoding) 
{
+  protected void encodeGeometry(Geometry geometry, IntConsumer encoding) {
     if (geometry instanceof Point point) {
       encodePoint(point, encoding);
     } else if (geometry instanceof MultiPoint multiPoint) {
@@ -206,7 +207,7 @@ public class VectorTileEncoder {
    * @param point The point to encode.
    * @param encoding The consumer of commands and parameters.
    */
-  protected void encodePoint(Point point, Consumer<Integer> encoding) {
+  protected void encodePoint(Point point, IntConsumer encoding) {
     encoding.accept(command(MOVE_TO, 1));
     Coordinate coordinate = point.getCoordinate();
     int dx = (int) Math.round(coordinate.getX()) - cx;
@@ -223,7 +224,7 @@ public class VectorTileEncoder {
    * @param multiPoint The multipoint to encode.
    * @param encoding The consumer of commands and parameters.
    */
-  protected void encodeMultiPoint(MultiPoint multiPoint, Consumer<Integer> 
encoding) {
+  protected void encodeMultiPoint(MultiPoint multiPoint, IntConsumer encoding) 
{
     List<Coordinate> coordinates = List.of(multiPoint.getCoordinates());
     encoding.accept(command(MOVE_TO, coordinates.size()));
     encodeCoordinates(coordinates, encoding);
@@ -235,7 +236,7 @@ public class VectorTileEncoder {
    * @param lineString The linestring to encode.
    * @param encoding The consumer of commands and parameters.
    */
-  protected void encodeLineString(LineString lineString, Consumer<Integer> 
encoding) {
+  protected void encodeLineString(LineString lineString, IntConsumer encoding) 
{
     List<Coordinate> coordinates = List.of(lineString.getCoordinates());
     encoding.accept(command(MOVE_TO, 1));
     encodeCoordinates(coordinates.subList(0, 1), encoding);
@@ -249,8 +250,7 @@ public class VectorTileEncoder {
    * @param multiLineString The multilinestring to encode.
    * @param encoding The consumer of commands and parameters.
    */
-  protected void encodeMultiLineString(MultiLineString multiLineString,
-      Consumer<Integer> encoding) {
+  protected void encodeMultiLineString(MultiLineString multiLineString, 
IntConsumer encoding) {
     for (int i = 0; i < multiLineString.getNumGeometries(); i++) {
       Geometry geometry = multiLineString.getGeometryN(i);
       if (geometry instanceof LineString lineString) {
@@ -265,7 +265,7 @@ public class VectorTileEncoder {
    * @param polygon The polygon to encode.
    * @param encoding The consumer of commands and parameters.
    */
-  protected void encodePolygon(Polygon polygon, Consumer<Integer> encoding) {
+  protected void encodePolygon(Polygon polygon, IntConsumer encoding) {
     LinearRing exteriorRing = polygon.getExteriorRing();
     List<Coordinate> exteriorRingCoordinates = 
List.of(exteriorRing.getCoordinates());
 
@@ -295,7 +295,7 @@ public class VectorTileEncoder {
    * @param coordinates The coordinates of the ring
    * @param encoding The consumer of commands and parameters
    */
-  protected void encodeRing(List<Coordinate> coordinates, Consumer<Integer> 
encoding) {
+  protected void encodeRing(List<Coordinate> coordinates, IntConsumer 
encoding) {
     // Move to first point
     List<Coordinate> head = coordinates.subList(0, 1);
     encoding.accept(command(MOVE_TO, 1));
@@ -316,7 +316,7 @@ public class VectorTileEncoder {
    * @param multiPolygon The multipolygon to encode
    * @param encoding The consumer of commands and parameters
    */
-  protected void encodeMultiPolygon(MultiPolygon multiPolygon, 
Consumer<Integer> encoding) {
+  protected void encodeMultiPolygon(MultiPolygon multiPolygon, IntConsumer 
encoding) {
     for (int i = 0; i < multiPolygon.getNumGeometries(); i++) {
       Geometry geometry = multiPolygon.getGeometryN(i);
       if (geometry instanceof Polygon polygon) {
@@ -331,7 +331,7 @@ public class VectorTileEncoder {
    * @param coordinates The coordinates to encode
    * @param encoding The consumer of parameters
    */
-  protected void encodeCoordinates(List<Coordinate> coordinates, 
Consumer<Integer> encoding) {
+  protected void encodeCoordinates(List<Coordinate> coordinates, IntConsumer 
encoding) {
     for (Coordinate coordinate : coordinates) {
       int dx = (int) Math.round(coordinate.getX()) - cx;
       int dy = (int) Math.round(coordinate.getY()) - cy;
diff --git 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/vectortile/VectorTileFunctions.java
 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/vectortile/VectorTileFunctions.java
index d0b06401..d0c4f9f2 100644
--- 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/vectortile/VectorTileFunctions.java
+++ 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/vectortile/VectorTileFunctions.java
@@ -35,6 +35,10 @@ public class VectorTileFunctions {
 
   public static final int CLOSE_PATH = 7;
 
+  private VectorTileFunctions() {
+    // Prevent instantiation
+  }
+
   /**
    * Transforms a geometry into a vector tile geometry.
    *
diff --git 
a/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileDecoderTest.java
 
b/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileDecoderTest.java
index 5ecf6201..3246c69e 100644
--- 
a/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileDecoderTest.java
+++ 
b/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileDecoderTest.java
@@ -33,7 +33,7 @@ class VectorTileDecoderTest {
    * (25,17)
    */
   @Test
-  public void decodePoint() {
+  void decodePoint() {
     var coordinate = new Coordinate(25, 17);
     var point = geometryFactory.createPoint(coordinate);
     var decoder = new VectorTileDecoder();
@@ -49,7 +49,7 @@ class VectorTileDecoderTest {
    * (5,7) (3,2)
    */
   @Test
-  public void decodeMultiPoint() {
+  void decodeMultiPoint() {
     var coordinates = new Coordinate[] {
         new Coordinate(5, 7),
         new Coordinate(3, 2)
@@ -68,7 +68,7 @@ class VectorTileDecoderTest {
    * (2,2) (2,10) (10,10)
    */
   @Test
-  public void decodeLineString() {
+  void decodeLineString() {
     var lineString = geometryFactory.createLineString(new Coordinate[] {
         new Coordinate(2, 2),
         new Coordinate(2, 10),
@@ -86,7 +86,7 @@ class VectorTileDecoderTest {
    * Line 1: - (2,2) - (2,10) - (10,10) Line 2: - (1,1) - (3,5)
    */
   @Test
-  public void decodeMultiLineString() {
+  void decodeMultiLineString() {
     var lineString1 = geometryFactory.createLineString(new Coordinate[] {
         new Coordinate(2, 2),
         new Coordinate(2, 10),
@@ -111,7 +111,7 @@ class VectorTileDecoderTest {
    * (3,6) (8,12) (20,34) (3,6) Path Closing as Last Point
    */
   @Test
-  public void decodePolygon() {
+  void decodePolygon() {
     var polygon = geometryFactory.createPolygon(new Coordinate[] {
         new Coordinate(3, 6),
         new Coordinate(8, 12),
@@ -134,7 +134,7 @@ class VectorTileDecoderTest {
    * Ring: (13,13) (13,17) (17,17) (17,13) (13,13) Path Closing as Last Point
    */
   @Test
-  public void decodeMultiPolygon() {
+  void decodeMultiPolygon() {
     var multiPolygon = geometryFactory.createMultiPolygon(
         new Polygon[] {
             geometryFactory.createPolygon(
@@ -169,7 +169,5 @@ class VectorTileDecoderTest {
     var encoding = List.of(9, 0, 0, 26, 20, 0, 0, 20, 19, 0, 15, 9, 22, 2, 26, 
18, 0, 0, 18, 17, 0,
         15, 9, 4, 13, 26, 0, 8, 8, 0, 0, 7, 15);
     assertEquals(multiPolygon, decoder.decodePolygon(encoding));
-
-
   }
 }
diff --git 
a/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileEncoderTest.java
 
b/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileEncoderTest.java
index 9fa655a3..f94fa23a 100644
--- 
a/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileEncoderTest.java
+++ 
b/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileEncoderTest.java
@@ -34,7 +34,7 @@ class VectorTileEncoderTest {
    * (25,17)
    */
   @Test
-  public void encodePoint() {
+  void encodePoint() {
     var coordinate = new Coordinate(25, 17);
     var point = geometryFactory.createPoint(coordinate);
     var encoder = new VectorTileEncoder();
@@ -51,7 +51,7 @@ class VectorTileEncoderTest {
    * (5,7) (3,2)
    */
   @Test
-  public void encodeMultiPoint() {
+  void encodeMultiPoint() {
     var coordinates = new Coordinate[] {
         new Coordinate(5, 7),
         new Coordinate(3, 2)
@@ -71,7 +71,7 @@ class VectorTileEncoderTest {
    * (2,2) (2,10) (10,10)
    */
   @Test
-  public void encodeLineString() {
+  void encodeLineString() {
     var lineString = geometryFactory.createLineString(new Coordinate[] {
         new Coordinate(2, 2),
         new Coordinate(2, 10),
@@ -91,7 +91,7 @@ class VectorTileEncoderTest {
    * Line 1: - (2,2) - (2,10) - (10,10) Line 2: - (1,1) - (3,5)
    */
   @Test
-  public void encodeMultiLineString() {
+  void encodeMultiLineString() {
     var lineString1 = geometryFactory.createLineString(new Coordinate[] {
         new Coordinate(2, 2),
         new Coordinate(2, 10),
@@ -117,7 +117,7 @@ class VectorTileEncoderTest {
    * (3,6) (8,12) (20,34) (3,6) Path Closing as Last Point
    */
   @Test
-  public void encodePolygon() {
+  void encodePolygon() {
     var polygon = geometryFactory.createPolygon(new Coordinate[] {
         new Coordinate(3, 6),
         new Coordinate(8, 12),
@@ -141,7 +141,7 @@ class VectorTileEncoderTest {
    * Ring: (13,13) (13,17) (17,17) (17,13) (13,13) Path Closing as Last Point
    */
   @Test
-  public void encodeMultiPolygon() {
+  void encodeMultiPolygon() {
     var multiPolygon = geometryFactory.createMultiPolygon(
         new Polygon[] {
             geometryFactory.createPolygon(
@@ -177,7 +177,5 @@ class VectorTileEncoderTest {
     encoder.encodeMultiPolygon(multiPolygon, encoding::add);
     assertEquals(List.of(9, 0, 0, 26, 20, 0, 0, 20, 19, 0, 15, 9, 22, 2, 26, 
18, 0, 0, 18, 17, 0,
         15, 9, 4, 13, 26, 0, 8, 8, 0, 0, 7, 15), encoding);
-
-
   }
 }
diff --git 
a/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileTest.java
 
b/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileTest.java
index 7ab76ab3..12e3b137 100644
--- 
a/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileTest.java
+++ 
b/baremaps-maplibre/src/test/java/org/apache/baremaps/maplibre/vectortile/VectorTileTest.java
@@ -25,12 +25,12 @@ import org.junit.jupiter.api.Test;
 import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.GeometryFactory;
 
-public class VectorTileTest {
+class VectorTileTest {
 
-  private static final GeometryFactory GEOMETRY_FACTORY = new 
GeometryFactory();
+  static final GeometryFactory GEOMETRY_FACTORY = new GeometryFactory();
 
   @Test
-  public void endToEnd() {
+  void endToEnd() {
     var tile = new Tile(List.of(
         new Layer("layer", 256, List.of(
             new Feature(1, Map.of("a", 1.0, "b", "2"),
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/function/EntityToGeometryMapper.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/function/EntityToGeometryMapper.java
index 783e9d3c..6d6b4453 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/function/EntityToGeometryMapper.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/function/EntityToGeometryMapper.java
@@ -37,9 +37,9 @@ public class EntityToGeometryMapper implements 
Function<Entity, Optional<Geometr
         return Optional.ofNullable(way.getGeometry());
       } else if (entity instanceof Relation relation) {
         return Optional.ofNullable(relation.getGeometry());
-      } else if (entity instanceof Header header) {
+      } else if (entity instanceof Header) {
         return Optional.empty();
-      } else if (entity instanceof Bound bound) {
+      } else if (entity instanceof Bound) {
         return Optional.empty();
       } else {
         throw new StreamException("Unknown entity type.");
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/model/Element.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/model/Element.java
index e10cfa67..676b7666 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/model/Element.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/model/Element.java
@@ -28,9 +28,9 @@ import org.locationtech.jts.geom.Geometry;
  * Represents an element in an OpenStreetMap dataset. Elements are a basis to 
model the physical
  * world.
  */
-public sealed
+public abstract sealed
 
-abstract class Element implements Entity
+class Element implements Entity
 permits Node, Way, Relation
 {
 
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/BatchedSpliterator.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/BatchedSpliterator.java
index d519b54c..5736c6dd 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/BatchedSpliterator.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/BatchedSpliterator.java
@@ -62,8 +62,8 @@ public class BatchedSpliterator<T> implements Spliterator<T> {
   public Spliterator<T> trySplit() {
     List<T> batch = new ArrayList<>();
     while (batch.size() < batchSize && tryAdvance(batch::add)) {
+      // Do nothing
     }
-
     if (!batch.isEmpty()) {
       return Spliterators.spliterator(batch, characteristics());
     } else {
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/ConsumerUtils.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/ConsumerUtils.java
index 5fe5f804..f36733ce 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/ConsumerUtils.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/ConsumerUtils.java
@@ -25,7 +25,9 @@ import java.util.function.UnaryOperator;
 /** Utility methods for dealing with consumers. */
 public class ConsumerUtils {
 
-  private ConsumerUtils() {}
+  private ConsumerUtils() {
+    // Prevent instantiation
+  }
 
   /**
    * Returns a consumer that applies a function to its input, and then passes 
the result to the
@@ -34,8 +36,10 @@ public class ConsumerUtils {
    * @return
    * @param <T>
    */
+  @SuppressWarnings("squid:S1172")
   public static <T> Consumer<T> chain(Class<T> type) {
-    return T -> {
+    return t -> {
+      // Do nothing
     };
   }
 
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/StreamUtils.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/StreamUtils.java
index d7e6b36c..5b633f85 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/StreamUtils.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/StreamUtils.java
@@ -35,6 +35,10 @@ import 
org.apache.baremaps.openstreetmap.stream.BufferedSpliterator.InSourceOrde
 /** Utility methods for creating parallel, buffered and batched streams of 
unknown size. */
 public class StreamUtils {
 
+  private StreamUtils() {
+    // Prevent instantiation
+  }
+
   /**
    * Create an ordered sequential stream from an iterator of unknown size.
    *
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/SupplierUtils.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/SupplierUtils.java
index 14910293..eef97e8e 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/SupplierUtils.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/stream/SupplierUtils.java
@@ -25,7 +25,9 @@ import java.util.function.Supplier;
 /** Utility methods for dealing with suppliers. */
 public class SupplierUtils {
 
-  private SupplierUtils() {}
+  private SupplierUtils() {
+    // Prevent instantiation
+  }
 
   /**
    * Returns a supplier that memoizes the result returned by another supplier.
@@ -49,12 +51,12 @@ public class SupplierUtils {
    * @return the memoized supplier
    */
   public static <T> Supplier<T> memoize(Supplier<T> supplier, int 
timeToLiveMillis) {
-    return new Supplier() {
+    return new Supplier<T>() {
       long t1 = System.currentTimeMillis();
       T value = supplier.get();
 
       @Override
-      public Object get() {
+      public T get() {
         long t2 = System.currentTimeMillis();
         if (t2 - t1 > timeToLiveMillis) {
           t1 = t2;
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/utils/CRSUtils.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/utils/CRSUtils.java
index 1645ebf4..cb20f8b0 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/utils/CRSUtils.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/utils/CRSUtils.java
@@ -36,7 +36,7 @@ import org.locationtech.proj4j.CoordinateReferenceSystem;
 public class CRSUtils {
 
   private CRSUtils() {
-    // prevent instantiation
+    // Prevent instantiation
   }
 
   private static final CRSFactory CRS_FACTORY = new CRSFactory();
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/utils/GeometryUtils.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/utils/GeometryUtils.java
index 75c8fafd..e0d6813e 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/utils/GeometryUtils.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/utils/GeometryUtils.java
@@ -24,7 +24,6 @@ import org.locationtech.jts.geom.*;
 import org.locationtech.jts.io.ParseException;
 import org.locationtech.jts.io.WKBReader;
 import org.locationtech.jts.io.WKBWriter;
-import org.locationtech.proj4j.CRSFactory;
 import org.locationtech.proj4j.CoordinateReferenceSystem;
 import org.locationtech.proj4j.CoordinateTransform;
 import org.locationtech.proj4j.CoordinateTransformFactory;
@@ -77,7 +76,6 @@ public class GeometryUtils {
    * @return the coordinate transform
    */
   public static CoordinateTransform coordinateTransform(Integer sourceSrid, 
Integer targetSrid) {
-    CRSFactory crsFactory = new CRSFactory();
     CoordinateReferenceSystem sourceCRS = CRSUtils.createFromSrid(sourceSrid);
     CoordinateReferenceSystem targetCRS = CRSUtils.createFromSrid(targetSrid);
     CoordinateTransformFactory coordinateTransformFactory = new 
CoordinateTransformFactory();
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/xml/XmlChangeSpliterator.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/xml/XmlChangeSpliterator.java
index 1f26ae34..e52e9531 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/xml/XmlChangeSpliterator.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/xml/XmlChangeSpliterator.java
@@ -166,13 +166,10 @@ public class XmlChangeSpliterator implements 
Spliterator<Change> {
     Map<String, Object> tags = new HashMap<>();
     reader.nextTag();
     while (reader.getEventType() == XMLStreamConstants.START_ELEMENT) {
-      switch (reader.getLocalName()) {
-        case ELEMENT_NAME_TAG:
-          readTag(tags);
-          break;
-        default:
-          readUnknownElement();
-          break;
+      if (ELEMENT_NAME_TAG.equals(reader.getLocalName())) {
+        readTag(tags);
+      } else {
+        readUnknownElement();
       }
     }
 
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliterator.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliterator.java
index 3787f4af..b94346ad 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliterator.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliterator.java
@@ -189,13 +189,10 @@ public class XmlEntitySpliterator implements 
Spliterator<Entity> {
     Map<String, Object> tags = new HashMap<>();
     reader.nextTag();
     while (reader.getEventType() == XMLStreamConstants.START_ELEMENT) {
-      switch (reader.getLocalName()) {
-        case ELEMENT_NAME_TAG:
-          readTag(tags);
-          break;
-        default:
-          readUnknownElement();
-          break;
+      if (ELEMENT_NAME_TAG.equals(reader.getLocalName())) {
+        readTag(tags);
+      } else {
+        readUnknownElement();
       }
     }
 
diff --git 
a/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/OsmTestData.java
 
b/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/OsmDataTest.java
similarity index 96%
rename from 
baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/OsmTestData.java
rename to 
baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/OsmDataTest.java
index c1d9ce9b..b6921e1a 100644
--- 
a/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/OsmTestData.java
+++ 
b/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/OsmDataTest.java
@@ -18,6 +18,7 @@
 package org.apache.baremaps.openstreetmap;
 
 import static org.apache.baremaps.testing.TestFiles.resolve;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 import java.nio.file.Files;
@@ -45,11 +46,11 @@ import 
org.testcontainers.shaded.com.fasterxml.jackson.databind.JsonNode;
 import org.testcontainers.shaded.com.fasterxml.jackson.databind.ObjectMapper;
 
 
-class OsmTestData {
+class OsmDataTest {
 
   @TestFactory
   Stream<DynamicTest> runTests() throws IOException {
-    var directory = resolve("osm-testdata");
+    var directory = resolve("baremaps-testing/data/osm-testdata");
     try (var files = Files.walk(directory)) {
       return files.filter(f -> f.endsWith("test.json"))
           .map(OsmTest::new)
@@ -116,14 +117,13 @@ class OsmTestData {
       }
 
       // The test geometry and the file geometry should be equal
-      var message = String.format("%s: %s\nExpected:\n%s\nActual:\n%s",
+      var message = String.format("%s: %s%nExpected:%n%s%nActual:%n%s",
           osmTest.getId(), osmTest.getDescription(), testGeometry, 
fileGeometry);
 
       RoundingTransformer transformer = new RoundingTransformer(2);
       fileGeometry = transformer.transform(fileGeometry);
 
-      Assert.assertTrue(message, testGeometry.equalsTopo(fileGeometry));
-
+      assertTrue(testGeometry.equalsTopo(fileGeometry), message);
     }
   }
 
@@ -256,7 +256,7 @@ class OsmTestData {
     }
 
     @Override
-    public int compareTo(@NotNull OsmTestData.OsmTest o) {
+    public int compareTo(@NotNull OsmDataTest.OsmTest o) {
       return Long.compare(getId(), o.getId());
     }
   }
diff --git 
a/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/stream/StreamUtilsTest.java
 
b/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/stream/StreamUtilsTest.java
index bd016414..ee0c3889 100644
--- 
a/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/stream/StreamUtilsTest.java
+++ 
b/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/stream/StreamUtilsTest.java
@@ -31,15 +31,15 @@ class StreamUtilsTest {
   void partition() {
     List<Integer> list = IntStream.range(0, 100).boxed().toList();
     List<List<Integer>> partitions = StreamUtils.partition(list.stream(), 
10).toList();
-    assertEquals(partitions.size(), 10);
+    assertEquals(10, partitions.size());
   }
 
   @Test
   void bufferInSourceOrder() {
     List<Integer> l1 = IntStream.range(0, 100).boxed().toList();
     List<Integer> l2 = StreamUtils.bufferInSourceOrder(l1.stream(), i -> i, 
10).toList();
-    assertEquals(l2.size(), l1.size());
-    assertEquals(l2, l1);
+    assertEquals(l1.size(), l2.size());
+    assertEquals(l1, l2);
   }
 
   @Test
@@ -58,8 +58,8 @@ class StreamUtilsTest {
     List<Integer> l1 = IntStream.range(0, 100).boxed().toList();
     List<Integer> l2 =
         StreamUtils.bufferInCompletionOrder(l1.stream(), i -> i, 
10).sorted().toList();
-    assertEquals(l2.size(), l1.size());
-    assertEquals(l2, l1);
+    assertEquals(l1.size(), l2.size());
+    assertEquals(l1, l2);
   }
 
   @Test
@@ -72,5 +72,4 @@ class StreamUtilsTest {
       StreamUtils.bufferInCompletionOrder(l1.stream(), throwException, 
10).sorted().toList();
     });
   }
-
 }
diff --git 
a/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlChangeSpliteratorTest.java
 
b/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlChangeSpliteratorTest.java
index 4da9f767..c7b23d2d 100644
--- 
a/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlChangeSpliteratorTest.java
+++ 
b/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlChangeSpliteratorTest.java
@@ -19,7 +19,6 @@ package org.apache.baremaps.openstreetmap.xml;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -30,6 +29,7 @@ import org.apache.baremaps.openstreetmap.model.Change;
 import org.apache.baremaps.openstreetmap.stream.AccumulatingConsumer;
 import org.apache.baremaps.openstreetmap.stream.HoldingConsumer;
 import org.apache.baremaps.testing.TestFiles;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
 class XmlChangeSpliteratorTest {
@@ -39,7 +39,7 @@ class XmlChangeSpliteratorTest {
     try (
         InputStream input = new 
GZIPInputStream(Files.newInputStream(TestFiles.SAMPLE_OSC_XML_2))) {
       Spliterator<Change> spliterator = new XmlChangeSpliterator(input);
-      spliterator.forEachRemaining(fileBlock -> assertNotNull(fileBlock));
+      spliterator.forEachRemaining(Assertions::assertNotNull);
       assertFalse(spliterator.tryAdvance(new HoldingConsumer<>()));
     }
   }
@@ -51,10 +51,10 @@ class XmlChangeSpliteratorTest {
       Spliterator<Change> spliterator = new XmlChangeSpliterator(input);
       AccumulatingConsumer<Change> accumulator = new AccumulatingConsumer<>();
       spliterator.forEachRemaining(accumulator);
-      assertEquals(accumulator.values().size(), 5);
-      assertEquals(accumulator.values().stream()
+      assertEquals(5, accumulator.values().size());
+      assertEquals(36, accumulator.values().stream()
           .flatMap(change -> change.entities().stream())
-          .toList().size(), 36);
+          .toList().size());
     }
   }
 }
diff --git 
a/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliteratorTestDataType.java
 
b/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliteratorTest.java
similarity index 91%
rename from 
baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliteratorTestDataType.java
rename to 
baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliteratorTest.java
index b9eb3d26..50fe0d16 100644
--- 
a/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliteratorTestDataType.java
+++ 
b/baremaps-openstreetmap/src/test/java/org/apache/baremaps/openstreetmap/xml/XmlEntitySpliteratorTest.java
@@ -19,7 +19,6 @@ package org.apache.baremaps.openstreetmap.xml;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -29,15 +28,16 @@ import org.apache.baremaps.openstreetmap.model.Entity;
 import org.apache.baremaps.openstreetmap.stream.AccumulatingConsumer;
 import org.apache.baremaps.openstreetmap.stream.HoldingConsumer;
 import org.apache.baremaps.testing.TestFiles;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-class XmlEntitySpliteratorTestDataType {
+class XmlEntitySpliteratorTest {
 
   @Test
   void tryAdvance() throws IOException {
     try (InputStream input = Files.newInputStream(TestFiles.SAMPLE_OSM_XML)) {
       Spliterator<Entity> spliterator = new XmlEntitySpliterator(input);
-      spliterator.forEachRemaining(fileBlock -> assertNotNull(fileBlock));
+      spliterator.forEachRemaining(Assertions::assertNotNull);
       assertFalse(spliterator.tryAdvance(new HoldingConsumer<>()));
     }
   }
diff --git 
a/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/Compression.java 
b/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/Compression.java
index 9976367c..a339e606 100644
--- 
a/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/Compression.java
+++ 
b/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/Compression.java
@@ -34,7 +34,7 @@ public enum Compression {
       case GZIP -> decompressGzip(inputStream);
       case BROTLI -> decompressBrotli(inputStream);
       case ZSTD -> decompressZstd(inputStream);
-      default -> throw new RuntimeException("Unknown compression");
+      default -> throw new UnsupportedOperationException("Unknown compression 
format");
     };
   }
 
@@ -43,11 +43,11 @@ public enum Compression {
   }
 
   static InputStream decompressBrotli(InputStream buffer) {
-    throw new RuntimeException("Brotli compression not implemented");
+    throw new UnsupportedOperationException("Brotli compression not 
implemented");
   }
 
   static InputStream decompressZstd(InputStream buffer) {
-    throw new RuntimeException("Zstd compression not implemented");
+    throw new UnsupportedOperationException("Zstd compression not 
implemented");
   }
 
   OutputStream compress(OutputStream outputStream) throws IOException {
@@ -56,7 +56,7 @@ public enum Compression {
       case GZIP -> compressGzip(outputStream);
       case BROTLI -> compressBrotli(outputStream);
       case ZSTD -> compressZstd(outputStream);
-      default -> throw new RuntimeException("Unknown compression");
+      default -> throw new UnsupportedOperationException("Unknown compression 
format");
     };
   }
 
@@ -65,10 +65,10 @@ public enum Compression {
   }
 
   static OutputStream compressBrotli(OutputStream outputStream) {
-    throw new RuntimeException("Brotli compression not implemented");
+    throw new UnsupportedOperationException("Brotli compression not 
implemented");
   }
 
   static OutputStream compressZstd(OutputStream outputStream) {
-    throw new RuntimeException("Zstd compression not implemented");
+    throw new UnsupportedOperationException("Zstd compression not 
implemented");
   }
 }
diff --git 
a/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/Header.java 
b/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/Header.java
index 2ad0b74d..e79b7c1a 100644
--- a/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/Header.java
+++ b/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/Header.java
@@ -86,6 +86,7 @@ public class Header {
     this.specVersion = 3;
   }
 
+  @SuppressWarnings("squid:S107")
   public Header(
       int specVersion,
       long rootDirectoryOffset,
diff --git 
a/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/PMTilesReader.java 
b/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/PMTilesReader.java
index 27d8f91b..6d9a259c 100644
--- 
a/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/PMTilesReader.java
+++ 
b/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/PMTilesReader.java
@@ -38,18 +38,16 @@ public class PMTilesReader {
     this.path = path;
   }
 
-  public Header getHeader() {
+  public Header getHeader() throws IOException {
     if (header == null) {
       try (var inputStream = new 
LittleEndianDataInputStream(Files.newInputStream(path))) {
         header = PMTilesUtils.deserializeHeader(inputStream);
-      } catch (IOException e) {
-        throw new RuntimeException(e);
       }
     }
     return header;
   }
 
-  public List<Entry> getRootDirectory() {
+  public List<Entry> getRootDirectory() throws IOException {
     if (rootEntries == null) {
       var header = getHeader();
       rootEntries = getDirectory(header.getRootDirectoryOffset());
@@ -57,7 +55,7 @@ public class PMTilesReader {
     return rootEntries;
   }
 
-  public List<Entry> getDirectory(long offset) {
+  public List<Entry> getDirectory(long offset) throws IOException {
     var header = getHeader();
     try (var input = Files.newInputStream(path)) {
       long skipped = 0;
@@ -68,14 +66,12 @@ public class PMTilesReader {
           new 
LittleEndianDataInputStream(header.getInternalCompression().decompress(input))) 
{
         return PMTilesUtils.deserializeEntries(decompressed);
       }
-    } catch (IOException e) {
-      throw new RuntimeException(e);
     }
   }
 
-  public ByteBuffer getTile(int z, long x, long y) {
+  public ByteBuffer getTile(int z, long x, long y) throws IOException {
     var tileId = PMTilesUtils.zxyToTileId(z, x, y);
-    var header = getHeader();
+    var fileHeader = getHeader();
     var entries = getRootDirectory();
     var entry = PMTilesUtils.findTile(entries, tileId);
 
@@ -85,14 +81,12 @@ public class PMTilesReader {
 
     try (var channel = FileChannel.open(path)) {
       var compressed = ByteBuffer.allocate((int) entry.getLength());
-      channel.position(header.getTileDataOffset() + entry.getOffset());
+      channel.position(fileHeader.getTileDataOffset() + entry.getOffset());
       channel.read(compressed);
       compressed.flip();
       try (var tile = new ByteArrayInputStream(compressed.array())) {
         return ByteBuffer.wrap(tile.readAllBytes());
       }
-    } catch (IOException e) {
-      throw new RuntimeException(e);
     }
   }
 }
diff --git 
a/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/PMTilesUtils.java 
b/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/PMTilesUtils.java
index 85c61574..1f8974dd 100644
--- 
a/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/PMTilesUtils.java
+++ 
b/baremaps-pmtiles/src/main/java/org/apache/baremaps/pmtiles/PMTilesUtils.java
@@ -72,7 +72,7 @@ class PMTilesUtils {
     if (b < 0x80) {
       return toNum(l, h);
     }
-    throw new RuntimeException("Expected varint not more than 10 bytes");
+    throw new IllegalArgumentException("Expected varint not more than 10 
bytes");
   }
 
   static int writeVarInt(OutputStream output, long value)
@@ -151,10 +151,10 @@ class PMTilesUtils {
 
   static long zxyToTileId(int z, long x, long y) {
     if (z > 26) {
-      throw new RuntimeException("Tile zoom level exceeds max safe number 
limit (26)");
+      throw new IllegalArgumentException("Tile zoom level exceeds max safe 
number limit (26)");
     }
     if (x > Math.pow(2, z) - 1 || y > Math.pow(2, z) - 1) {
-      throw new RuntimeException("tile x/y outside zoom level bounds");
+      throw new IllegalArgumentException("tile x/y outside zoom level bounds");
     }
     long acc = tzValues[z];
     long n = LongMath.pow(2, z);
@@ -182,7 +182,7 @@ class PMTilesUtils {
       }
       acc += numTiles;
     }
-    throw new RuntimeException("Tile zoom level exceeds max safe number limit 
(26)");
+    throw new IllegalArgumentException("Tile zoom level exceeds max safe 
number limit (26)");
   }
 
   static Header deserializeHeader(InputStream input) throws IOException {
@@ -311,7 +311,7 @@ class PMTilesUtils {
       long value = readVarInt(buffer);
       if (value == 0 && i > 0) {
         Entry prevEntry = entries.get(i - 1);
-        entries.get(i).setOffset(prevEntry.getOffset() + 
prevEntry.getLength());;
+        entries.get(i).setOffset(prevEntry.getOffset() + 
prevEntry.getLength());
       } else {
         entries.get(i).setOffset(value - 1);
       }
diff --git 
a/baremaps-pmtiles/src/test/java/org/apache/baremaps/pmtiles/PMTilesUtilsTest.java
 
b/baremaps-pmtiles/src/test/java/org/apache/baremaps/pmtiles/PMTilesUtilsTest.java
index dca694f8..affc6f50 100644
--- 
a/baremaps-pmtiles/src/test/java/org/apache/baremaps/pmtiles/PMTilesUtilsTest.java
+++ 
b/baremaps-pmtiles/src/test/java/org/apache/baremaps/pmtiles/PMTilesUtilsTest.java
@@ -158,7 +158,6 @@ class PMTilesUtilsTest {
 
   @Test
   void encodeHeader() throws IOException {
-    var etag = "1";
     var header = new Header(
         127,
         25,
diff --git 
a/baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResource.java
 
b/baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResource.java
index ad9ec355..5a6d595d 100644
--- 
a/baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResource.java
+++ 
b/baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResource.java
@@ -34,6 +34,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.baremaps.geocoder.GeonamesQueryBuilder;
+import org.apache.baremaps.openstreetmap.stream.StreamException;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.ScoreDoc;
 import org.apache.lucene.search.SearcherManager;
@@ -119,7 +120,7 @@ public class GeocoderResource {
       }
       return new GeocoderResult(scoreDoc.score, data);
     } catch (IOException e) {
-      throw new RuntimeException(e);
+      throw new StreamException(e);
     }
   }
 }
diff --git 
a/baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResource.java 
b/baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResource.java
index 4d22dd6a..378f9f7d 100644
--- 
a/baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResource.java
+++ 
b/baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResource.java
@@ -26,7 +26,6 @@ import com.linecorp.armeria.server.ServiceRequestContext;
 import com.linecorp.armeria.server.annotation.Get;
 import com.linecorp.armeria.server.annotation.Param;
 import com.linecorp.armeria.server.annotation.ProducesJson;
-import java.net.InetSocketAddress;
 import java.util.List;
 import java.util.Optional;
 import org.apache.baremaps.iploc.IpLocObject;
@@ -87,7 +86,7 @@ public class IpLocResource {
           Optional.ofNullable((CharSequence) ip)
               .or(() -> 
Optional.ofNullable(requestHeaders.get("X-Forwarded-For")))
               .or(() -> Optional.ofNullable(requestHeaders.get("X-Real-IP")))
-              .orElse(((InetSocketAddress) 
context.remoteAddress()).getAddress().getHostAddress())
+              .orElse(context.remoteAddress().getAddress().getHostAddress())
               .toString().split(",")[0].trim());
       List<IpLocObject> inetnumLocations = 
ipLocRepository.findByInetAddress(address);
       List<InetnumLocationDto> inetnumLocationDtos =
diff --git 
a/baremaps-server/src/main/java/org/apache/baremaps/server/SearchResource.java 
b/baremaps-server/src/main/java/org/apache/baremaps/server/SearchResource.java
index d7dc7002..8ea84332 100644
--- 
a/baremaps-server/src/main/java/org/apache/baremaps/server/SearchResource.java
+++ 
b/baremaps-server/src/main/java/org/apache/baremaps/server/SearchResource.java
@@ -40,7 +40,7 @@ public class SearchResource {
 
   private static final Logger logger = 
LoggerFactory.getLogger(SearchResource.class);
 
-  private final String SEARCH_QUERY =
+  private static final String SEARCH_QUERY =
       """
           SELECT id, tags, st_asewkt(st_transform(geom, 'EPSG:4326')), 
ts_rank_cd(to_tsvector('english', tags), query) as rank
           FROM osm_entities, phraseto_tsquery('english', ?) as query
diff --git 
a/baremaps-testing/src/main/java/org/apache/baremaps/testing/GeometryAssertions.java
 
b/baremaps-testing/src/main/java/org/apache/baremaps/testing/GeometryAssertions.java
index e42b3bda..d8e8e837 100644
--- 
a/baremaps-testing/src/main/java/org/apache/baremaps/testing/GeometryAssertions.java
+++ 
b/baremaps-testing/src/main/java/org/apache/baremaps/testing/GeometryAssertions.java
@@ -23,6 +23,10 @@ import 
org.locationtech.jts.precision.GeometryPrecisionReducer;
 
 public class GeometryAssertions {
 
+  private GeometryAssertions() {
+    // Prevent instantiation
+  }
+
   private static void throwAssertionError(Object expected, Object actual) {
     throw new AssertionError("Expected " + expected + " but was " + actual);
   }
diff --git 
a/baremaps-testing/src/main/java/org/apache/baremaps/testing/TestFiles.java 
b/baremaps-testing/src/main/java/org/apache/baremaps/testing/TestFiles.java
index 3fbce1ed..2f47d2d6 100644
--- a/baremaps-testing/src/main/java/org/apache/baremaps/testing/TestFiles.java
+++ b/baremaps-testing/src/main/java/org/apache/baremaps/testing/TestFiles.java
@@ -22,6 +22,10 @@ import org.locationtech.jts.geom.*;
 
 public class TestFiles {
 
+  private TestFiles() {
+    // Prevent instantiation
+  }
+
   /* The paths of the sample directory and files */
 
   public static final Path SAMPLE_DIR =

Reply via email to