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 732e232d70c2b41af16a35d8721860ef2c3c7871
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Mon Sep 30 17:16:29 2024 +0200

    Better reporting of the exception when metadata are shown in the JavaFX 
application.
---
 .../main/org/apache/sis/gui/map/MapCanvas.java     |  2 +-
 .../sis/gui/metadata/IdentificationInfo.java       | 26 +++++++++++++---------
 .../org/apache/sis/gui/metadata/MetadataTree.java  | 12 +++-------
 3 files changed, 20 insertions(+), 20 deletions(-)

diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/map/MapCanvas.java 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/map/MapCanvas.java
index d5f6e20e5c..4174e8036b 100644
--- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/map/MapCanvas.java
+++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/map/MapCanvas.java
@@ -1236,7 +1236,7 @@ public abstract class MapCanvas extends PlanarCanvas {
                     }
                 }
                 if (objectiveCRS == null) {
-                    if (init.isDefined(GridGeometry.CRS)) {
+                    if (init != null && init.isDefined(GridGeometry.CRS)) {
                         objectiveCRS = init.getCoordinateReferenceSystem();
                     } else {
                         objectiveCRS = 
extent.toEnvelope(crsToDisplay.inverse()).getCoordinateReferenceSystem();
diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/IdentificationInfo.java
 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/IdentificationInfo.java
index ddced309c6..e19547f7da 100644
--- 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/IdentificationInfo.java
+++ 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/IdentificationInfo.java
@@ -56,6 +56,7 @@ import org.apache.sis.storage.Resource;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.util.Workaround;
+import org.apache.sis.util.collection.BackingStoreException;
 import org.apache.sis.util.resources.Vocabulary;
 import static org.apache.sis.util.privy.CollectionsExt.nonNull;
 
@@ -200,20 +201,25 @@ final class IdentificationInfo extends 
Section<Identification> {
             BackgroundThreads.execute(aggregateWalker = new 
Task<Set<GeographicBoundingBox>>() {
                 /** Invoked in a background thread for fetching bounding 
boxes. */
                 @Override protected Set<GeographicBoundingBox> call() throws 
DataStoreException {
-                    final Set<GeographicBoundingBox> boxes = new 
LinkedHashSet<>();
-                    for (final Resource child : resource.components()) {
-                        final Metadata metadata = child.getMetadata();
-                        if (isCancelled()) break;
-                        if (metadata != null) {
-                            for (final Identification id : 
nonNull(metadata.getIdentificationInfo())) {
-                                if (id != null) {
-                                    for (final Extent extent : 
id.getExtents()) {
-                                        final GeographicBoundingBox b = 
Extents.getGeographicBoundingBox(extent);
-                                        if (b != null) boxes.add(b);
+                    final var boxes = new 
LinkedHashSet<GeographicBoundingBox>();
+                    try {
+                        for (final Resource child : resource.components()) {
+                            final Metadata metadata = child.getMetadata();
+                            if (isCancelled()) break;
+                            if (metadata != null) {
+                                for (final Identification id : 
nonNull(metadata.getIdentificationInfo())) {
+                                    if (id != null) {
+                                        for (final Extent extent : 
id.getExtents()) {
+                                            final GeographicBoundingBox b = 
Extents.getGeographicBoundingBox(extent);
+                                            if (b != null) boxes.add(b);
+                                        }
                                     }
                                 }
                             }
                         }
+                    } catch (BackingStoreException e) {
+                        // This exception can be thrown by the iterator.
+                        throw e.unwrapOrRethrow(DataStoreException.class);
                     }
                     return boxes;
                 }
diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/MetadataTree.java
 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/MetadataTree.java
index 8da1947388..badcf6e190 100644
--- 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/MetadataTree.java
+++ 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/MetadataTree.java
@@ -18,8 +18,6 @@ package org.apache.sis.gui.metadata;
 
 import java.util.Locale;
 import java.util.List;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.io.IOException;
 import javafx.util.Callback;
 import javafx.beans.DefaultProperty;
@@ -306,14 +304,10 @@ check:      if (data != null) {
          */
         @Override
         public ObservableList<TreeItem<TreeTable.Node>> getChildren() {
-            final ObservableList<TreeItem<TreeTable.Node>> children = 
super.getChildren();
+            final var children = super.getChildren();
             if (children.isEmpty()) {
-                final Collection<TreeTable.Node> data = 
getValue().getChildren();
-                final List<Item> wrappers = new ArrayList<>(data.size());
-                for (final TreeTable.Node child : data) {
-                    wrappers.add(new Item(child));
-                }
-                children.setAll(wrappers);      // Fire a single event instead 
of multiple `add`.
+                // Fire a single event instead of multiple `add`.
+                
children.setAll(getValue().getChildren().stream().map(Item::new).toList());
             }
             return children;
         }

Reply via email to