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

Reply via email to