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


The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
     new 48e238f9ba Make a GeoTIFF writer test tolerance to the case where the 
EPSG database is absent. Better error messages.
48e238f9ba is described below

commit 48e238f9baa71004eb596f3e490d980f3e88ba6a
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Fri Nov 24 10:44:51 2023 +0100

    Make a GeoTIFF writer test tolerance to the case where the EPSG database is 
absent.
    Better error messages.
---
 .../org/apache/sis/filter/internal/FunctionNames.java  |  2 +-
 .../org/apache/sis/storage/landsat/LandsatStore.java   |  2 +-
 .../org/apache/sis/storage/landsat/MetadataReader.java |  2 +-
 .../sis/storage/geotiff/MultiResolutionImage.java      |  4 ++--
 .../main/org/apache/sis/storage/geotiff/Writer.java    |  2 +-
 .../org/apache/sis/storage/geotiff/WriterTest.java     |  9 +++++++--
 .../main/org/apache/sis/system/Modules.java            |  5 -----
 .../main/org/apache/sis/util/Classes.java              | 18 +++++++++++++++---
 .../main/org/apache/sis/util/logging/Logging.java      | 17 +++--------------
 9 files changed, 31 insertions(+), 30 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/internal/FunctionNames.java
 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/internal/FunctionNames.java
index 4cacfb13fe..fe8d30f6fe 100644
--- 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/internal/FunctionNames.java
+++ 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/internal/FunctionNames.java
@@ -22,7 +22,7 @@ import org.apache.sis.filter.sqlmm.SQLMM;
 
 /**
  * Names of some expressions used in Apache SIS.
- * This class defines only the names that need to be references from at least 
two different classes.
+ * This class defines only the names that need to be referenced from at least 
two different classes.
  *
  * @author  Martin Desruisseaux (Geomatys)
  */
diff --git 
a/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/LandsatStore.java
 
b/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/LandsatStore.java
index fa0ccaa9b6..74ab128a7d 100644
--- 
a/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/LandsatStore.java
+++ 
b/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/LandsatStore.java
@@ -235,7 +235,7 @@ public class LandsatStore extends DataStore implements 
Aggregate {
         } catch (IOException e) {
             throw new DataStoreException(e);
         } catch (FactoryException e) {
-            throw new DataStoreReferencingException(e);
+            throw new DataStoreReferencingException(e.getMessage(), e);
         }
         final BandGroup[] bands = BandGroup.group(listeners, resources, count);
         for (final BandGroup c : bands) {
diff --git 
a/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/MetadataReader.java
 
b/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/MetadataReader.java
index 11d10ebb93..14a8b18580 100644
--- 
a/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/MetadataReader.java
+++ 
b/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/MetadataReader.java
@@ -680,7 +680,7 @@ final class MetadataReader extends MetadataBuilder {
                     utmZone = -1;
                 } catch (NoSuchIdentifierException e) {
                     // Should never happen with Apache SIS implementation of 
MathTransformFactory.
-                    throw new DataStoreReferencingException(e);
+                    throw new DataStoreReferencingException(e.getMessage(), e);
                 }
                 break;
             }
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/MultiResolutionImage.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/MultiResolutionImage.java
index b2b73a874e..1ffe184673 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/MultiResolutionImage.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/MultiResolutionImage.java
@@ -182,7 +182,7 @@ final class MultiResolutionImage extends 
GridResourceWrapper implements Resource
             }
             resolutions[level] = resolution;
         } catch (TransformException e) {
-            throw new DataStoreReferencingException(e);
+            throw new DataStoreReferencingException(e.getMessage(), e);
         } catch (IOException e) {
             throw levels[level].reader.store.errorIO(e);
         }
@@ -238,7 +238,7 @@ final class MultiResolutionImage extends 
GridResourceWrapper implements Resource
                 }
             }
         } catch (FactoryException | TransformException e) {
-            throw new DataStoreReferencingException(e);
+            throw new DataStoreReferencingException(e.getMessage(), e);
         }
         return resolution;
     }
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Writer.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Writer.java
index 89ec4751de..06ecde52ab 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Writer.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Writer.java
@@ -377,7 +377,7 @@ final class Writer extends IOBase implements Flushable {
             geoKeys = new GeoEncoder(store.listeners());
             geoKeys.write(grid, mf);
         } catch (FactoryException | IncommensurableException | 
RuntimeException e) {
-            throw new DataStoreReferencingException(e);
+            throw new DataStoreReferencingException(e.getMessage(), e);
         }
         /*
          * Conversion factor from physical size to pixel size. "Physical size" 
here should be understood as
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/WriterTest.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/WriterTest.java
index a2f3952b41..23e619a451 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/WriterTest.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/WriterTest.java
@@ -259,8 +259,13 @@ public final class WriterTest extends TestCase {
         createGridGeometry();
         writeImage();
         verifyHeader(false, IOBase.LITTLE_ENDIAN);
-        verifyImageFileDirectory(Writer.COMMON_NUMBER_OF_TAGS + 3 - 1,         
     // 3 more for RGB, 1 less for strips.
-                PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO, new short[] 
{Byte.SIZE}, false);
+        /*
+         * The number of tags depends on whether an EPSG database is present 
or not.
+         * So the test cannot expects an exact number of tags.
+         */
+        int tagCount = data.getShort(data.position());
+        assertTrue(tagCount >= Writer.COMMON_NUMBER_OF_TAGS + 3 - 1);          
 // 3 more for RGB, 1 less for strips.
+        verifyImageFileDirectory(tagCount, 
PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO, new short[] {Byte.SIZE}, false);
         verifySampleValues(1);
         store.close();
     }
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/system/Modules.java 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/system/Modules.java
index dabfa1a3dd..3b170fdeef 100644
--- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/system/Modules.java
+++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/system/Modules.java
@@ -123,11 +123,6 @@ public final class Modules {
      */
     public static final String CLASSNAME_PREFIX = "org.apache.sis.";
 
-    /**
-     * The prefix of all internal classnames in Apache SIS, including a 
trailing dot.
-     */
-    public static final String INTERNAL_CLASSNAME_PREFIX = CLASSNAME_PREFIX + 
"internal.";
-
     /**
      * Do not allow instantiation of this class.
      */
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Classes.java 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Classes.java
index b055f6c479..ac05516c74 100644
--- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Classes.java
+++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Classes.java
@@ -34,7 +34,6 @@ import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Modifier;
 import org.opengis.annotation.UML;
 import static org.apache.sis.util.collection.Containers.hashMapCapacity;
-import static org.apache.sis.system.Modules.INTERNAL_CLASSNAME_PREFIX;
 
 
 /**
@@ -55,7 +54,7 @@ import static 
org.apache.sis.system.Modules.INTERNAL_CLASSNAME_PREFIX;
  * </ul>
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
- * @version 1.3
+ * @version 1.5
  * @since   0.3
  */
 public final class Classes extends Static {
@@ -385,7 +384,7 @@ public final class Classes extends Static {
             }
         }
         for (Class<? super T> candidate = type; candidate != null; candidate = 
candidate.getSuperclass()) {
-            if (Modifier.isPublic(candidate.getModifiers()) && 
!candidate.getName().startsWith(INTERNAL_CLASSNAME_PREFIX)) {
+            if (isPublic(candidate)) {
                 return candidate;
             }
         }
@@ -857,4 +856,17 @@ cmp:    for (final Class<?> c : c1) {
               !method.isSynthetic() &&
               !ArraysExt.contains(EXCLUDES, method.getName());
     }
+
+    /**
+     * Returns {@code true} if the given class is non-null, public and 
exported.
+     *
+     * @param  type  the class to test, or {@code null}.
+     * @return whether the given class is part of public API.
+     *
+     * @since 1.5
+     */
+    public static boolean isPublic(final Class<?> type) {
+        return (type != null) && Modifier.isPublic(type.getModifiers())
+                && type.getModule().isExported(type.getPackageName());
+    }
 }
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/logging/Logging.java
 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/logging/Logging.java
index 016778e170..2dd0681c80 100644
--- 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/logging/Logging.java
+++ 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/logging/Logging.java
@@ -21,7 +21,6 @@ import java.util.stream.Stream;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.logging.LogRecord;
-import java.lang.reflect.Modifier;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.Static;
 import org.apache.sis.util.Exceptions;
@@ -77,12 +76,7 @@ public final class Logging extends Static {
      */
     public static Logger getLogger(final Class<?> source) {
         ArgumentChecks.ensureNonNull("source", source);
-        String name = source.getPackageName();
-        if (name.startsWith(Modules.INTERNAL_CLASSNAME_PREFIX)) {
-            // Remove the "internal" part from Apache SIS package names.
-            name = Modules.CLASSNAME_PREFIX + 
name.substring(Modules.INTERNAL_CLASSNAME_PREFIX.length());
-        }
-        return Logger.getLogger(name);
+        return Logger.getLogger(source.getPackageName());
     }
 
     /**
@@ -133,7 +127,7 @@ public final class Logging extends Static {
             final Logger fl = logger;       // Because lambda functions 
require final values.
             logger = 
StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk((stream)
 ->
                     inferCaller(fl, (classe != null) ? 
classe.getCanonicalName() : null, method,
-                            stream.filter((frame) -> 
Modifier.isPublic(frame.getDeclaringClass().getModifiers()))
+                            stream.filter((frame) -> 
Classes.isPublic(frame.getDeclaringClass()))
                                   
.map((StackWalker.StackFrame::toStackTraceElement)), record));
         }
         logger.log(record);
@@ -187,17 +181,12 @@ public final class Logging extends Static {
      * This method is invoked in order to infer the class and method names to 
declare in a {@link LogRecord}.
      * We do not document this feature in public Javadoc because it is based 
on heuristic rules that may change.
      *
-     * <p>The current implementation compares the class name against a 
hard-coded list of classes to hide.
-     * This implementation may change in any future SIS version.</p>
-     *
      * @param  e  a stack trace element.
      * @return {@code true} if the class and method specified by the given 
element can be considered public API.
      */
     private static boolean isPublic(final StackTraceElement e) {
         final String classname = e.getClassName();
-        if (classname.startsWith("java") || 
classname.startsWith(Modules.INTERNAL_CLASSNAME_PREFIX) ||
-            classname.indexOf('$') >= 0 || e.getMethodName().indexOf('$') >= 0)
-        {
+        if (classname.startsWith("java") || classname.indexOf('$') >= 0 || 
e.getMethodName().indexOf('$') >= 0) {
             return false;
         }
         if (classname.startsWith(Modules.CLASSNAME_PREFIX + "util.logging.")) {

Reply via email to