This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 9e915e8716d53ccf1ebf35b2e8cd2871653fe51b
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sun May 24 09:28:46 2026 -0400

     CAY-2948 Modeler: use native FileDialog on Mac
    
    refactoring FileChooser
---
 .../org/apache/cayenne/modeler/Application.java    | 10 ++--
 .../cayenne/modeler/platform/UIInitializer.java    | 10 ++--
 ...FileChooserFactory.java => MacFileChooser.java} | 69 ++++++++++------------
 .../modeler/platform/mac/MacUIInitializer.java     | 17 +++++-
 ...{FileChooserFactory.java => CMFileChooser.java} | 21 +++----
 ...ooserFactory.java => CMFileChooserFactory.java} | 22 ++-----
 ...leChooserFactory.java => SwingFileChooser.java} | 46 ++++++++-------
 .../modeler/ui/action/ImportDataMapAction.java     |  2 +-
 .../modeler/ui/action/ImportEOModelAction.java     |  2 +-
 .../cayenne/modeler/ui/action/ProjectOpener.java   | 11 +---
 .../modeler/ui/dbgen/DBGeneratorOptionsDialog.java |  2 +-
 .../modeler/ui/dbmerge/MergerOptionsDialog.java    |  2 +-
 .../preferences/classpath/ClasspathPrefsPanel.java |  5 +-
 .../editor/datamap/cgen/CgenConfigPanel.java       |  2 +-
 14 files changed, 106 insertions(+), 115 deletions(-)

diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
index d7542a0d6..0498d786b 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
@@ -31,7 +31,8 @@ import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.modeler.pref.dbconnector.DBConnectors;
 import org.apache.cayenne.modeler.log.ModelerLogFactory;
 import org.apache.cayenne.modeler.platform.UIInitializer;
-import org.apache.cayenne.modeler.toolkit.filechooser.FileChooserFactory;
+import org.apache.cayenne.modeler.toolkit.filechooser.CMFileChooser;
+import org.apache.cayenne.modeler.toolkit.filechooser.CMFileChooserFactory;
 import org.apache.cayenne.modeler.pref.adapters.ClasspathPrefs;
 import org.apache.cayenne.modeler.pref.adapters.DBConnectorsPrefs;
 import org.apache.cayenne.modeler.pref.adapters.GeneralPrefs;
@@ -55,6 +56,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.swing.*;
+import java.awt.Component;
 import java.io.File;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -89,7 +91,7 @@ public class Application {
 
     private final Injector injector;
     private final UIInitializer platformInit;
-    private final FileChooserFactory fileChooserFactory;
+    private final CMFileChooserFactory fileChooserFactory;
     private final ModelerClassLoader classLoader;
     private final PrefsLocator prefsLocator;
     private final PrefsManager prefsManager;
@@ -142,8 +144,8 @@ public class Application {
         return injector.getInstance(UpgradeService.class);
     }
 
-    public FileChooserFactory getFileChooserFactory() {
-        return fileChooserFactory;
+    public CMFileChooser getFileChooser(Component parent, String title) {
+        return fileChooserFactory.create(parent, title);
     }
 
     public ConfigurationNodeParentGetter getConfigurationNodeParentGetter() {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/UIInitializer.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/UIInitializer.java
index cc299d637..dcfabd949 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/UIInitializer.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/UIInitializer.java
@@ -19,8 +19,8 @@
 package org.apache.cayenne.modeler.platform;
 
 import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.toolkit.filechooser.FileChooserFactory;
-import org.apache.cayenne.modeler.toolkit.filechooser.JFileChooserFactory;
+import org.apache.cayenne.modeler.toolkit.filechooser.CMFileChooserFactory;
+import org.apache.cayenne.modeler.toolkit.filechooser.SwingFileChooser;
 
 /**
  * A base callback for platform-specific Modeler initialization.
@@ -42,10 +42,10 @@ public interface UIInitializer {
     }
 
     /**
-     * Returns the platform-appropriate {@link FileChooserFactory}. Defaults 
to Swing's
+     * Returns the platform-appropriate {@link CMFileChooserFactory}. Defaults 
to Swing's
      * {@code JFileChooser}; overridden on macOS to use the native {@code 
FileDialog}.
      */
-    default FileChooserFactory fileChooserFactory() {
-        return new JFileChooserFactory();
+    default CMFileChooserFactory fileChooserFactory() {
+        return SwingFileChooser::new;
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacFileChooserFactory.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacFileChooser.java
similarity index 56%
rename from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacFileChooserFactory.java
rename to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacFileChooser.java
index 956efcc24..4913f1a1f 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacFileChooserFactory.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacFileChooser.java
@@ -20,62 +20,65 @@
 package org.apache.cayenne.modeler.platform.mac;
 
 import org.apache.cayenne.modeler.pref.adapters.FileChooserPrefs;
-import org.apache.cayenne.modeler.toolkit.filechooser.FileChooserFactory;
+import org.apache.cayenne.modeler.toolkit.filechooser.CMFileChooser;
 
-import javax.swing.SwingUtilities;
 import javax.swing.filechooser.FileFilter;
-import java.awt.Component;
 import java.awt.FileDialog;
 import java.awt.Frame;
-import java.awt.Window;
 import java.io.File;
 import java.io.FilenameFilter;
 import java.util.function.Consumer;
 
 /**
- * {@link FileChooserFactory} implementation backed by the native OS {@link 
FileDialog}.
+ * {@link CMFileChooser} implementation backed by the native OS {@link 
FileDialog}.
  * On macOS this delegates to NSOpenPanel / NSSavePanel, providing Quick Look 
preview,
  * Spotlight search, and the standard Finder sidebar.
  */
-public class MacFileChooserFactory implements FileChooserFactory {
+public class MacFileChooser implements CMFileChooser {
 
     private static final String DIRS_DIALOG_PROPERTY = 
"apple.awt.fileDialogForDirectories";
 
+    private final Frame parent;
+    private final String title;
+
+    public MacFileChooser(Frame parent, String title) {
+        this.parent = parent;
+        this.title = title;
+    }
+
     @Override
-    public File openFile(Component parent, String title, File initialDir, 
FileFilter filter) {
-        return showOpen(toFrame(parent), title, toFilenameFilter(filter),
+    public File openFile(File initialDir, FileFilter filter) {
+        return showOpen(toFilenameFilter(filter),
                 fd -> { if (initialDir != null) 
fd.setDirectory(initialDir.getAbsolutePath()); });
     }
 
     @Override
-    public File openFile(Component parent, String title, FileChooserPrefs 
prefs, FileFilter filter) {
-        return showOpen(toFrame(parent), title, toFilenameFilter(filter), 
prefs::bind);
+    public File openFile(FileChooserPrefs prefs, FileFilter filter) {
+        return showOpen(toFilenameFilter(filter), prefs::bind);
     }
 
     @Override
-    public File saveFile(Component parent, String title, FileChooserPrefs 
prefs, String defaultName) {
-        return showSave(toFrame(parent), title, prefs::bind, defaultName);
+    public File openDir(File initialDir) {
+        return showOpenDir(fd -> { if (initialDir != null) 
fd.setDirectory(initialDir.getAbsolutePath()); });
     }
 
     @Override
-    public File openDir(Component parent, String title, File initialDir) {
-        return showOpenDir(toFrame(parent), title,
-                fd -> { if (initialDir != null) 
fd.setDirectory(initialDir.getAbsolutePath()); });
+    public File openDir(FileChooserPrefs prefs) {
+        return showOpenDir(prefs::bind);
     }
 
     @Override
-    public File openDir(Component parent, String title, FileChooserPrefs 
prefs) {
-        return showOpenDir(toFrame(parent), title, prefs::bind);
+    public File saveFile(FileChooserPrefs prefs, String defaultName) {
+        return showSave(prefs::bind, defaultName);
     }
 
     @Override
-    public File saveDir(Component parent, String title, File initialDir) {
-        return showOpenDir(toFrame(parent), title,
-                fd -> { if (initialDir != null) 
fd.setDirectory(initialDir.getAbsolutePath()); });
+    public File saveDir(File initialDir) {
+        return showOpenDir(fd -> { if (initialDir != null) 
fd.setDirectory(initialDir.getAbsolutePath()); });
     }
 
-    private File showOpen(Frame frame, String title, FilenameFilter fnFilter, 
Consumer<FileDialog> init) {
-        FileDialog fd = new FileDialog(frame, title != null ? title : "", 
FileDialog.LOAD);
+    private File showOpen(FilenameFilter fnFilter, Consumer<FileDialog> init) {
+        FileDialog fd = new FileDialog(parent, title != null ? title : "", 
FileDialog.LOAD);
         init.accept(fd);
         if (fnFilter != null) {
             fd.setFilenameFilter(fnFilter);
@@ -85,8 +88,8 @@ public class MacFileChooserFactory implements 
FileChooserFactory {
         return file != null ? new File(fd.getDirectory(), file) : null;
     }
 
-    private File showSave(Frame frame, String title, Consumer<FileDialog> 
init, String defaultName) {
-        FileDialog fd = new FileDialog(frame, title != null ? title : "", 
FileDialog.SAVE);
+    private File showSave(Consumer<FileDialog> init, String defaultName) {
+        FileDialog fd = new FileDialog(parent, title != null ? title : "", 
FileDialog.SAVE);
         init.accept(fd);
         if (defaultName != null) {
             fd.setFile(defaultName);
@@ -96,12 +99,15 @@ public class MacFileChooserFactory implements 
FileChooserFactory {
         return file != null ? new File(fd.getDirectory(), file) : null;
     }
 
-    private File showOpenDir(Frame frame, String title, Consumer<FileDialog> 
init) {
+    private File showOpenDir(Consumer<FileDialog> init) {
         // Toggle the property only for the duration of this modal dialog.
         // FileDialog is EDT-blocking, so no other dialog can run concurrently.
         System.setProperty(DIRS_DIALOG_PROPERTY, "true");
         try {
-            FileDialog fd = new FileDialog(frame, title != null ? title : "", 
FileDialog.LOAD);
+
+            // FileDialog.LOAD results in the "Save" button being called 
"Load". This is unfortunate, but the
+            // alternative allows the user to override the file name
+            FileDialog fd = new FileDialog(parent, title != null ? title : "", 
FileDialog.LOAD);
             init.accept(fd);
             fd.setVisible(true);
             String file = fd.getFile();
@@ -115,15 +121,4 @@ public class MacFileChooserFactory implements 
FileChooserFactory {
     private static FilenameFilter toFilenameFilter(FileFilter filter) {
         return filter != null ? (dir, name) -> filter.accept(new File(dir, 
name)) : null;
     }
-
-    private static Frame toFrame(Component c) {
-        Window w = SwingUtilities.getWindowAncestor(c);
-        while (w != null) {
-            if (w instanceof Frame f) {
-                return f;
-            }
-            w = w.getOwner();
-        }
-        return null;
-    }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacUIInitializer.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacUIInitializer.java
index b48796f10..47dcb2631 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacUIInitializer.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacUIInitializer.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.modeler.platform.mac;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.service.action.GlobalActions;
 import org.apache.cayenne.modeler.platform.UIInitializer;
-import org.apache.cayenne.modeler.toolkit.filechooser.FileChooserFactory;
+import org.apache.cayenne.modeler.toolkit.filechooser.CMFileChooserFactory;
 import org.apache.cayenne.modeler.ui.action.AboutAction;
 import org.apache.cayenne.modeler.ui.action.ConfigurePreferencesAction;
 import org.apache.cayenne.modeler.ui.action.ExitAction;
@@ -92,8 +92,19 @@ public class MacUIInitializer implements UIInitializer {
     }
 
     @Override
-    public FileChooserFactory fileChooserFactory() {
-        return new MacFileChooserFactory();
+    public CMFileChooserFactory fileChooserFactory() {
+        return (parent, title) -> new MacFileChooser(toFrame(parent), title);
+    }
+
+    private static Frame toFrame(Component c) {
+        Window w = SwingUtilities.getWindowAncestor(c);
+        while (w != null) {
+            if (w instanceof Frame f) {
+                return f;
+            }
+            w = w.getOwner();
+        }
+        return null;
     }
 
     @Override
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/FileChooserFactory.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooser.java
similarity index 62%
copy from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/FileChooserFactory.java
copy to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooser.java
index a0e20b8d5..4ca8db8cd 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/FileChooserFactory.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooser.java
@@ -22,24 +22,25 @@ package org.apache.cayenne.modeler.toolkit.filechooser;
 import org.apache.cayenne.modeler.pref.adapters.FileChooserPrefs;
 
 import javax.swing.filechooser.FileFilter;
-import java.awt.Component;
 import java.io.File;
 
 /**
- * Platform-specific factory for file and directory chooser dialogs. 
Implementations may use either a native OS dialog
- * or Swing's JFileChooser.
+ * A file/directory chooser dialog bound to a specific parent component and 
title.
+ * Obtained via {@code application.getFileChooser(parent, title)}.
+ *
+ * @see CMFileChooserFactory
  */
-public interface FileChooserFactory {
+public interface CMFileChooser {
 
-    File openFile(Component parent, String title, File initialDir, FileFilter 
filter);
+    File openFile(File initialDir, FileFilter filter);
 
-    File openFile(Component parent, String title, FileChooserPrefs prefs, 
FileFilter filter);
+    File openFile(FileChooserPrefs prefs, FileFilter filter);
 
-    File openDir(Component parent, String title, File initialDir);
+    File openDir(File initialDir);
 
-    File openDir(Component parent, String title, FileChooserPrefs prefs);
+    File openDir(FileChooserPrefs prefs);
 
-    File saveFile(Component parent, String title, FileChooserPrefs prefs, 
String defaultName);
+    File saveFile(FileChooserPrefs prefs, String defaultName);
 
-    File saveDir(Component parent, String title, File initialDir);
+    File saveDir(File initialDir);
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/FileChooserFactory.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooserFactory.java
similarity index 56%
rename from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/FileChooserFactory.java
rename to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooserFactory.java
index a0e20b8d5..0b2af3f69 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/FileChooserFactory.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooserFactory.java
@@ -19,27 +19,13 @@
 
 package org.apache.cayenne.modeler.toolkit.filechooser;
 
-import org.apache.cayenne.modeler.pref.adapters.FileChooserPrefs;
-
-import javax.swing.filechooser.FileFilter;
 import java.awt.Component;
-import java.io.File;
 
 /**
- * Platform-specific factory for file and directory chooser dialogs. 
Implementations may use either a native OS dialog
- * or Swing's JFileChooser.
+ * Platform-specific factory for {@link CMFileChooser} instances.
  */
-public interface FileChooserFactory {
-
-    File openFile(Component parent, String title, File initialDir, FileFilter 
filter);
-
-    File openFile(Component parent, String title, FileChooserPrefs prefs, 
FileFilter filter);
-
-    File openDir(Component parent, String title, File initialDir);
-
-    File openDir(Component parent, String title, FileChooserPrefs prefs);
-
-    File saveFile(Component parent, String title, FileChooserPrefs prefs, 
String defaultName);
+@FunctionalInterface
+public interface CMFileChooserFactory {
 
-    File saveDir(Component parent, String title, File initialDir);
+    CMFileChooser create(Component parent, String title);
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/JFileChooserFactory.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/SwingFileChooser.java
similarity index 65%
rename from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/JFileChooserFactory.java
rename to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/SwingFileChooser.java
index e20b6d618..6aa0890ea 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/JFileChooserFactory.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/SwingFileChooser.java
@@ -28,47 +28,49 @@ import java.io.File;
 import java.util.function.Consumer;
 
 /**
- * {@link FileChooserFactory} implementation backed by Swing's {@link 
JFileChooser}.
+ * {@link CMFileChooser} implementation backed by Swing's {@link JFileChooser}.
  */
-public class JFileChooserFactory implements FileChooserFactory {
+public class SwingFileChooser implements CMFileChooser {
+
+    private final Component parent;
+    private final String title;
+
+    public SwingFileChooser(Component parent, String title) {
+        this.parent = parent;
+        this.title = title;
+    }
 
     @Override
-    public File openFile(Component parent, String title, File initialDir, 
FileFilter filter) {
+    public File openFile(File initialDir, FileFilter filter) {
         return showOpen(
-                parent,
-                title,
                 JFileChooser.FILES_ONLY,
-                c -> {
-                    if (initialDir != null) c.setCurrentDirectory(initialDir);
-                },
+                c -> { if (initialDir != null) 
c.setCurrentDirectory(initialDir); },
                 filter);
     }
 
     @Override
-    public File openFile(Component parent, String title, FileChooserPrefs 
prefs, FileFilter filter) {
-        return showOpen(parent, title, JFileChooser.FILES_ONLY, prefs::bind, 
filter);
+    public File openFile(FileChooserPrefs prefs, FileFilter filter) {
+        return showOpen(JFileChooser.FILES_ONLY, prefs::bind, filter);
     }
 
     @Override
-    public File saveFile(Component parent, String title, FileChooserPrefs 
prefs, String defaultName) {
-        return showSave(parent, title, prefs::bind, defaultName);
+    public File openDir(File initialDir) {
+        return showOpen(JFileChooser.DIRECTORIES_ONLY,
+                c -> { if (initialDir != null) 
c.setCurrentDirectory(initialDir); }, null);
     }
 
     @Override
-    public File openDir(Component parent, String title, File initialDir) {
-        return showOpen(parent, title, JFileChooser.DIRECTORIES_ONLY,
-                c -> {
-                    if (initialDir != null) c.setCurrentDirectory(initialDir);
-                }, null);
+    public File openDir(FileChooserPrefs prefs) {
+        return showOpen(JFileChooser.DIRECTORIES_ONLY, prefs::bind, null);
     }
 
     @Override
-    public File openDir(Component parent, String title, FileChooserPrefs 
prefs) {
-        return showOpen(parent, title, JFileChooser.DIRECTORIES_ONLY, 
prefs::bind, null);
+    public File saveFile(FileChooserPrefs prefs, String defaultName) {
+        return showSave(prefs::bind, defaultName);
     }
 
     @Override
-    public File saveDir(Component parent, String title, File initialDir) {
+    public File saveDir(File initialDir) {
         JFileChooser chooser = new JFileChooser();
         chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
         if (initialDir != null) {
@@ -82,7 +84,7 @@ public class JFileChooserFactory implements 
FileChooserFactory {
                 : null;
     }
 
-    private File showOpen(Component parent, String title, int mode, 
Consumer<JFileChooser> init, FileFilter filter) {
+    private File showOpen(int mode, Consumer<JFileChooser> init, FileFilter 
filter) {
         JFileChooser chooser = new JFileChooser();
         chooser.setFileSelectionMode(mode);
         init.accept(chooser);
@@ -98,7 +100,7 @@ public class JFileChooserFactory implements 
FileChooserFactory {
                 : null;
     }
 
-    private File showSave(Component parent, String title, 
Consumer<JFileChooser> init, String defaultName) {
+    private File showSave(Consumer<JFileChooser> init, String defaultName) {
         JFileChooser chooser = new JFileChooser();
         init.accept(chooser);
         if (title != null) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportDataMapAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportDataMapAction.java
index 0fa29e972..4e6b27c49 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportDataMapAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportDataMapAction.java
@@ -99,6 +99,6 @@ public class ImportDataMapAction extends AppAction {
 
     protected File selectDataMap(Frame f) {
         FileChooserPrefs prefs = new 
FileChooserPrefs(app.getPrefsManager().uiNode("importDataMap/lastDir"));
-        return app.getFileChooserFactory().openFile(f, "Select DataMap", 
prefs, FileFilters.getDataMapFilter());
+        return app.getFileChooser(f, "Select DataMap").openFile(prefs, 
FileFilters.getDataMapFilter());
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportEOModelAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportEOModelAction.java
index 356fc9db7..0e5501553 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportEOModelAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportEOModelAction.java
@@ -124,7 +124,7 @@ public class ImportEOModelAction extends AppAction {
      */
     protected void importEOModel() {
         FileChooserPrefs prefs = new 
FileChooserPrefs(app.getPrefsManager().uiNode("importEOModel/lastDir"));
-        File selected = app.getFileChooserFactory().openFile(app.getFrame(), 
"Select EOModel", prefs, eomodelFilter);
+        File selected = app.getFileChooser(app.getFrame(), "Select 
EOModel").openFile(prefs, eomodelFilter);
         if (selected == null) {
             return;
         }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ProjectOpener.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ProjectOpener.java
index 08944b23e..a79c6d89b 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ProjectOpener.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ProjectOpener.java
@@ -24,7 +24,6 @@ import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.pref.adapters.RecentProjectsPrefs;
 import org.apache.cayenne.modeler.ui.project.overwrite.OverwriteDialog;
-import org.apache.cayenne.modeler.toolkit.filechooser.FileChooserFactory;
 import org.apache.cayenne.modeler.toolkit.filechooser.FileFilters;
 import org.apache.cayenne.project.Project;
 import org.slf4j.Logger;
@@ -55,11 +54,10 @@ class ProjectOpener {
         }
         nameProject.append(".xml");
 
-        FileChooserFactory factory = application.getFileChooserFactory();
         File startDir = getDefaultStartDir(application);
 
         while (true) {
-            File selectedDir = factory.saveDir(application.getFrame(), "Select 
Project Directory", startDir);
+            File selectedDir = 
application.getFileChooser(application.getFrame(), "Select Project 
Directory").saveDir(startDir);
             if (selectedDir == null) {
                 LOGGER.info("Save canceled.");
                 return null;
@@ -86,11 +84,8 @@ class ProjectOpener {
      * Runs a dialog to open a Cayenne project.
      */
     public File openProjectFile(Application application) {
-        return application.getFileChooserFactory().openFile(
-                application.getFrame(),
-                "Select Project File",
-                getDefaultStartDir(application),
-                FileFilters.getApplicationFilter());
+        return application.getFileChooser(application.getFrame(), "Select 
Project File")
+                .openFile(getDefaultStartDir(application), 
FileFilters.getApplicationFilter());
     }
 
     private File getDefaultStartDir(Application application) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorOptionsDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorOptionsDialog.java
index b9915e21e..9e375e572 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorOptionsDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorOptionsDialog.java
@@ -351,7 +351,7 @@ public class DBGeneratorOptionsDialog extends ProjectDialog 
{
 
     private void storeSQLAction() {
         FileChooserPrefs prefs = new 
FileChooserPrefs(app.getPrefsManager().uiNode("dbgen/lastSqlDir"));
-        File file = app.getFileChooserFactory().saveFile(this, "Save SQL 
Script", prefs, null);
+        File file = app.getFileChooser(this, "Save SQL 
Script").saveFile(prefs, null);
         if (file != null) {
             refreshGeneratorAction();
             try (FileWriter fw = new FileWriter(file); PrintWriter pw = new 
PrintWriter(fw)) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
index 6b7d75858..233a4d577 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
@@ -359,7 +359,7 @@ public class MergerOptionsDialog extends ProjectDialog {
 
     private void storeSQLAction() {
         FileChooserPrefs prefs = new 
FileChooserPrefs(app.getPrefsManager().uiNode("merger/lastSqlDir"));
-        File file = app.getFileChooserFactory().saveFile(this, "Save SQL 
Script", prefs, null);
+        File file = app.getFileChooser(this, "Save SQL 
Script").saveFile(prefs, null);
         if (file != null) {
             refreshSQLAction();
             try (FileWriter fw = new FileWriter(file); PrintWriter pw = new 
PrintWriter(fw)) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/ClasspathPrefsPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/ClasspathPrefsPanel.java
index c8fac46de..df55e66d6 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/ClasspathPrefsPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/ClasspathPrefsPanel.java
@@ -131,14 +131,13 @@ public class ClasspathPrefsPanel extends AppPanel {
 
     private void chooseJarEntry() {
         FileChooserPrefs prefs = new 
FileChooserPrefs(app.getPrefsManager().uiNode("classpath/lastDir"));
-        File selected = app.getFileChooserFactory().openFile(
-                this, "Select JAR File.", prefs, 
FileFilters.getExtensionFileFilter("jar", "JAR Files"));
+        File selected = app.getFileChooser(this, "Select JAR 
File.").openFile(prefs, FileFilters.getExtensionFileFilter("jar", "JAR Files"));
         entryAdded(selected);
     }
 
     private void chooseDirEntry() {
         FileChooserPrefs prefs = new 
FileChooserPrefs(app.getPrefsManager().uiNode("classpath/lastDir"));
-        File selected = app.getFileChooserFactory().openDir(this, "Select Java 
Class Directory.", prefs);
+        File selected = app.getFileChooser(this, "Select Java Class 
Directory.").openDir(prefs);
         entryAdded(selected);
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenConfigPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenConfigPanel.java
index d1dae0295..bb69492f2 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenConfigPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenConfigPanel.java
@@ -401,7 +401,7 @@ public class CgenConfigPanel extends ProjectPanel {
                 ? new File(currentDir)
                 : CgenOps.baseDir(session).toFile();
 
-        File selected = app.getFileChooserFactory().openDir(this, "Select 
Output Folder", initialDir);
+        File selected = app.getFileChooser(this, "Select Output 
Folder").openDir(initialDir);
         if (selected != null) {
             String path = selected.getAbsolutePath();
             outputFolder.setText(path);

Reply via email to