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]; }