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


The following commit(s) were added to refs/heads/master by this push:
     new f480ab6b9 Modeler cleanup
f480ab6b9 is described below

commit f480ab6b903992ecab9493176cef56365c9b8b60
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sat May 2 18:13:11 2026 -0400

    Modeler cleanup
    
    PreferencesRepository
---
 .../cayenne/modeler/pref/ClasspathPrefs.java       |  2 +-
 .../apache/cayenne/modeler/pref/GeneralPrefs.java  | 18 ++---
 .../modeler/pref/PreferencesRepository.java        | 17 ++++-
 .../cayenne/modeler/pref/RecentProjectsPrefs.java  |  2 +-
 ...igration.java => _1_DbConnectorsMigration.java} |  4 +-
 ...rsMigration.java => _2_ClasspathMigration.java} | 36 +++++++---
 ...igration.java => _3_GeneralPrefsMigration.java} | 27 +++++---
 ...ration.java => _4_RecentProjectsMigration.java} | 20 +++---
 ...gration.java => _5_FrameGeometryMigration.java} | 34 +++++++---
 ...tion.java => _6_ProjectSplitPaneMigration.java} | 24 ++++---
 .../migration/_7_EntityTablePrefsMigration.java    | 78 ++++++++++++++++++++++
 .../ui/confirmremove/ConfirmRemoveDialog.java      |  8 +--
 .../general/GeneralPreferencesController.java      |  6 +-
 13 files changed, 201 insertions(+), 75 deletions(-)

diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/ClasspathPrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/ClasspathPrefs.java
index 8541ba7be..d3421996e 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/ClasspathPrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/ClasspathPrefs.java
@@ -32,7 +32,7 @@ public final class ClasspathPrefs implements 
PreferenceAdapter {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ClasspathPrefs.class);
 
-    static final String NODE = "classpath";
+    public static final String NODE = "classpath";
 
     private final Preferences prefs;
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/GeneralPrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/GeneralPrefs.java
index a02e7ca88..5d3683e45 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/GeneralPrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/GeneralPrefs.java
@@ -23,12 +23,12 @@ import java.util.prefs.Preferences;
 
 public final class GeneralPrefs implements PreferenceAdapter {
 
-    static final String NODE = "general";
+    public static final String NODE = "general";
 
-    static final String AUTO_LOAD_PROJECT = "autoLoadProject";
-    static final String DELETE_PROMPT = "deletePrompt";
-    static final String ENCODING = "encoding";
-    static final String FAVOURITE_DATA_SOURCE = "favouriteDataSource";
+    public static final String AUTO_LOAD_PROJECT = "autoLoadProject";
+    public static final String NO_DELETE_PROMPT = "noDeletePrompt";
+    public static final String ENCODING = "encoding";
+    public static final String FAVOURITE_DATA_SOURCE = "favouriteDataSource";
 
     public static GeneralPrefs of(PreferencesRepository repository) {
         return new GeneralPrefs(repository.appPref(NODE));
@@ -49,12 +49,12 @@ public final class GeneralPrefs implements 
PreferenceAdapter {
         prefs.putBoolean(AUTO_LOAD_PROJECT, v);
     }
 
-    public boolean isDeletePrompt() {
-        return prefs.getBoolean(DELETE_PROMPT, false);
+    public boolean isNoDeletePrompt() {
+        return prefs.getBoolean(NO_DELETE_PROMPT, false);
     }
 
-    public void setDeletePrompt(boolean v) {
-        prefs.putBoolean(DELETE_PROMPT, v);
+    public void setNoDeletePrompt(boolean v) {
+        prefs.putBoolean(NO_DELETE_PROMPT, v);
     }
 
     public String getEncoding() {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/PreferencesRepository.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/PreferencesRepository.java
index 516bd01cb..b2239237d 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/PreferencesRepository.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/PreferencesRepository.java
@@ -20,7 +20,13 @@ package org.apache.cayenne.modeler.pref;
 
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.pref.migration.DbConnectorsMigration;
+import org.apache.cayenne.modeler.pref.migration._1_DbConnectorsMigration;
+import org.apache.cayenne.modeler.pref.migration._2_ClasspathMigration;
+import org.apache.cayenne.modeler.pref.migration._3_GeneralPrefsMigration;
+import org.apache.cayenne.modeler.pref.migration._4_RecentProjectsMigration;
+import org.apache.cayenne.modeler.pref.migration._5_FrameGeometryMigration;
+import org.apache.cayenne.modeler.pref.migration._6_ProjectSplitPaneMigration;
+import org.apache.cayenne.modeler.pref.migration._7_EntityTablePrefsMigration;
 import org.apache.cayenne.project.Project;
 import org.apache.cayenne.resource.Resource;
 import org.slf4j.Logger;
@@ -66,7 +72,14 @@ public class PreferencesRepository {
     private final List<PreferenceMigration> migrations;
 
     private static List<PreferenceMigration> defaultMigrations() {
-        return List.of(new DbConnectorsMigration());
+        return List.of(
+                new _1_DbConnectorsMigration(),
+                new _2_ClasspathMigration(),
+                new _3_GeneralPrefsMigration(),
+                new _4_RecentProjectsMigration(),
+                new _5_FrameGeometryMigration(),
+                new _6_ProjectSplitPaneMigration(),
+                new _7_EntityTablePrefsMigration());
     }
 
     public PreferencesRepository() {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/RecentProjectsPrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/RecentProjectsPrefs.java
index 0ff6b7cdf..771814950 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/RecentProjectsPrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/RecentProjectsPrefs.java
@@ -34,7 +34,7 @@ public final class RecentProjectsPrefs implements 
PreferenceAdapter {
 
     public static final int MAX_SIZE = 12;
 
-    static final String NODE = "lastProjects";
+    public static final String NODE = "lastProjects";
 
     public static RecentProjectsPrefs of(PreferencesRepository repository) {
         return new RecentProjectsPrefs(repository.appPref(NODE));
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_1_DbConnectorsMigration.java
similarity index 95%
copy from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
copy to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_1_DbConnectorsMigration.java
index 782d17349..edacbb5c8 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_1_DbConnectorsMigration.java
@@ -32,9 +32,9 @@ import java.util.prefs.Preferences;
  * into the new {@code app/dbConnectors} layout. Leaves the legacy node intact 
so an
  * older Modeler installation on the same machine still works.
  */
-public class DbConnectorsMigration implements PreferenceMigration {
+public class _1_DbConnectorsMigration implements PreferenceMigration {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(DbConnectorsMigration.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(_1_DbConnectorsMigration.class);
 
     private static final String LEGACY_PATH = 
"org/apache/cayenne/dbConnectionInfo";
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_2_ClasspathMigration.java
similarity index 62%
copy from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
copy to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_2_ClasspathMigration.java
index 782d17349..cbd0f0962 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_2_ClasspathMigration.java
@@ -18,8 +18,8 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.pref.migration;
 
+import org.apache.cayenne.modeler.pref.ClasspathPrefs;
 import org.apache.cayenne.modeler.pref.PreferenceMigration;
-import org.apache.cayenne.modeler.pref.PreferencesCopier;
 import org.apache.cayenne.modeler.pref.PreferencesRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,35 +28,49 @@ import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
 /**
- * Copies legacy DB connection profiles from {@code 
org/apache/cayenne/dbConnectionInfo}
- * into the new {@code app/dbConnectors} layout. Leaves the legacy node intact 
so an
- * older Modeler installation on the same machine still works.
+ * Copies legacy classpath entries from {@code 
org/apache/cayenne/modeler/dialog/pref}
+ * into the new {@code app/classpath} layout. The legacy node was shared with 
other
+ * dialogs, so only numeric keys (the format used by the old 
ClasspathPreferences) are
+ * copied. Leaves the legacy node intact so an older Modeler installation on 
the same
+ * machine still works.
  */
-public class DbConnectorsMigration implements PreferenceMigration {
+public class _2_ClasspathMigration implements PreferenceMigration {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(DbConnectorsMigration.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(_2_ClasspathMigration.class);
 
-    private static final String LEGACY_PATH = 
"org/apache/cayenne/dbConnectionInfo";
+    private static final String LEGACY_PATH = 
"org/apache/cayenne/modeler/dialog/pref";
 
     @Override
     public int version() {
-        return 1;
+        return 2;
     }
 
     @Override
     public void apply(PreferencesRepository repo) {
         Preferences legacy;
+        String[] legacyKeys;
         try {
             if (!Preferences.userRoot().nodeExists(LEGACY_PATH)) {
                 return;
             }
             legacy = Preferences.userRoot().node(LEGACY_PATH);
+            legacyKeys = legacy.keys();
         } catch (BackingStoreException e) {
-            LOGGER.warn("Error checking legacy dbConnectionInfo node", e);
+            LOGGER.warn("Error checking legacy classpath node", e);
             return;
         }
 
-        Preferences target = repo.appPref("dbConnectors");
-        PreferencesCopier.copy(legacy, target);
+        Preferences target = repo.appPref(ClasspathPrefs.NODE);
+        for (String key : legacyKeys) {
+            try {
+                Integer.parseInt(key);
+            } catch (NumberFormatException e) {
+                continue;
+            }
+            String value = legacy.get(key, "");
+            if (!value.isEmpty()) {
+                target.put(key, value);
+            }
+        }
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_3_GeneralPrefsMigration.java
similarity index 63%
copy from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
copy to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_3_GeneralPrefsMigration.java
index 782d17349..bff8e70bb 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_3_GeneralPrefsMigration.java
@@ -18,8 +18,8 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.pref.migration;
 
+import org.apache.cayenne.modeler.pref.GeneralPrefs;
 import org.apache.cayenne.modeler.pref.PreferenceMigration;
-import org.apache.cayenne.modeler.pref.PreferencesCopier;
 import org.apache.cayenne.modeler.pref.PreferencesRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,19 +28,19 @@ import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
 /**
- * Copies legacy DB connection profiles from {@code 
org/apache/cayenne/dbConnectionInfo}
- * into the new {@code app/dbConnectors} layout. Leaves the legacy node intact 
so an
- * older Modeler installation on the same machine still works.
+ * Copies legacy general preferences from {@code 
org/apache/cayenne/modeler/dialog/pref}
+ * into the new {@code app/general} layout. Leaves the legacy node intact so 
an older
+ * Modeler installation on the same machine still works.
  */
-public class DbConnectorsMigration implements PreferenceMigration {
+public class _3_GeneralPrefsMigration implements PreferenceMigration {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(DbConnectorsMigration.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(_3_GeneralPrefsMigration.class);
 
-    private static final String LEGACY_PATH = 
"org/apache/cayenne/dbConnectionInfo";
+    private static final String LEGACY_PATH = 
"org/apache/cayenne/modeler/dialog/pref";
 
     @Override
     public int version() {
-        return 1;
+        return 3;
     }
 
     @Override
@@ -52,11 +52,16 @@ public class DbConnectorsMigration implements 
PreferenceMigration {
             }
             legacy = Preferences.userRoot().node(LEGACY_PATH);
         } catch (BackingStoreException e) {
-            LOGGER.warn("Error checking legacy dbConnectionInfo node", e);
+            LOGGER.warn("Error checking legacy general prefs node", e);
             return;
         }
 
-        Preferences target = repo.appPref("dbConnectors");
-        PreferencesCopier.copy(legacy, target);
+        Preferences target = repo.appPref(GeneralPrefs.NODE);
+        target.putBoolean(GeneralPrefs.AUTO_LOAD_PROJECT, 
legacy.getBoolean("autoLoadProject", false));
+        target.put(GeneralPrefs.ENCODING, legacy.get("encoding", ""));
+        target.put(GeneralPrefs.FAVOURITE_DATA_SOURCE, 
legacy.get("favouriteDataSource", ""));
+
+        // legacy used the wrong name - "deletePrompt", for what was meant to 
be "delete with no prompt"
+        target.putBoolean(GeneralPrefs.NO_DELETE_PROMPT, 
legacy.getBoolean("deletePrompt", false));
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_4_RecentProjectsMigration.java
similarity index 75%
copy from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
copy to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_4_RecentProjectsMigration.java
index 782d17349..8e8ccd4f2 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_4_RecentProjectsMigration.java
@@ -21,6 +21,7 @@ package org.apache.cayenne.modeler.pref.migration;
 import org.apache.cayenne.modeler.pref.PreferenceMigration;
 import org.apache.cayenne.modeler.pref.PreferencesCopier;
 import org.apache.cayenne.modeler.pref.PreferencesRepository;
+import org.apache.cayenne.modeler.pref.RecentProjectsPrefs;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -28,19 +29,20 @@ import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
 /**
- * Copies legacy DB connection profiles from {@code 
org/apache/cayenne/dbConnectionInfo}
- * into the new {@code app/dbConnectors} layout. Leaves the legacy node intact 
so an
- * older Modeler installation on the same machine still works.
+ * Copies the legacy "last opened projects" history from
+ * {@code org/apache/cayenne/editor/lastSeveralProjectFiles} into the new
+ * {@code app/lastProjects} layout. Leaves the legacy node intact so an older
+ * Modeler installation on the same machine still works.
  */
-public class DbConnectorsMigration implements PreferenceMigration {
+public class _4_RecentProjectsMigration implements PreferenceMigration {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(DbConnectorsMigration.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(_4_RecentProjectsMigration.class);
 
-    private static final String LEGACY_PATH = 
"org/apache/cayenne/dbConnectionInfo";
+    private static final String LEGACY_PATH = 
"org/apache/cayenne/editor/lastSeveralProjectFiles";
 
     @Override
     public int version() {
-        return 1;
+        return 4;
     }
 
     @Override
@@ -52,11 +54,11 @@ public class DbConnectorsMigration implements 
PreferenceMigration {
             }
             legacy = Preferences.userRoot().node(LEGACY_PATH);
         } catch (BackingStoreException e) {
-            LOGGER.warn("Error checking legacy dbConnectionInfo node", e);
+            LOGGER.warn("Error checking legacy lastSeveralProjectFiles node", 
e);
             return;
         }
 
-        Preferences target = repo.appPref("dbConnectors");
+        Preferences target = repo.appPref(RecentProjectsPrefs.NODE);
         PreferencesCopier.copy(legacy, target);
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_5_FrameGeometryMigration.java
similarity index 62%
copy from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
copy to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_5_FrameGeometryMigration.java
index 782d17349..8ed0e8dda 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_5_FrameGeometryMigration.java
@@ -19,7 +19,6 @@
 package org.apache.cayenne.modeler.pref.migration;
 
 import org.apache.cayenne.modeler.pref.PreferenceMigration;
-import org.apache.cayenne.modeler.pref.PreferencesCopier;
 import org.apache.cayenne.modeler.pref.PreferencesRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,19 +27,22 @@ import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
 /**
- * Copies legacy DB connection profiles from {@code 
org/apache/cayenne/dbConnectionInfo}
- * into the new {@code app/dbConnectors} layout. Leaves the legacy node intact 
so an
- * older Modeler installation on the same machine still works.
+ * Copies legacy main-frame geometry (width / height / x / y) from
+ * {@code org/apache/cayenne/modeler} into the new {@code 
app/ui/frame/geometry}
+ * layout. The legacy node is the {@code userNodeForPackage} of the modeler
+ * package and may hold unrelated keys, so only the four geometry keys are
+ * copied. Leaves the legacy node intact so an older Modeler installation on 
the
+ * same machine still works.
  */
-public class DbConnectorsMigration implements PreferenceMigration {
+public class _5_FrameGeometryMigration implements PreferenceMigration {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(DbConnectorsMigration.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(_5_FrameGeometryMigration.class);
 
-    private static final String LEGACY_PATH = 
"org/apache/cayenne/dbConnectionInfo";
+    private static final String LEGACY_PATH = "org/apache/cayenne/modeler";
 
     @Override
     public int version() {
-        return 1;
+        return 5;
     }
 
     @Override
@@ -52,11 +54,21 @@ public class DbConnectorsMigration implements 
PreferenceMigration {
             }
             legacy = Preferences.userRoot().node(LEGACY_PATH);
         } catch (BackingStoreException e) {
-            LOGGER.warn("Error checking legacy dbConnectionInfo node", e);
+            LOGGER.warn("Error checking legacy frame geometry node", e);
             return;
         }
 
-        Preferences target = repo.appPref("dbConnectors");
-        PreferencesCopier.copy(legacy, target);
+        Preferences target = repo.uiPref("frame/geometry");
+        copyInt(legacy, target, "width");
+        copyInt(legacy, target, "height");
+        copyInt(legacy, target, "x");
+        copyInt(legacy, target, "y");
+    }
+
+    private static void copyInt(Preferences src, Preferences dst, String key) {
+        int value = src.getInt(key, Integer.MIN_VALUE);
+        if (value != Integer.MIN_VALUE) {
+            dst.putInt(key, value);
+        }
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_6_ProjectSplitPaneMigration.java
similarity index 70%
rename from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
rename to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_6_ProjectSplitPaneMigration.java
index 782d17349..753a2523e 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/DbConnectorsMigration.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_6_ProjectSplitPaneMigration.java
@@ -19,7 +19,6 @@
 package org.apache.cayenne.modeler.pref.migration;
 
 import org.apache.cayenne.modeler.pref.PreferenceMigration;
-import org.apache.cayenne.modeler.pref.PreferencesCopier;
 import org.apache.cayenne.modeler.pref.PreferencesRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,19 +27,22 @@ import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
 /**
- * Copies legacy DB connection profiles from {@code 
org/apache/cayenne/dbConnectionInfo}
- * into the new {@code app/dbConnectors} layout. Leaves the legacy node intact 
so an
+ * Copies the legacy project tree / editor splitter position from
+ * {@code org/apache/cayenne/modeler/editor/splitPane/divider} into the new
+ * {@code app/ui/project/splitPane} layout. Leaves the legacy node intact so an
  * older Modeler installation on the same machine still works.
  */
-public class DbConnectorsMigration implements PreferenceMigration {
+public class _6_ProjectSplitPaneMigration implements PreferenceMigration {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(DbConnectorsMigration.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(_6_ProjectSplitPaneMigration.class);
 
-    private static final String LEGACY_PATH = 
"org/apache/cayenne/dbConnectionInfo";
+    private static final String LEGACY_PATH = 
"org/apache/cayenne/modeler/editor/splitPane/divider";
+
+    private static final String DIVIDER_LOCATION = "dividerLocation";
 
     @Override
     public int version() {
-        return 1;
+        return 6;
     }
 
     @Override
@@ -52,11 +54,13 @@ public class DbConnectorsMigration implements 
PreferenceMigration {
             }
             legacy = Preferences.userRoot().node(LEGACY_PATH);
         } catch (BackingStoreException e) {
-            LOGGER.warn("Error checking legacy dbConnectionInfo node", e);
+            LOGGER.warn("Error checking legacy project splitPane node", e);
             return;
         }
 
-        Preferences target = repo.appPref("dbConnectors");
-        PreferencesCopier.copy(legacy, target);
+        int dividerLocation = legacy.getInt(DIVIDER_LOCATION, 
Integer.MIN_VALUE);
+        if (dividerLocation != Integer.MIN_VALUE) {
+            repo.uiPref("project/splitPane").putInt(DIVIDER_LOCATION, 
dividerLocation);
+        }
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_7_EntityTablePrefsMigration.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_7_EntityTablePrefsMigration.java
new file mode 100644
index 000000000..d3cc6aea5
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/migration/_7_EntityTablePrefsMigration.java
@@ -0,0 +1,78 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.modeler.pref.migration;
+
+import org.apache.cayenne.modeler.pref.PreferenceMigration;
+import org.apache.cayenne.modeler.pref.PreferencesCopier;
+import org.apache.cayenne.modeler.pref.PreferencesRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
+
+/**
+ * Copies legacy column widths / order / sort prefs for the four primary entity
+ * tables (ObjAttribute, ObjRelationship, DbAttribute, DbRelationship) into the
+ * new {@code app/ui/...} layout. Legacy nodes were derived from
+ * {@code userNodeForPackage(<table-model class>).node(<sub-path>)}; the
+ * {@code width_*}, {@code order_*}, {@code sort_column}, and {@code 
sort_order}
+ * key formats are identical to the new layout, so a recursive subtree copy
+ * suffices. Leaves the legacy nodes intact so an older Modeler installation on
+ * the same machine still works.
+ */
+public class _7_EntityTablePrefsMigration implements PreferenceMigration {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(_7_EntityTablePrefsMigration.class);
+
+    private static final String[][] PATHS = {
+            // {legacyAbsolutePath, newRelativeUiPath}
+            {"org/apache/cayenne/modeler/editor/objEntity/attributeTable", 
"objEntity/attributeTable"},
+            {"org/apache/cayenne/modeler/editor/objEntity/relationshipTable", 
"objEntity/relationshipTable"},
+            {"org/apache/cayenne/modeler/editor/dbentity/attributeTable", 
"dbEntity/attributeTable"},
+            {"org/apache/cayenne/modeler/editor/dbentity/relationshipTable", 
"dbEntity/relationshipTable"},
+    };
+
+    @Override
+    public int version() {
+        return 7;
+    }
+
+    @Override
+    public void apply(PreferencesRepository repo) {
+        for (String[] pair : PATHS) {
+            copyTable(repo, pair[0], pair[1]);
+        }
+    }
+
+    private static void copyTable(PreferencesRepository repo, String 
legacyPath, String uiPath) {
+        Preferences legacy;
+        try {
+            if (!Preferences.userRoot().nodeExists(legacyPath)) {
+                return;
+            }
+            legacy = Preferences.userRoot().node(legacyPath);
+        } catch (BackingStoreException e) {
+            LOGGER.warn("Error checking legacy table prefs node '{}'", 
legacyPath, e);
+            return;
+        }
+
+        PreferencesCopier.copy(legacy, repo.uiPref(uiPath));
+    }
+}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/confirmremove/ConfirmRemoveDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/confirmremove/ConfirmRemoveDialog.java
index 2dedecd9d..240d3823f 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/confirmremove/ConfirmRemoveDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/confirmremove/ConfirmRemoveDialog.java
@@ -25,7 +25,7 @@ import javax.swing.*;
 
 /**
  * Used to confirm deleting items in the model.
- * 
+ *
  */
 public class ConfirmRemoveDialog {
 
@@ -54,7 +54,7 @@ public class ConfirmRemoveDialog {
         };
 
         JOptionPane pane = new JOptionPane(message, 
JOptionPane.QUESTION_MESSAGE);
-        pane.setOptions(new Object[]{ DELETE, "Cancel" });
+        pane.setOptions(new Object[]{DELETE, "Cancel"});
         pane.setInitialValue(DELETE);
         pane.createDialog(application.getFrameController().getView(), "Confirm 
Delete").setVisible(true);
 
@@ -63,7 +63,7 @@ public class ConfirmRemoveDialog {
         // If the user clicks "cancel" or window close button, we'll just 
ignore whatever's in the checkbox because
         // it's non-sensical.
         if (shouldDelete) {
-            
GeneralPrefs.of(application.getPreferencesRepository()).setDeletePrompt(!neverPromptAgainBox.isSelected());
+            
GeneralPrefs.of(application.getPreferencesRepository()).setNoDeletePrompt(neverPromptAgainBox.isSelected());
         }
     }
 
@@ -72,7 +72,7 @@ public class ConfirmRemoveDialog {
     }
 
     public boolean shouldDelete(String name) {
-        if (allowAsking && 
GeneralPrefs.of(application.getPreferencesRepository()).isDeletePrompt()) {
+        if (allowAsking && 
!GeneralPrefs.of(application.getPreferencesRepository()).isNoDeletePrompt()) {
             showDialog(name);
         }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPreferencesController.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPreferencesController.java
index eb056ae84..9a04d035f 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPreferencesController.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPreferencesController.java
@@ -53,9 +53,7 @@ public class GeneralPreferencesController extends 
ChildController<PreferenceDial
         view.getEncodingChoices().setModel(new 
DefaultComboBoxModel<>(supportedEncodings()));
         selectEncoding(prefs.getEncoding());
         view.getAutoLoadProject().setSelected(prefs.isAutoLoadProject());
-
-        // Note how the meaning of the preference is the opposite of the 
checkbox
-        view.getNoDeletePrompt().setSelected(!prefs.isDeletePrompt());
+        view.getNoDeletePrompt().setSelected(prefs.isNoDeletePrompt());
     }
 
     @Override
@@ -71,7 +69,7 @@ public class GeneralPreferencesController extends 
ChildController<PreferenceDial
 
         prefs.setEncoding(encoding);
         prefs.setAutoLoadProject(view.getAutoLoadProject().isSelected());
-        prefs.setDeletePrompt(!view.getNoDeletePrompt().isSelected());
+        prefs.setNoDeletePrompt(view.getNoDeletePrompt().isSelected());
     }
 
     /**

Reply via email to