You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2021/11/09 17:58:43 UTC

[sis] 03/05: Fix a problem of TIFF files not shown when the "tiff" extension is upper-case.

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 30629e9156ce3c1a7b90d28e94249e908d810375
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Tue Nov 9 17:16:51 2021 +0100

    Fix a problem of TIFF files not shown when the "tiff" extension is upper-case.
---
 .../main/java/org/apache/sis/gui/DataViewer.java   | 43 +++++++++++++---------
 1 file changed, 26 insertions(+), 17 deletions(-)

diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/DataViewer.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/DataViewer.java
index 539081d..29b6da0 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/DataViewer.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/DataViewer.java
@@ -212,6 +212,7 @@ public class DataViewer extends Application {
      */
     private void createFileFilters() {
         final Resources res = Resources.getInstance();
+        final Set<String>    suffixes = new LinkedHashSet<>();
         final Set<String> allSuffixes = new LinkedHashSet<>();
         final List<FileChooser.ExtensionFilter> open = new ArrayList<>();
         final List<FileChooser.ExtensionFilter> save = new ArrayList<>();
@@ -223,21 +224,29 @@ public class DataViewer extends Application {
         for (DataStoreProvider provider : DataStores.providers()) {
             final StoreMetadata md = provider.getClass().getAnnotation(StoreMetadata.class);
             if (md != null) {
-                final String[] suffixes = md.fileSuffixes();
-                if (suffixes.length != 0) {
-                    final boolean canOpen = ArraysExt.contains(md.capabilities(), Capability.READ);
-                    final boolean canSave = ArraysExt.contains(md.capabilities(), Capability.WRITE);
-                    for (int i=0; i < suffixes.length; i++) {
-                        final String fs = "*.".concat(suffixes[i]);
-                        suffixes[i] = fs;
-                        if (canOpen) {
-                            allSuffixes.add(fs);
-                        }
-                    }
+                String label = null;
+                for (final String suffix : md.fileSuffixes()) {
+                    final String fs = "*.".concat(suffix);
+                    suffixes.add(fs);
+                    suffixes.add(fs.toUpperCase());       // Locale-dependent conversion is okay.
+                    if (label == null) label = fs;
+                }
+                if (label != null) {
                     final FileChooser.ExtensionFilter f = new FileChooser.ExtensionFilter(
-                                    md.formatName() + " (" + suffixes[0] + ')', suffixes);
-                    if (canOpen) open.add(f);
-                    if (canSave) save.add(f);
+                            md.formatName() + " (" + label + ')', suffixes.toArray(String[]::new));
+                    /*
+                     * We use two lists depending on whether the `DataStore` can read, write or
+                     * do both. The "All formats" choice is relevant only for read operations.
+                     */
+                    final Capability[] capabilities = md.capabilities();
+                    if (ArraysExt.contains(capabilities, Capability.READ)) {
+                        allSuffixes.addAll(suffixes);
+                        open.add(f);
+                    }
+                    if (ArraysExt.contains(capabilities, Capability.WRITE)) {
+                        save.add(f);
+                    }
+                    suffixes.clear();
                 }
             }
         }
@@ -246,9 +255,9 @@ public class DataViewer extends Application {
          * the filters for specific formats. This will be the default filter for the "Open" action.
          */
         open.add(1, new FileChooser.ExtensionFilter(res.getString(Resources.Keys.GeospatialFiles),
-                            allSuffixes.toArray(new String[allSuffixes.size()])));
-        this.openFilters = open.toArray(new FileChooser.ExtensionFilter[open.size()]);
-        this.saveFilters = save.toArray(new FileChooser.ExtensionFilter[save.size()]);
+                                                    allSuffixes.toArray(String[]::new)));
+        openFilters = open.toArray(FileChooser.ExtensionFilter[]::new);
+        saveFilters = save.toArray(FileChooser.ExtensionFilter[]::new);
     }
 
     /**