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 409c3a3234bccc2274d41930b9295b18c5f9a49f Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Sat Dec 16 16:30:45 2023 +0100 Add a `Strings.isNullOrEmpty(String)` convenience method, for internal purposes only. --- .../main/org/apache/sis/feature/FeatureOperations.java | 3 ++- .../main/org/apache/sis/io/wkt/WKTDictionary.java | 2 +- .../org/apache/sis/referencing/IdentifiedObjects.java | 4 ++-- .../org/apache/sis/referencing/ImmutableIdentifier.java | 2 +- .../sis/referencing/factory/CommonAuthorityCode.java | 3 ++- .../sis/referencing/factory/sql/EPSGDataAccess.java | 2 +- .../sis/referencing/factory/sql/SQLTranslator.java | 14 ++++---------- .../apache/sis/storage/netcdf/base/RasterResource.java | 2 +- .../main/org/apache/sis/storage/DataStoreRegistry.java | 3 ++- .../main/org/apache/sis/io/IdentifiedObjectFormat.java | 3 ++- .../main/org/apache/sis/measure/AbstractUnit.java | 3 ++- .../main/org/apache/sis/measure/UnitFormat.java | 16 ++++++++-------- .../main/org/apache/sis/measure/UnitRegistry.java | 3 ++- .../main/org/apache/sis/system/DataDirectory.java | 3 ++- .../main/org/apache/sis/util/internal/Strings.java | 11 +++++++++++ .../apache/sis/util/resources/IndexedResourceBundle.java | 2 +- 16 files changed, 44 insertions(+), 32 deletions(-) diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/FeatureOperations.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/FeatureOperations.java index 1429d7893a..b968487d00 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/FeatureOperations.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/FeatureOperations.java @@ -27,6 +27,7 @@ import org.apache.sis.util.Static; import org.apache.sis.util.UnconvertibleObjectException; import org.apache.sis.util.collection.WeakHashSet; import org.apache.sis.util.resources.Errors; +import org.apache.sis.util.internal.Strings; import org.apache.sis.setup.GeometryLibrary; // Specific to the geoapi-3.1 and geoapi-4.0 branches: @@ -217,7 +218,7 @@ public final class FeatureOperations extends Static { } ArgumentChecks.ensureNonEmpty("singleAttributes", singleAttributes); if (singleAttributes.length == 1) { - if ((prefix == null || prefix.isEmpty()) && (suffix == null || suffix.isEmpty())) { + if (Strings.isNullOrEmpty(prefix) && Strings.isNullOrEmpty(suffix)) { final PropertyType at = singleAttributes[0]; if (!(at instanceof FeatureAssociationRole)) { return link(identification, at); diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/WKTDictionary.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/WKTDictionary.java index 075ac64fe9..1213f4451b 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/WKTDictionary.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/WKTDictionary.java @@ -1044,7 +1044,7 @@ public class WKTDictionary extends GeodeticAuthorityFactory { Object value = null; lock.readLock().lock(); try { - boolean valid = (codespace == null || codespace.isEmpty() || codespaces.contains(codespace)); + boolean valid = Strings.isNullOrEmpty(codespace) || codespaces.contains(codespace); if (!valid) { for (final String cs : codespaces) { // More costly check if no exact match. valid = cs.equalsIgnoreCase(codespace); diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/IdentifiedObjects.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/IdentifiedObjects.java index 11ad27e72f..22429fc32c 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/IdentifiedObjects.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/IdentifiedObjects.java @@ -754,7 +754,7 @@ public final class IdentifiedObjects extends Static { return null; } String cs = identifier.getCodeSpace(); - if (cs == null || cs.isEmpty()) { + if (Strings.isNullOrEmpty(cs)) { cs = Identifiers.getIdentifier(identifier.getAuthority(), true); } return NameMeaning.toURN(type, cs, identifier.getVersion(), identifier.getCode()); @@ -795,7 +795,7 @@ public final class IdentifiedObjects extends Static { } final String code = identifier.getCode(); String cs = identifier.getCodeSpace(); - if (cs == null || cs.isEmpty()) { + if (Strings.isNullOrEmpty(cs)) { cs = Citations.toCodeSpace(identifier.getAuthority()); } if (cs != null) { diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/ImmutableIdentifier.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/ImmutableIdentifier.java index 22aedc1ec3..f86af0cf59 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/ImmutableIdentifier.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/ImmutableIdentifier.java @@ -300,7 +300,7 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier * Ensures that the properties of this {@code ImmutableIdentifier} are valid. */ private void validate(final Map<String,?> properties) { - if (code == null || code.isEmpty()) { + if (Strings.isNullOrEmpty(code)) { boolean missing = (code == null) || (properties != null && properties.get(CODE_KEY) == null); throw new IllegalArgumentException(Errors.getResources(properties) .getString(missing ? Errors.Keys.MissingValueForProperty_1 diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/CommonAuthorityCode.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/CommonAuthorityCode.java index ab378efa5c..316f60b3f6 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/CommonAuthorityCode.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/CommonAuthorityCode.java @@ -19,6 +19,7 @@ package org.apache.sis.referencing.factory; import org.opengis.referencing.NoSuchAuthorityCodeException; import org.apache.sis.util.CharSequences; import org.apache.sis.util.resources.Errors; +import org.apache.sis.util.internal.Strings; import org.apache.sis.util.internal.Constants; import org.apache.sis.referencing.internal.Resources; @@ -136,7 +137,7 @@ final class CommonAuthorityCode { * Returns whether there is no parameters. */ final boolean isParameterless() { - return (complement == null) || complement.isEmpty(); + return Strings.isNullOrEmpty(complement); } /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java index eb9e25c16e..60adc98643 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java @@ -1729,7 +1729,7 @@ codes: for (int i=0; i<codes.length; i++) { */ case "temporal": { final Date originDate; - if (anchor == null || anchor.isEmpty()) { + if (Strings.isNullOrEmpty(anchor)) { throw new FactoryDataException(resources().getString(Resources.Keys.DatumOriginShallBeDate)); } if (dateFormat == null) { diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/SQLTranslator.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/SQLTranslator.java index 80a184cc8c..2770539071 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/SQLTranslator.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/SQLTranslator.java @@ -28,6 +28,7 @@ import org.apache.sis.util.CharSequences; import org.apache.sis.util.ArgumentChecks; import org.apache.sis.util.resources.Errors; import org.apache.sis.util.internal.Constants; +import static org.apache.sis.util.internal.Strings.isNullOrEmpty; import org.apache.sis.metadata.sql.util.Reflection; import org.apache.sis.metadata.sql.util.SQLUtilities; @@ -398,13 +399,6 @@ public class SQLTranslator implements Function<String,String> { return useBoolean; } - /** - * If {@code true} if the given string is null or empty. - */ - private static boolean isEmpty(final String s) { - return (s == null) || s.isEmpty(); - } - /** * Adapts the given SQL statement from the original MS-Access dialect to the dialect of the target database. * Table and column names may also be replaced. @@ -414,7 +408,7 @@ public class SQLTranslator implements Function<String,String> { */ @Override public String apply(final String sql) { - if (quote.isEmpty() && accessToAnsi.isEmpty() && isEmpty(schema) && isEmpty(catalog)) { + if (quote.isEmpty() && accessToAnsi.isEmpty() && isNullOrEmpty(schema) && isNullOrEmpty(catalog)) { return sql; } final StringBuilder ansi = new StringBuilder(sql.length() + 16); @@ -485,10 +479,10 @@ public class SQLTranslator implements Function<String,String> { * This is used mostly for appending table names, but can also be used for appending enumeration types. */ private void appendIdentifier(final StringBuilder buffer, final String identifier) { - if (!isEmpty(catalog)) { + if (!isNullOrEmpty(catalog)) { buffer.append(quote).append(catalog).append(quote).append('.'); } - if (!isEmpty(schema)) { + if (!isNullOrEmpty(schema)) { buffer.append(quote).append(schema).append(quote).append('.'); } if (quoteTableNames) { diff --git a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/RasterResource.java b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/RasterResource.java index aaefc657f3..1bbec91459 100644 --- a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/RasterResource.java +++ b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/RasterResource.java @@ -375,7 +375,7 @@ public final class RasterResource extends AbstractGridCoverageResource implement for (final Variable v : data) { name = (String) CharSequences.commonWords(name, v.getName()); } - if (name == null || name.isEmpty()) { + if (Strings.isNullOrEmpty(name)) { name = data[0].getName(); // If unable to get a common name, fallback on the first one. } final GenericName newValue = decoder.nameFactory.createLocalName(decoder.namespace, name); diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreRegistry.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreRegistry.java index 608e03b9f9..dc9bdeaac7 100644 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreRegistry.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreRegistry.java @@ -33,6 +33,7 @@ import org.apache.sis.storage.base.StoreMetadata; import org.apache.sis.referencing.util.LazySet; import org.apache.sis.util.ArgumentChecks; import org.apache.sis.util.ArraysExt; +import org.apache.sis.util.internal.Strings; /** @@ -228,7 +229,7 @@ final class DataStoreRegistry extends LazySet<DataStoreProvider> { * The intent is to avoid DataStoreProvider.probeContent(…) invocations loading large dependencies. */ final String extension = connector.getFileExtension(); - final boolean useSuffix = !(extension == null || extension.isEmpty()); + final boolean useSuffix = !Strings.isNullOrEmpty(extension); final boolean isWriteOnly = (capability == Capability.WRITE) && IOUtilities.isWriteOnly(connector.getStorage()); ProbeProviderPair selected = null; final var needMoreBytes = new LinkedList<ProbeProviderPair>(); diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/io/IdentifiedObjectFormat.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/io/IdentifiedObjectFormat.java index eca65af45e..08fb4de538 100644 --- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/io/IdentifiedObjectFormat.java +++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/io/IdentifiedObjectFormat.java @@ -23,6 +23,7 @@ import java.text.ParsePosition; import org.opengis.util.GenericName; import org.opengis.referencing.IdentifiedObject; import org.apache.sis.util.resources.Vocabulary; +import org.apache.sis.util.internal.Strings; import org.apache.sis.util.internal.Constants; import org.apache.sis.util.internal.MetadataServices; @@ -69,7 +70,7 @@ final class IdentifiedObjectFormat extends Format { } final String code = identifier.getCode(); String cs = identifier.getCodeSpace(); - if (cs == null || cs.isEmpty()) { + if (Strings.isNullOrEmpty(cs)) { cs = MetadataServices.getInstance().getUnicodeIdentifier(identifier.getAuthority()); } if (cs != null) { diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/AbstractUnit.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/AbstractUnit.java index 72e99a7e59..53125e02b4 100644 --- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/AbstractUnit.java +++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/AbstractUnit.java @@ -33,6 +33,7 @@ import org.apache.sis.util.ComparisonMode; import org.apache.sis.util.LenientComparable; import org.apache.sis.util.resources.Errors; import org.apache.sis.util.logging.Logging; +import org.apache.sis.util.internal.Strings; import org.apache.sis.system.Loggers; import org.apache.sis.system.Configuration; @@ -205,7 +206,7 @@ abstract class AbstractUnit<Q extends Quantity<Q>> implements Unit<Q>, LenientCo * @return Unicode code point of the invalid character, or a negative value. */ static int invalidCharForSymbol(final String symbol, int maxMultiply, final boolean allowExponents) { - if (symbol == null || symbol.isEmpty()) { + if (Strings.isNullOrEmpty(symbol)) { return -2; } for (int i=0; i < symbol.length();) { diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/UnitFormat.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/UnitFormat.java index e30444db26..640f7dac9e 100644 --- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/UnitFormat.java +++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/UnitFormat.java @@ -45,6 +45,7 @@ import org.apache.sis.util.internal.DefinitionURI; import org.apache.sis.math.Fraction; import org.apache.sis.math.MathFunctions; import org.apache.sis.util.resources.Errors; +import org.apache.sis.util.internal.Strings; import org.apache.sis.util.collection.WeakValueHashMap; import org.apache.sis.util.logging.Logging; @@ -1381,14 +1382,13 @@ search: while ((i = CharSequences.skipTrailingWhitespaces(symbols, start, i) case MULTIPLY: return unit.multiply(term); case DIVIDE: return unit.divide(term); case EXPONENT: { - if (UnitDimension.isDimensionless(term.getDimension())) { - final String symbol = term.getSymbol(); - if (symbol == null || symbol.isEmpty()) { - final double scale = Units.toStandardUnit(term); - final int power = (int) scale; - if (power == scale) { - return unit.pow(power); - } + if (UnitDimension.isDimensionless(term.getDimension()) + && Strings.isNullOrEmpty(term.getSymbol())) + { + final double scale = Units.toStandardUnit(term); + final int power = (int) scale; + if (power == scale) { + return unit.pow(power); } } throw new MeasurementParseException(Errors.format(Errors.Keys.NotAnInteger_1, term), symbols, position); diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/UnitRegistry.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/UnitRegistry.java index c09245b95a..371957e2ad 100644 --- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/UnitRegistry.java +++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/measure/UnitRegistry.java @@ -30,6 +30,7 @@ import javax.measure.format.MeasurementParseException; import org.apache.sis.math.Fraction; import org.apache.sis.util.ArgumentChecks; import org.apache.sis.util.collection.WeakValueHashMap; +import org.apache.sis.util.internal.Strings; import org.apache.sis.util.logging.Logging; @@ -198,7 +199,7 @@ final class UnitRegistry implements SystemOfUnits, Serializable { if ("cd".equals(s) || "Hz".equals(s) || "Bq".equals(s)) existed &= ~(1 ); // Accepts dimension collisions only; if (unit.dimension.isDimensionless()) existed &= ~(1 | 2); // Accepts dimension and quantity collisions. - return (s == null) || s.isEmpty() ? 0 : existed; + return Strings.isNullOrEmpty(s) ? 0 : existed; } /** diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/system/DataDirectory.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/system/DataDirectory.java index aab441377d..22d964a5df 100644 --- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/system/DataDirectory.java +++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/system/DataDirectory.java @@ -23,6 +23,7 @@ import java.nio.file.InvalidPathException; import java.util.logging.Level; import java.util.logging.LogRecord; import org.apache.sis.util.logging.Logging; +import org.apache.sis.util.internal.Strings; import org.apache.sis.util.resources.Messages; @@ -161,7 +162,7 @@ public enum DataDirectory { public static synchronized Path getRootDirectory() { if (rootDirectory == null) try { final String dir = getenv(); - if (dir == null || dir.isEmpty()) { + if (Strings.isNullOrEmpty(dir)) { warning(null, Messages.Keys.DataDirectoryNotSpecified_1, ENV); } else try { final Path path = Path.of(dir); diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/Strings.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/Strings.java index ca5c5b3eda..90b7f53eba 100644 --- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/Strings.java +++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/Strings.java @@ -62,10 +62,21 @@ public final class Strings extends Static { * @see java.util.Objects#equals(Object, Object) * @see String#equalsIgnoreCase(String) */ + @SuppressWarnings("StringEquality") public static boolean equalsIgnoreCase(final String a, final String b) { return (a == b) || (a != null && a.equalsIgnoreCase(b)); } + /** + * Returns {@code true} if the given text is either null or empty. + * + * @param text the text to test. + * @return whether the given test is null or empty. + */ + public static boolean isNullOrEmpty(final String text) { + return (text == null) || text.isEmpty(); + } + /** * Returns the given text if non-null, or the empty string otherwise. * diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/resources/IndexedResourceBundle.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/resources/IndexedResourceBundle.java index 2814f85a03..1d83f4f092 100644 --- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/resources/IndexedResourceBundle.java +++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/resources/IndexedResourceBundle.java @@ -325,7 +325,7 @@ public abstract class IndexedResourceBundle extends ResourceBundle implements Lo if (locale != null) { language = locale.getDisplayName(Locale.US); } - if (language == null || language.isEmpty()) { + if (Strings.isNullOrEmpty(language)) { language = "<root>"; } record.setParameters(new String[] {language, baseName});