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

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 37ca8154b9476590ee02479f1a3940cae34b4e4e
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Sat Dec 28 12:16:22 2024 +0100

    Replace usage of legacy `StringTokenizer` by `String.split(…)` or 
alternatives.
---
 .../apache/sis/metadata/sql/MetadataWriter.java    |  8 +++-----
 .../apache/sis/metadata/sql/privy/SQLBuilder.java  | 13 ++++++-------
 .../sis/referencing/factory/sql/EPSGInstaller.java | 22 +++++++---------------
 .../provider/FranceGeocentricInterpolation.java    | 18 ++++++++----------
 .../main/org/apache/sis/util/Version.java          | 13 +------------
 5 files changed, 25 insertions(+), 49 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/sql/MetadataWriter.java
 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/sql/MetadataWriter.java
index 549940e5f0..135c5ae6da 100644
--- 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/sql/MetadataWriter.java
+++ 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/sql/MetadataWriter.java
@@ -23,7 +23,6 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.IdentityHashMap;
 import java.util.Collection;
-import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.sql.Statement;
 import java.sql.Connection;
@@ -737,10 +736,9 @@ public class MetadataWriter extends MetadataSource {
      * The returned identifier is guaranteed to not contain {@linkplain 
#isReservedChar(int) reserved characters}.
      */
     private static String abbreviation(final String identifier) {
-        final StringBuilder buffer = new StringBuilder();
-        final StringTokenizer tokens = new StringTokenizer(identifier);
-        while (tokens.hasMoreTokens()) {
-            final int c = tokens.nextToken().codePointAt(0);
+        final var buffer = new StringBuilder();
+        for (final String token : identifier.split("\\s+")) {
+            final int c = token.codePointAt(0);
             if (!isReservedChar(c)) {
                 buffer.appendCodePoint(c);
             }
diff --git 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/sql/privy/SQLBuilder.java
 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/sql/privy/SQLBuilder.java
index 558a287dea..505fbf68ff 100644
--- 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/sql/privy/SQLBuilder.java
+++ 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/sql/privy/SQLBuilder.java
@@ -18,7 +18,6 @@ package org.apache.sis.metadata.sql.privy;
 
 import java.sql.DatabaseMetaData;
 import java.sql.SQLException;
-import java.util.StringTokenizer;
 import org.apache.sis.util.CharSequences;
 
 
@@ -268,13 +267,13 @@ public class SQLBuilder extends Syntax {
      * @return this builder, for method call chaining.
      */
     public final SQLBuilder appendWildcardEscaped(final String value) {
-        final StringTokenizer tokens = new StringTokenizer(value, "_%", true);
-        while (tokens.hasMoreTokens()) {
-            buffer.append(tokens.nextToken());
-            if (!tokens.hasMoreTokens()) {
-                break;
+        final int start = buffer.length();
+        buffer.append(value);
+        for (int i = buffer.length(); --i >= start;) {
+            final char c = buffer.charAt(i);
+            if (c == '_' || c == '%') {
+                buffer.insert(i, escape);
             }
-            buffer.append(escape).append(tokens.nextToken());
         }
         return this;
     }
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGInstaller.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGInstaller.java
index 9812eaa539..3b31dc424e 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGInstaller.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGInstaller.java
@@ -17,7 +17,6 @@
 package org.apache.sis.referencing.factory.sql;
 
 import java.util.Locale;
-import java.util.StringTokenizer;
 import java.io.IOException;
 import java.io.FileNotFoundException;
 import java.io.BufferedReader;
@@ -26,15 +25,16 @@ import java.sql.DatabaseMetaData;
 import java.sql.SQLException;
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
+import org.apache.sis.util.ArraysExt;
 import org.apache.sis.util.StringBuilders;
-import org.apache.sis.metadata.sql.privy.ScriptRunner;
-import org.apache.sis.metadata.sql.privy.SQLUtilities;
 import org.apache.sis.util.privy.Constants;
-import org.apache.sis.system.Fallback;
+import static org.apache.sis.util.privy.Constants.EPSG;
 import org.apache.sis.util.resources.Messages;
 import org.apache.sis.util.logging.PerformanceLevel;
+import org.apache.sis.metadata.sql.privy.ScriptRunner;
+import org.apache.sis.metadata.sql.privy.SQLUtilities;
+import org.apache.sis.system.Fallback;
 import org.apache.sis.setup.InstallationResources;
-import static org.apache.sis.util.privy.Constants.EPSG;
 
 
 /**
@@ -76,17 +76,9 @@ final class EPSGInstaller extends ScriptRunner {
      */
     public EPSGInstaller(final Connection connection) throws SQLException {
         super(connection, 100);
-        boolean isReplaceSupported = false;
         final DatabaseMetaData metadata = connection.getMetaData();
-        final String functions = metadata.getStringFunctions();
-        for (final StringTokenizer tk = new StringTokenizer(functions, ","); 
tk.hasMoreTokens();) {
-            final String token = tk.nextToken().trim();
-            if (token.equalsIgnoreCase("REPLACE")) {
-                isReplaceSupported = true;
-                break;
-            }
-        }
-        if (!isReplaceSupported) {
+        final String[] functions = 
metadata.getStringFunctions().split("\\s*,\\s*");
+        if (!ArraysExt.containsIgnoreCase(functions, "REPLACE")) {
             addStatementToSkip(REPLACE_STATEMENT);
         }
         /*
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
index 9c4e08516d..7a8ad245f9 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
@@ -20,7 +20,6 @@ import java.net.URI;
 import java.util.Map;
 import java.util.Arrays;
 import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 import java.util.concurrent.Callable;
@@ -483,10 +482,9 @@ public final class FranceGeocentricInterpolation extends 
AbstractProvider {
             final float[] tY = grid.offsets[1];
             final float[] tZ = grid.offsets[2];
             do {
-                final StringTokenizer t = new StringTokenizer(line.trim());
-                t.nextToken();                                                 
     // Ignored
-                final double x = Double.parseDouble(t.nextToken());            
     // Longitude in degrees
-                final double y = Double.parseDouble(t.nextToken());            
     // Latitude in degrees
+                final String[] tokens = line.split("\\s+");
+                final double x = Double.parseDouble(tokens[1]);                
     // Longitude in degrees
+                final double y = Double.parseDouble(tokens[2]);                
     // Latitude in degrees
                 final int    i = Math.toIntExact(Math.round((x - x0) / Δx));   
     // Column index
                 final int    j = Math.toIntExact(Math.round((y - y0) / Δy));   
     // Row index
                 if (i < 0 || i >= nx) {
@@ -499,11 +497,11 @@ public final class FranceGeocentricInterpolation extends 
AbstractProvider {
                 if (!Double.isNaN(tX[p]) || !Double.isNaN(tY[p]) || 
!Double.isNaN(tZ[p])) {
                     throw new 
FactoryException(Errors.format(Errors.Keys.ValueAlreadyDefined_1, x + ", " + 
y));
                 }
-                tX[p] = -parseFloat(t.nextToken());     // See javadoc for the 
reason why we reverse the sign.
-                tY[p] = -parseFloat(t.nextToken());
-                tZ[p] = -parseFloat(t.nextToken());
-                final double accuracy = ACCURACY[Math.min(ACCURACY.length - 1,
-                        Math.max(0, Integer.parseInt(t.nextToken()) - 1))];
+                tX[p] = -parseFloat(tokens[3]);     // See javadoc for the 
reason why we reverse the sign.
+                tY[p] = -parseFloat(tokens[4]);
+                tZ[p] = -parseFloat(tokens[5]);
+                int accuracyCode = Math.max(0, Integer.parseInt(tokens[6]) - 
1);
+                double accuracy = ACCURACY[Math.min(ACCURACY.length - 1, 
accuracyCode)];
                 if (!(accuracy >= grid.accuracy)) {     // Use `!` for 
replacing the initial NaN.
                     grid.accuracy = accuracy;
                 }
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Version.java 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Version.java
index 0dfa8fca6c..379ad74f2c 100644
--- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Version.java
+++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Version.java
@@ -21,7 +21,6 @@ import java.net.URL;
 import java.io.File;
 import java.io.Serializable;
 import java.util.Optional;
-import java.util.StringTokenizer;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
 import java.util.jar.Attributes;
@@ -58,12 +57,6 @@ public class Version implements CharSequence, 
Comparable<Version>, Serializable
      */
     private static final long serialVersionUID = 8402041502662929792L;
 
-    /**
-     * The separator characters between {@linkplain #getMajor() major}, 
{@linkplain #getMinor() minor}
-     * and {@linkplain #getRevision() revision} components. Any character in 
this string fits.
-     */
-    private static final String SEPARATORS = ".-";
-
     /**
      * The version of this Apache SIS distribution.
      */
@@ -248,11 +241,7 @@ public class Version implements CharSequence, 
Comparable<Version>, Serializable
     final synchronized Comparable<?> getComponent(final int index) {
         if (parsed == null) {
             if (components == null) {
-                final StringTokenizer tokens = new StringTokenizer(version, 
SEPARATORS);
-                components = new String[tokens.countTokens()];
-                for (int i=0; tokens.hasMoreTokens(); i++) {
-                    components[i] = tokens.nextToken();
-                }
+                components = version.split("[\\.\\-]");
             }
             parsed = new Comparable<?>[components.length];
         }

Reply via email to