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 be89c18e8f7f492d2f64ec151557aa2df07f84d8
Author: Andrus Adamchik <[email protected]>
AuthorDate: Wed May 6 10:00:38 2026 -0400

    Modeler cleanup
    
    PreferencesAdapter as a superclass
---
 .../org/apache/cayenne/modeler/Application.java    |  8 ++--
 .../cayenne/modeler/pref/ClasspathPrefs.java       | 13 ++----
 .../cayenne/modeler/pref/DBConnectorPrefs.java     | 16 ++++---
 .../apache/cayenne/modeler/pref/DataMapPrefs.java  | 54 +++++++++-------------
 .../apache/cayenne/modeler/pref/DataNodePrefs.java | 31 +++++++------
 .../apache/cayenne/modeler/pref/GeneralPrefs.java  | 15 ++----
 .../cayenne/modeler/pref/PreferenceAdapter.java    | 12 ++++-
 .../cayenne/modeler/pref/RecentProjectsPrefs.java  | 14 ++----
 .../cayenne/modeler/project/ProjectPrefs.java      | 13 ++----
 .../cayenne/modeler/project/ProjectSession.java    |  4 +-
 .../component/CMComponentGeometryPrefs.java        | 13 ++----
 .../toolkit/filechooser/CMFileChooserPrefs.java    | 13 ++----
 .../toolkit/splitpane/CMSplitPanePrefs.java        | 12 ++---
 .../modeler/toolkit/table/CMTablePrefs.java        | 13 ++----
 .../org/apache/cayenne/modeler/ui/MainFrame.java   |  8 ++--
 .../org/apache/cayenne/modeler/ui/MainMenuBar.java |  2 +-
 .../modeler/ui/action/DBConnectionAwareAction.java |  2 +-
 .../modeler/ui/action/ImportDataMapAction.java     |  2 +-
 .../modeler/ui/action/ImportEOModelAction.java     |  7 ++-
 .../cayenne/modeler/ui/action/ProjectOpener.java   |  2 +-
 .../modeler/ui/action/ShowLogConsoleAction.java    |  2 +-
 .../ui/confirmremove/ConfirmRemoveDialog.java      |  4 +-
 .../modeler/ui/datasource/DataSourceDialog.java    |  8 ++--
 .../modeler/ui/dbgen/DBGeneratorOptionsDialog.java |  2 +-
 .../cayenne/modeler/ui/dbgen/DBGeneratorPrefs.java | 14 ++----
 .../ui/dbrelationship/DbRelationshipDialog.java    |  2 +-
 .../cayenne/modeler/ui/errors/ErrorDialog.java     |  2 +-
 .../cayenne/modeler/ui/logconsole/LogConsole.java  |  4 +-
 .../modeler/ui/logconsole/LogConsolePrefs.java     | 14 ++----
 .../preferences/classpath/ClasspathPrefsPanel.java |  6 +--
 .../ui/preferences/general/GeneralPrefsPanel.java  |  4 +-
 .../cayenne/modeler/ui/project/ProjectView.java    |  2 +-
 .../editor/datadomain/cgen/DataDomainCgenTab.java  |  2 +-
 .../datadomain/graph/action/SaveAsImageAction.java |  2 +-
 .../ui/project/editor/datamap/cgen/CgenPanel.java  |  2 +-
 .../cgen/templateeditor/TemplateEditor.java        |  4 +-
 .../editor/datamap/main/DataMapMainView.java       |  9 ++--
 .../editor/datanode/DataNodeEditorPanel.java       |  5 +-
 .../editor/datanode/jdbc/JDBCDataSourcePanel.java  |  2 +-
 .../dbentity/properties/DbAttributePanel.java      |  2 +-
 .../properties/DbEntityPropertiesView.java         |  2 +-
 .../dbentity/properties/DbRelationshipPanel.java   |  2 +-
 .../attributes/EmbeddableAttributesView.java       |  2 +-
 .../objentity/attrinfo/ObjAttributeInfoDialog.java |  2 +-
 .../callbacks/ObjEntityCallbacksView.java          |  4 +-
 .../objentity/properties/ObjAttributePanel.java    |  2 +-
 .../properties/ObjEntityPropertiesView.java        |  2 +-
 .../objentity/properties/ObjRelationshipPanel.java |  2 +-
 .../editor/procedure/ProcedureParameterTab.java    |  2 +-
 .../query/selectquery/SelectQueryOrderingTab.java  |  2 +-
 .../query/sqltemplate/SQLTemplatePrefetchTab.java  |  2 +-
 .../cayenne/modeler/ui/welcome/WelcomeScreen.java  |  2 +-
 52 files changed, 151 insertions(+), 221 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 b681acd72..f3d3137e4 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
@@ -147,7 +147,7 @@ public class Application {
 
         getPreferencesRepository().runMigrations();
 
-        this.dbConnectors = 
DBConnectorPrefs.loadAndBind(getPreferencesRepository());
+        this.dbConnectors = new 
DBConnectorPrefs(getPreferencesRepository()).getConnectors();
 
         refreshClassLoader();
 
@@ -191,7 +191,7 @@ public class Application {
      * Reinitializes ModelerClassLoader from preferences.
      */
     public void refreshClassLoader() {
-        List<String> values = 
ClasspathPrefs.of(getPreferencesRepository()).getEntries();
+        List<String> values = new 
ClasspathPrefs(getPreferencesRepository()).getEntries();
         if (!values.isEmpty()) {
             
getClassLoader().setFiles(values.stream().map(File::new).collect(Collectors.toList()));
         }
@@ -199,8 +199,8 @@ public class Application {
 
     private File initialProjectFromPreferences() {
 
-        if (GeneralPrefs.of(getPreferencesRepository()).isAutoLoadProject()) {
-            List<File> files = 
RecentProjectsPrefs.of(getPreferencesRepository()).getFiles();
+        if (new GeneralPrefs(getPreferencesRepository()).isAutoLoadProject()) {
+            List<File> files = new 
RecentProjectsPrefs(getPreferencesRepository()).getFiles();
             if (!files.isEmpty()) {
                 return files.get(0);
             }
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 d3421996e..ebce558f7 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
@@ -26,22 +26,15 @@ import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.prefs.BackingStoreException;
-import java.util.prefs.Preferences;
 
-public final class ClasspathPrefs implements PreferenceAdapter {
+public final class ClasspathPrefs extends PreferenceAdapter {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ClasspathPrefs.class);
 
     public static final String NODE = "classpath";
 
-    private final Preferences prefs;
-
-    private ClasspathPrefs(Preferences prefs) {
-        this.prefs = prefs;
-    }
-
-    public static ClasspathPrefs of(PreferencesRepository repository) {
-        return new ClasspathPrefs(repository.appPref(NODE));
+    public ClasspathPrefs(PreferencesRepository repository) {
+        super(repository.appPref(NODE));
     }
 
     // Returns classpath entries in numeric-key order. Defensive against any
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DBConnectorPrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DBConnectorPrefs.java
index ac59ef09f..ce47a50db 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DBConnectorPrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DBConnectorPrefs.java
@@ -30,7 +30,7 @@ import java.util.prefs.Preferences;
  * Loads {@link DBConnectors} from the user prefs and binds the registry's
  * change events to the prefs node, so registry mutations are mirrored to disk.
  */
-public class DBConnectorPrefs implements PreferenceAdapter {
+public class DBConnectorPrefs extends PreferenceAdapter {
 
     static final String NODE = "dbConnectors";
 
@@ -40,14 +40,16 @@ public class DBConnectorPrefs implements PreferenceAdapter {
     private static final String URL_PROPERTY = "url";
     private static final String USER_NAME_PROPERTY = "userName";
 
-    public static DBConnectors loadAndBind(PreferencesRepository repository) {
-        Preferences root = repository.appPref(NODE);
+    public DBConnectorPrefs(PreferencesRepository repository) {
+        super(repository.appPref(NODE));
+    }
 
+    public DBConnectors getConnectors() {
         DBConnectors connectors = new DBConnectors();
 
         try {
-            for (String name : root.childrenNames()) {
-                connectors.put(name, loadConnector(root.node(name)));
+            for (String name : prefs.childrenNames()) {
+                connectors.put(name, loadConnector(prefs.node(name)));
             }
         } catch (BackingStoreException e) {
             throw new CayenneRuntimeException("Error loading data source 
preferences", e);
@@ -56,13 +58,13 @@ public class DBConnectorPrefs implements PreferenceAdapter {
         connectors.addListener(new DBConnectors.Listener() {
             @Override
             public void connectionUpdated(String name) {
-                storeConnector(root.node(name), connectors.get(name));
+                storeConnector(prefs.node(name), connectors.get(name));
             }
 
             @Override
             public void connectionRemoved(String name) {
                 try {
-                    root.node(name).removeNode();
+                    prefs.node(name).removeNode();
                 } catch (BackingStoreException e) {
                     throw new CayenneRuntimeException("Error removing data 
source preference", e);
                 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataMapPrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataMapPrefs.java
index 98ccd7461..a6bf7799d 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataMapPrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataMapPrefs.java
@@ -21,21 +21,13 @@ package org.apache.cayenne.modeler.pref;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.dbconnector.DBConnector;
 
-import java.util.prefs.Preferences;
-
-public final class DataMapPrefs implements PreferenceAdapter {
+public final class DataMapPrefs extends PreferenceAdapter {
 
     public static final String SUPERCLASS_PACKAGE_PROPERTY = 
"superclassPackage";
     public static final String DEFAULT_SUPERCLASS_PACKAGE_SUFFIX = "auto";
 
-    public static DataMapPrefs of(PreferencesRepository repository, DataMap 
dataMap) {
-        return new DataMapPrefs(repository.dataMapPref(dataMap, null));
-    }
-
-    private final Preferences pref;
-
-    private DataMapPrefs(Preferences pref) {
-        this.pref = pref;
+    public DataMapPrefs(PreferencesRepository repository, DataMap dataMap) {
+        super(repository.dataMapPref(dataMap, null));
     }
 
     /**
@@ -44,15 +36,13 @@ public final class DataMapPrefs implements 
PreferenceAdapter {
     public void setSuperclassPackage(String prefix, String suffix) {
         if (prefix == null) {
             prefix = "";
-        }
-        else if (prefix.endsWith(".")) {
+        } else if (prefix.endsWith(".")) {
             prefix = prefix.substring(0, prefix.length() - 1);
         }
 
         if (suffix == null) {
             suffix = "";
-        }
-        else if (suffix.startsWith(".")) {
+        } else if (suffix.startsWith(".")) {
             suffix = suffix.substring(1);
         }
 
@@ -61,11 +51,11 @@ public final class DataMapPrefs implements 
PreferenceAdapter {
     }
 
     public void setSuperclassPackage(String superclassPackage) {
-        if (pref != null) {
-            if(superclassPackage == null) {
+        if (prefs != null) {
+            if (superclassPackage == null) {
                 superclassPackage = "";
             }
-            pref.put(SUPERCLASS_PACKAGE_PROPERTY, superclassPackage);
+            prefs.put(SUPERCLASS_PACKAGE_PROPERTY, superclassPackage);
         }
     }
 
@@ -74,34 +64,34 @@ public final class DataMapPrefs implements 
PreferenceAdapter {
      * connection has been configured (URL not set).
      */
     public DBConnector getConnector() {
-        if (pref == null || pref.get(DBConnector.URL_PROPERTY, null) == null) {
+        if (prefs == null || prefs.get(DBConnector.URL_PROPERTY, null) == 
null) {
             return null;
         }
         DBConnector connector = new DBConnector();
-        connector.setDbAdapter(pref.get(DBConnector.DB_ADAPTER_PROPERTY, 
null));
-        connector.setUrl(pref.get(DBConnector.URL_PROPERTY, null));
-        connector.setUserName(pref.get(DBConnector.USER_NAME_PROPERTY, null));
-        connector.setPassword(pref.get(DBConnector.PASSWORD_PROPERTY, null));
-        connector.setJdbcDriver(pref.get(DBConnector.JDBC_DRIVER_PROPERTY, 
null));
+        connector.setDbAdapter(prefs.get(DBConnector.DB_ADAPTER_PROPERTY, 
null));
+        connector.setUrl(prefs.get(DBConnector.URL_PROPERTY, null));
+        connector.setUserName(prefs.get(DBConnector.USER_NAME_PROPERTY, null));
+        connector.setPassword(prefs.get(DBConnector.PASSWORD_PROPERTY, null));
+        connector.setJdbcDriver(prefs.get(DBConnector.JDBC_DRIVER_PROPERTY, 
null));
         return connector;
     }
 
     public void setConnector(DBConnector connector) {
-        if (pref == null) {
+        if (prefs == null) {
             return;
         }
         if (connector.getDbAdapter() != null) {
-            pref.put(DBConnector.DB_ADAPTER_PROPERTY, 
connector.getDbAdapter());
+            prefs.put(DBConnector.DB_ADAPTER_PROPERTY, 
connector.getDbAdapter());
         } else {
-            pref.remove(DBConnector.DB_ADAPTER_PROPERTY);
+            prefs.remove(DBConnector.DB_ADAPTER_PROPERTY);
         }
-        pref.put(DBConnector.URL_PROPERTY, connector.getUrl());
-        pref.put(DBConnector.USER_NAME_PROPERTY, connector.getUserName());
-        pref.put(DBConnector.PASSWORD_PROPERTY, connector.getPassword());
-        pref.put(DBConnector.JDBC_DRIVER_PROPERTY, connector.getJdbcDriver());
+        prefs.put(DBConnector.URL_PROPERTY, connector.getUrl());
+        prefs.put(DBConnector.USER_NAME_PROPERTY, connector.getUserName());
+        prefs.put(DBConnector.PASSWORD_PROPERTY, connector.getPassword());
+        prefs.put(DBConnector.JDBC_DRIVER_PROPERTY, connector.getJdbcDriver());
     }
 
     public boolean hasDbAdapter() {
-        return pref != null && pref.get(DBConnector.DB_ADAPTER_PROPERTY, null) 
!= null;
+        return prefs != null && prefs.get(DBConnector.DB_ADAPTER_PROPERTY, 
null) != null;
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataNodePrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataNodePrefs.java
index 78041b97d..d4122fbf0 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataNodePrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataNodePrefs.java
@@ -20,40 +20,43 @@ package org.apache.cayenne.modeler.pref;
 
 import org.apache.cayenne.project.Project;
 
-import java.util.prefs.Preferences;
-
-public final class DataNodePrefs implements PreferenceAdapter {
+public final class DataNodePrefs extends PreferenceAdapter {
 
     public static final String LOCAL_DATA_SOURCE_PROPERTY = "localDataSource";
 
     static final String NODE = "dataNode";
 
-    private final Preferences pref;
+    private final PreferencesRepository repository;
+    private final Project project;
+
     private String localDataSource;
 
-    public static DataNodePrefs of(PreferencesRepository repository, Project 
project, String dataNodeName) {
-        return new DataNodePrefs(repository.projectPref(project, NODE + "/" + 
dataNodeName));
-    }
+    public DataNodePrefs(PreferencesRepository repository, Project project, 
String dataNodeName) {
+        super(repository.projectPref(project, NODE + "/" + dataNodeName));
 
-    public static void rename(PreferencesRepository repository, Project 
project, String oldName, String newName) {
-        Preferences parent = repository.projectPref(project, NODE);
-        PreferencesCopier.move(parent.node(oldName), parent.node(newName));
+        // capture repo and project for the sake of "rename"
+        this.repository = repository;
+        this.project = project;
     }
 
-    private DataNodePrefs(Preferences pref) {
-        this.pref = pref;
+    public DataNodePrefs rename(String newName) {
+        DataNodePrefs renamed = new DataNodePrefs(repository, project, 
newName);
+
+        // TODO: is this the correct behavior? In the DataMapPrefs we are 
doing "copy", not "move" to handle reverts
+        PreferencesCopier.move(prefs, renamed.prefs);
+        return renamed;
     }
 
     public void setLocalDataSource(String localDataSource) {
         this.localDataSource = localDataSource;
         if (localDataSource != null) {
-            pref.put(LOCAL_DATA_SOURCE_PROPERTY, localDataSource);
+            prefs.put(LOCAL_DATA_SOURCE_PROPERTY, localDataSource);
         }
     }
 
     public String getLocalDataSource() {
         if (localDataSource == null) {
-            localDataSource = pref.get(LOCAL_DATA_SOURCE_PROPERTY, "");
+            localDataSource = prefs.get(LOCAL_DATA_SOURCE_PROPERTY, "");
         }
         return localDataSource;
     }
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 5d3683e45..9cc7dbbf5 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
@@ -19,9 +19,7 @@
 
 package org.apache.cayenne.modeler.pref;
 
-import java.util.prefs.Preferences;
-
-public final class GeneralPrefs implements PreferenceAdapter {
+public final class GeneralPrefs extends PreferenceAdapter {
 
     public static final String NODE = "general";
 
@@ -30,17 +28,10 @@ public final class GeneralPrefs implements 
PreferenceAdapter {
     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));
+    public GeneralPrefs(PreferencesRepository repository) {
+        super(repository.appPref(NODE));
     }
 
-    private final Preferences prefs;
-
-    private GeneralPrefs(Preferences prefs) {
-        this.prefs = prefs;
-    }
-
-
     public boolean isAutoLoadProject() {
         return prefs.getBoolean(AUTO_LOAD_PROJECT, false);
     }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/PreferenceAdapter.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/PreferenceAdapter.java
index ba1487824..ce0667f25 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/PreferenceAdapter.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/PreferenceAdapter.java
@@ -19,8 +19,16 @@
 
 package org.apache.cayenne.modeler.pref;
 
+import java.util.prefs.Preferences;
+
 /**
- * A tag interface for Preferences to objects binding handlers.
+ * Superclass of objects linking preferences with components.
  */
-public interface PreferenceAdapter {
+public abstract class PreferenceAdapter {
+
+    protected final Preferences prefs;
+
+    protected PreferenceAdapter(Preferences prefs) {
+        this.prefs = prefs;
+    }
 }
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 771814950..bff699ee4 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
@@ -26,9 +26,8 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.prefs.BackingStoreException;
-import java.util.prefs.Preferences;
 
-public final class RecentProjectsPrefs implements PreferenceAdapter {
+public final class RecentProjectsPrefs extends PreferenceAdapter {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(RecentProjectsPrefs.class);
 
@@ -36,17 +35,10 @@ public final class RecentProjectsPrefs implements 
PreferenceAdapter {
 
     public static final String NODE = "lastProjects";
 
-    public static RecentProjectsPrefs of(PreferencesRepository repository) {
-        return new RecentProjectsPrefs(repository.appPref(NODE));
+    public RecentProjectsPrefs(PreferencesRepository repository) {
+        super(repository.appPref(NODE));
     }
 
-    private final Preferences prefs;
-
-    private RecentProjectsPrefs(Preferences prefs) {
-        this.prefs = prefs;
-    }
-
-
     public List<File> getFiles() {
         String[] keys = keys();
         List<File> files = new ArrayList<>(keys.length);
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/ProjectPrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/ProjectPrefs.java
index 1c80cb5e8..038679ec0 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/ProjectPrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/ProjectPrefs.java
@@ -60,13 +60,12 @@ import org.apache.cayenne.util.CayenneMapEntry;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.prefs.BackingStoreException;
-import java.util.prefs.Preferences;
 
 /**
  * Binding-style handler for the Modeler's last project selection. Loaded on 
project
  * open to restore selection, flushed on project close or Modeler close to 
persist it.
  */
-public final class ProjectPrefs implements PreferenceAdapter {
+public final class ProjectPrefs extends PreferenceAdapter {
 
     private static final String EVENT_KEY = "event";
 
@@ -97,14 +96,8 @@ public final class ProjectPrefs implements PreferenceAdapter 
{
         query, multipleObjects
     }
 
-    public static ProjectPrefs of(PreferencesRepository repository, Project 
project) {
-        return new ProjectPrefs(repository.projectPref(project, null));
-    }
-
-    private final Preferences prefs;
-
-    private ProjectPrefs(Preferences prefs) {
-        this.prefs = prefs;
+    public ProjectPrefs(PreferencesRepository repository, Project project) {
+        super(repository.projectPref(project, null));
     }
 
     public void load(ProjectSession session) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/ProjectSession.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/ProjectSession.java
index bd24f92dd..87ef5372e 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/ProjectSession.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/ProjectSession.java
@@ -200,14 +200,14 @@ public class ProjectSession {
         if (project == null) {
             return;
         }
-        ProjectPrefs.of(app.getPreferencesRepository(), project).flush(this);
+        new ProjectPrefs(app.getPreferencesRepository(), project).flush(this);
     }
 
     public void restoreSelectionFromPrefs() {
         if (project == null) {
             return;
         }
-        ProjectPrefs.of(app.getPreferencesRepository(), project).load(this);
+        new ProjectPrefs(app.getPreferencesRepository(), project).load(this);
     }
 
     public boolean isDirty() {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/component/CMComponentGeometryPrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/component/CMComponentGeometryPrefs.java
index ddcf1e538..89b7ad4a0 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/component/CMComponentGeometryPrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/component/CMComponentGeometryPrefs.java
@@ -25,23 +25,16 @@ import 
org.apache.cayenne.modeler.pref.PreferencesRepository;
 import java.awt.*;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
-import java.util.prefs.Preferences;
 
-public final class CMComponentGeometryPrefs implements PreferenceAdapter {
+public final class CMComponentGeometryPrefs extends PreferenceAdapter {
 
     private static final String HEIGHT_PROPERTY = "height";
     private static final String WIDTH_PROPERTY = "width";
     private static final String X_PROPERTY = "x";
     private static final String Y_PROPERTY = "y";
 
-    public static CMComponentGeometryPrefs of(PreferencesRepository 
repository, String path) {
-        return new CMComponentGeometryPrefs(repository.uiPref(path));
-    }
-
-    private final Preferences prefs;
-
-    private CMComponentGeometryPrefs(Preferences prefs) {
-        this.prefs = prefs;
+    public CMComponentGeometryPrefs(PreferencesRepository repository, String 
path) {
+        super(repository.uiPref(path));
     }
 
     public void bind(Component c, int defaultWidth, int defaultHeight) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooserPrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooserPrefs.java
index ffa8f9ce0..b11804963 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooserPrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/filechooser/CMFileChooserPrefs.java
@@ -24,20 +24,13 @@ import 
org.apache.cayenne.modeler.pref.PreferencesRepository;
 
 import javax.swing.JFileChooser;
 import java.io.File;
-import java.util.prefs.Preferences;
 
-public final class CMFileChooserPrefs implements PreferenceAdapter {
+public final class CMFileChooserPrefs extends PreferenceAdapter {
 
     private static final String PATH_PROPERTY = "path";
 
-    private final Preferences prefs;
-
-    public static CMFileChooserPrefs of(PreferencesRepository repository, 
String path) {
-        return new CMFileChooserPrefs(repository.uiPref(path));
-    }
-
-    private CMFileChooserPrefs(Preferences prefs) {
-        this.prefs = prefs;
+    public CMFileChooserPrefs(PreferencesRepository repository, String path) {
+        super(repository.uiPref(path));
     }
 
     public void bind(JFileChooser chooser) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/splitpane/CMSplitPanePrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/splitpane/CMSplitPanePrefs.java
index 2a28a93bb..ab3e66f7a 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/splitpane/CMSplitPanePrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/splitpane/CMSplitPanePrefs.java
@@ -24,19 +24,13 @@ import 
org.apache.cayenne.modeler.pref.PreferencesRepository;
 
 import javax.swing.*;
 import java.beans.PropertyChangeListener;
-import java.util.prefs.Preferences;
 
-public final class CMSplitPanePrefs implements PreferenceAdapter {
+public final class CMSplitPanePrefs extends PreferenceAdapter {
 
-    private final Preferences prefs;
     private PropertyChangeListener listener;
 
-    public static CMSplitPanePrefs of(PreferencesRepository repository, String 
path) {
-        return new CMSplitPanePrefs(repository.uiPref(path));
-    }
-
-    private CMSplitPanePrefs(Preferences prefs) {
-        this.prefs = prefs;
+    public CMSplitPanePrefs(PreferencesRepository repository, String path) {
+        super(repository.uiPref(path));
     }
 
     public void bind(JSplitPane pane, int defaultLocation) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTablePrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTablePrefs.java
index 6aa66c856..4b40b04de 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTablePrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTablePrefs.java
@@ -29,9 +29,8 @@ import javax.swing.table.TableColumn;
 import javax.swing.table.TableColumnModel;
 import javax.swing.table.TableModel;
 import java.util.Map;
-import java.util.prefs.Preferences;
 
-public final class CMTablePrefs implements PreferenceAdapter {
+public final class CMTablePrefs extends PreferenceAdapter {
 
     private static final String SORT_COLUMN_KEY = "sortColumn";
     private static final String SORT_ORDER_KEY = "sortOrder";
@@ -39,14 +38,8 @@ public final class CMTablePrefs implements PreferenceAdapter 
{
     private static final String ORDER_KEY = "colOrder";
     private static final String LISTENER_PROPERTY = "TablePrefs.listener";
 
-    private final Preferences prefs;
-
-    public static CMTablePrefs of(PreferencesRepository repository, String 
path) {
-        return new CMTablePrefs(repository.uiPref(path));
-    }
-
-    private CMTablePrefs(Preferences prefs) {
-        this.prefs = prefs;
+    public CMTablePrefs(PreferencesRepository repository, String path) {
+        super(repository.uiPref(path));
     }
 
     /**
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainFrame.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainFrame.java
index 626549255..548e26712 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainFrame.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainFrame.java
@@ -113,7 +113,7 @@ public class MainFrame extends AppFrame {
         splitPane.getInsets().right = 5;
         splitPane.setResizeWeight(0.7);
 
-        this.splitPanePrefs = 
CMSplitPanePrefs.of(app.getPreferencesRepository(), "frame/splitPane");
+        this.splitPanePrefs = new 
CMSplitPanePrefs(app.getPreferencesRepository(), "frame/splitPane");
 
         JPanel statusBar = new JPanel(new FlowLayout(FlowLayout.LEFT, 3, 1));
         statusBar.setBorder(TopBorder.create());
@@ -239,7 +239,7 @@ public class MainFrame extends AppFrame {
             }
         });
 
-        CMComponentGeometryPrefs.of(app.getPreferencesRepository(), 
"frame/geometry").bind(this, 1200, 720);
+        new CMComponentGeometryPrefs(app.getPreferencesRepository(), 
"frame/geometry").bind(this, 1200, 720);
 
         setVisible(true);
     }
@@ -317,11 +317,11 @@ public class MainFrame extends AppFrame {
      * Adds path to the list of last opened projects in preferences.
      */
     public void addToLastProjListAction(File file) {
-        RecentProjectsPrefs.of(app.getPreferencesRepository()).addFile(file);
+        new RecentProjectsPrefs(app.getPreferencesRepository()).addFile(file);
     }
 
     public void changePathInLastProjListAction(File oldFile, File newFile) {
-        RecentProjectsPrefs prefs = 
RecentProjectsPrefs.of(app.getPreferencesRepository());
+        RecentProjectsPrefs prefs = new 
RecentProjectsPrefs(app.getPreferencesRepository());
         prefs.removeFile(oldFile);
         prefs.addFile(newFile);
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainMenuBar.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainMenuBar.java
index 5a66176e2..0e6d863ab 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainMenuBar.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainMenuBar.java
@@ -152,7 +152,7 @@ class MainMenuBar extends JMenuBar {
          */
         public void rebuildFromPreferences() {
 
-            List<File> files = 
RecentProjectsPrefs.of(app.getPreferencesRepository()).getFiles();
+            List<File> files = new 
RecentProjectsPrefs(app.getPreferencesRepository()).getFiles();
 
             // read menus
             Component[] comps = getMenuComponents();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/DBConnectionAwareAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/DBConnectionAwareAction.java
index 6d016f474..543c84bcb 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/DBConnectionAwareAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/DBConnectionAwareAction.java
@@ -73,6 +73,6 @@ public abstract class DBConnectionAwareAction extends 
AppAction {
     }
 
     private DataMapPrefs dataMapPrefs(DataMap dataMap) {
-        return DataMapPrefs.of(app.getPreferencesRepository(), dataMap);
+        return new DataMapPrefs(app.getPreferencesRepository(), dataMap);
     }
 }
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 bde0e983d..0a2cb5509 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
@@ -102,7 +102,7 @@ public class ImportDataMapAction extends AppAction {
         JFileChooser chooser = new JFileChooser();
         chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
 
-        CMFileChooserPrefs.of(app.getPreferencesRepository(), 
"importDataMap/lastDir").bind(chooser);
+        new CMFileChooserPrefs(app.getPreferencesRepository(), 
"importDataMap/lastDir").bind(chooser);
 
         chooser.addChoosableFileFilter(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 6ce4070e6..dfae9a328 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
@@ -325,7 +325,7 @@ public class ImportEOModelAction extends AppAction {
             eoModelChooser = new EOModelChooser("Select EOModel");
         }
 
-        CMFileChooserPrefs.of(app.getPreferencesRepository(), 
"importEOModel/lastDir").bind(eoModelChooser);
+        new CMFileChooserPrefs(app.getPreferencesRepository(), 
"importEOModel/lastDir").bind(eoModelChooser);
 
         return eoModelChooser;
     }
@@ -335,7 +335,7 @@ public class ImportEOModelAction extends AppAction {
      */
     static class EOModelChooser extends JFileChooser {
 
-        private static final FileFilter eomodelFilter = new 
EOModelFileFilter();
+        static final FileFilter eomodelFilter = new EOModelFileFilter();
         private static final FileFilter eomodelSelectFilter = new 
EOModelSelectFilter();
 
         protected FileFilter selectFilter;
@@ -417,8 +417,7 @@ public class ImportEOModelAction extends AppAction {
 
                     return true;
                 }
-            }
-            else if (f.isFile()) {
+            } else if (f.isFile()) {
                 File parent = f.getParentFile();
                 if (parent != null
                         && 
parent.getName().endsWith(EOModelFileFilter.EOM_SUFFIX)
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 b02d14dd0..3384d1073 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
@@ -137,7 +137,7 @@ class ProjectOpener extends JFileChooser {
     }
 
     private File getDefaultStartDir(Application application) {
-        List<File> recent = 
RecentProjectsPrefs.of(application.getPreferencesRepository()).getFiles();
+        List<File> recent = new 
RecentProjectsPrefs(application.getPreferencesRepository()).getFiles();
         if (!recent.isEmpty()) {
             File parent = recent.get(0).getParentFile();
             if (parent != null && parent.isDirectory()) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ShowLogConsoleAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ShowLogConsoleAction.java
index 37cdcbc6e..23da4b304 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ShowLogConsoleAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ShowLogConsoleAction.java
@@ -44,6 +44,6 @@ public class ShowLogConsoleAction extends AppAction {
     }
 
     private Boolean isConsoleShown() {
-        return 
LogConsolePrefs.of(app.getPreferencesRepository()).isShowConsole();
+        return new 
LogConsolePrefs(app.getPreferencesRepository()).isShowConsole();
     }
 }
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 ff4eac655..9eb94d967 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
@@ -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()).setNoDeletePrompt(neverPromptAgainBox.isSelected());
+            new 
GeneralPrefs(application.getPreferencesRepository()).setNoDeletePrompt(neverPromptAgainBox.isSelected());
         }
     }
 
@@ -72,7 +72,7 @@ public class ConfirmRemoveDialog {
     }
 
     public boolean shouldDelete(String name) {
-        if (allowAsking && 
!GeneralPrefs.of(application.getPreferencesRepository()).isNoDeletePrompt()) {
+        if (allowAsking && !new 
GeneralPrefs(application.getPreferencesRepository()).isNoDeletePrompt()) {
             showDialog(name);
         }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/datasource/DataSourceDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/datasource/DataSourceDialog.java
index 72885a72b..6e0591305 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/datasource/DataSourceDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/datasource/DataSourceDialog.java
@@ -84,7 +84,7 @@ public class DataSourceDialog extends ProjectDialog {
         refreshDataSources();
         initFavouriteDataSource();
 
-        DataMapPrefs dataMapPrefs = 
DataMapPrefs.of(app.getPreferencesRepository(), session.getSelectedDataMap());
+        DataMapPrefs dataMapPrefs = new 
DataMapPrefs(app.getPreferencesRepository(), session.getSelectedDataMap());
         if (dataMapPrefs.hasDbAdapter()) {
             getConnectionInfoFromPreferences().copyTo(connector);
         }
@@ -155,7 +155,7 @@ public class DataSourceDialog extends ProjectDialog {
     }
 
     private void initFavouriteDataSource() {
-        String favourite = 
GeneralPrefs.of(app.getPreferencesRepository()).getFavouriteDataSource();
+        String favourite = new 
GeneralPrefs(app.getPreferencesRepository()).getFavouriteDataSource();
         if (favourite != null && connectors.containsKey(favourite)) {
             setSelectedDataSource(favourite);
             dataSources.setSelectedItem(dataSourceKey);
@@ -163,7 +163,7 @@ public class DataSourceDialog extends ProjectDialog {
     }
 
     private DBConnector getConnectionInfoFromPreferences() {
-        DataMapPrefs dataMapPrefs = 
DataMapPrefs.of(app.getPreferencesRepository(), session.getSelectedDataMap());
+        DataMapPrefs dataMapPrefs = new 
DataMapPrefs(app.getPreferencesRepository(), session.getSelectedDataMap());
         DBConnector c = dataMapPrefs.getConnector();
         return c != null ? c : new DBConnector();
     }
@@ -197,7 +197,7 @@ public class DataSourceDialog extends ProjectDialog {
         this.canceled = canceled;
         dispose();
         if (!canceled) {
-            
GeneralPrefs.of(app.getPreferencesRepository()).setFavouriteDataSource(dataSourceKey);
+            new 
GeneralPrefs(app.getPreferencesRepository()).setFavouriteDataSource(dataSourceKey);
         }
     }
 
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 62c724eb4..bef78b2b1 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
@@ -106,7 +106,7 @@ public class DBGeneratorOptionsDialog extends ProjectDialog 
{
 
         this.connector = new DBConnector();
         this.connector.setAllowDataSourceFailure(true);
-        this.generatorDefaults = 
DBGeneratorPrefs.of(app.getPreferencesRepository(), session.project());
+        this.generatorDefaults = new 
DBGeneratorPrefs(app.getPreferencesRepository(), session.project());
 
         // create widgets — set initial state before wiring listeners so we
         // don't fire spurious refresh events during construction.
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorPrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorPrefs.java
index 35dbb2270..00e2f65ff 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorPrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorPrefs.java
@@ -22,12 +22,10 @@ import org.apache.cayenne.modeler.pref.PreferenceAdapter;
 import org.apache.cayenne.modeler.pref.PreferencesRepository;
 import org.apache.cayenne.project.Project;
 
-import java.util.prefs.Preferences;
-
 /**
  * Persistence for the DB Generator dialog's checkbox options.
  */
-public class DBGeneratorPrefs implements PreferenceAdapter {
+public class DBGeneratorPrefs extends PreferenceAdapter {
 
     static final String NODE = "dbGenerator";
 
@@ -37,14 +35,8 @@ public class DBGeneratorPrefs implements PreferenceAdapter {
     private static final String DROP_PK_PROPERTY = "dropPK";
     private static final String DROP_TABLES_PROPERTY = "dropTables";
 
-    public static DBGeneratorPrefs of(PreferencesRepository repository, 
Project project) {
-        return new DBGeneratorPrefs(repository.projectPref(project, NODE));
-    }
-
-    private final Preferences prefs;
-
-    private DBGeneratorPrefs(Preferences prefs) {
-        this.prefs = prefs;
+    public DBGeneratorPrefs(PreferencesRepository repository, Project project) 
{
+        super(repository.projectPref(project, NODE));
     }
 
     public boolean getCreateFK() {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
index f2e4c0b3d..53c274b0b 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
@@ -321,7 +321,7 @@ public class DbRelationshipDialog extends ProjectDialog {
         AutoCompletion.enable(targetCombo, session::getSelectedDataMap);
         targetColumn.setCellEditor(new CMComboBoxCellEditor(targetCombo));
 
-        CMTablePrefs.of(app.getPreferencesRepository(), "dbEntity/dbjoinTable")
+        new CMTablePrefs(app.getPreferencesRepository(), 
"dbEntity/dbjoinTable")
                 .bind(table, null, DbJoinTableModel.SOURCE);
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorDialog.java
index 3fe38bc63..0894c5eaf 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorDialog.java
@@ -53,7 +53,7 @@ public class ErrorDialog extends AppDialog {
         JEditorPane infoText = new JEditorPane("text/html", infoHTML(title));
         infoText.setBackground(pane.getBackground());
         infoText.setEditable(false);
-      
+
         infoText.addHyperlinkListener(e -> {
             if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                 UrlOpener.displayURL(e.getURL().toExternalForm());
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/logconsole/LogConsole.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/logconsole/LogConsole.java
index 3a814932c..297388e8d 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/logconsole/LogConsole.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/logconsole/LogConsole.java
@@ -158,7 +158,7 @@ public class LogConsole extends AppPanel implements 
LogAppender {
     }
 
     public void toggle() {
-        if 
(LogConsolePrefs.of(app.getPreferencesRepository()).toggleShowConsole()) {
+        if (new 
LogConsolePrefs(app.getPreferencesRepository()).toggleShowConsole()) {
             appear();
         } else {
             disappear();
@@ -166,7 +166,7 @@ public class LogConsole extends AppPanel implements 
LogAppender {
     }
 
     public void showConsoleIfNeeded() {
-        if 
(LogConsolePrefs.of(app.getPreferencesRepository()).isShowConsole()) {
+        if (new 
LogConsolePrefs(app.getPreferencesRepository()).isShowConsole()) {
             appear();
         }
     }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/logconsole/LogConsolePrefs.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/logconsole/LogConsolePrefs.java
index 171f12347..0e97d0fd5 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/logconsole/LogConsolePrefs.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/logconsole/LogConsolePrefs.java
@@ -22,21 +22,13 @@ package org.apache.cayenne.modeler.ui.logconsole;
 import org.apache.cayenne.modeler.pref.PreferenceAdapter;
 import org.apache.cayenne.modeler.pref.PreferencesRepository;
 
-import java.util.prefs.Preferences;
-
-public final class LogConsolePrefs implements PreferenceAdapter {
+public final class LogConsolePrefs extends PreferenceAdapter {
 
     static final String NODE = "logConsole";
     static final String SHOW_CONSOLE = "showLogConsole";
 
-    public static LogConsolePrefs of(PreferencesRepository repository) {
-        return new LogConsolePrefs(repository.appPref(NODE));
-    }
-
-    private final Preferences prefs;
-
-    private LogConsolePrefs(Preferences prefs) {
-        this.prefs = prefs;
+    public LogConsolePrefs(PreferencesRepository repository) {
+        super(repository.appPref(NODE));
     }
 
     public boolean isShowConsole() {
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 3d7bcb5db..2dc548994 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
@@ -54,7 +54,7 @@ public class ClasspathPrefsPanel extends AppPanel {
     public ClasspathPrefsPanel(Application app) {
         super(app);
 
-        this.entries = new 
ArrayList<>(ClasspathPrefs.of(app.getPreferencesRepository()).getEntries());
+        this.entries = new ArrayList<>(new 
ClasspathPrefs(app.getPreferencesRepository()).getEntries());
         this.tableModel = new ClasspathTableModel();
         this.table = new CMTable();
         this.table.setRowMargin(3);
@@ -70,7 +70,7 @@ public class ClasspathPrefsPanel extends AppPanel {
     }
 
     public void commit() {
-        ClasspathPrefs.of(app.getPreferencesRepository()).setEntries(entries);
+        new ClasspathPrefs(app.getPreferencesRepository()).setEntries(entries);
         app.refreshClassLoader();
     }
 
@@ -139,7 +139,7 @@ public class ClasspathPrefsPanel extends AppPanel {
         chooser.setDialogType(JFileChooser.OPEN_DIALOG);
         chooser.setAcceptAllFileFilterUsed(true);
 
-        CMFileChooserPrefs.of(app.getPreferencesRepository(), 
"classpath/lastDir").bind(chooser);
+        new CMFileChooserPrefs(app.getPreferencesRepository(), 
"classpath/lastDir").bind(chooser);
         if (filter != null) {
             chooser.addChoosableFileFilter(filter);
             chooser.setFileFilter(filter);
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPrefsPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPrefsPanel.java
index f57ec48d9..61f4c88ac 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPrefsPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPrefsPanel.java
@@ -55,7 +55,7 @@ public class GeneralPrefsPanel extends AppPanel {
         this.systemEncoding = Charset.defaultCharset().name();
         this.defaultLabel = systemEncoding + " (default)";
 
-        GeneralPrefs prefs = GeneralPrefs.of(app.getPreferencesRepository());
+        GeneralPrefs prefs = new GeneralPrefs(app.getPreferencesRepository());
 
         this.encodingChoices = new JComboBox<>(new 
DefaultComboBoxModel<>(encodingLabels()));
         selectEncoding(prefs.getEncoding());
@@ -70,7 +70,7 @@ public class GeneralPrefsPanel extends AppPanel {
     }
 
     public void commit() {
-        GeneralPrefs prefs = GeneralPrefs.of(app.getPreferencesRepository());
+        GeneralPrefs prefs = new GeneralPrefs(app.getPreferencesRepository());
         prefs.setEncoding(selectedEncoding());
         prefs.setAutoLoadProject(autoLoadProject.isSelected());
         prefs.setNoDeletePrompt(noDeletePrompt.isSelected());
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/ProjectView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/ProjectView.java
index 2aa707a01..3e131e64f 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/ProjectView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/ProjectView.java
@@ -102,7 +102,7 @@ public class ProjectView extends ProjectPanel {
 
         this.filterPopup = new TreeFilterPopup(treePanel);
 
-        CMSplitPanePrefs.of(app.getPreferencesRepository(), 
"project/splitPane").bind(splitPane, 300);
+        new CMSplitPanePrefs(app.getPreferencesRepository(), 
"project/splitPane").bind(splitPane, 300);
     }
 
     public EditorPanelView getEditorPanel() {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java
index 0282fc92d..aade11a88 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java
@@ -88,7 +88,7 @@ public class DataDomainCgenTab extends 
DataDomainGeneratorsTab<CgenConfiguration
         CgenConfiguration cgenConfiguration = new CgenConfiguration();
         cgenConfiguration.setDataMap(dataMap);
         cgenConfiguration.updateOutputPath(CgenOps.baseDir(session));
-        
cgenConfiguration.setEncoding(GeneralPrefs.of(app.getPreferencesRepository()).getEncoding());
+        cgenConfiguration.setEncoding(new 
GeneralPrefs(app.getPreferencesRepository()).getEncoding());
 
         cgenConfiguration.resolveExcludedEntities();
         cgenConfiguration.resolveExcludedEmbeddables();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/graph/action/SaveAsImageAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/graph/action/SaveAsImageAction.java
index 9fcae2bea..734567309 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/graph/action/SaveAsImageAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/graph/action/SaveAsImageAction.java
@@ -60,7 +60,7 @@ public class SaveAsImageAction extends AppAction {
                JFileChooser chooser = new JFileChooser();
                chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
 
-               CMFileChooserPrefs.of(app.getPreferencesRepository(), 
"saveAsImage/lastDir").bind(chooser);
+               new CMFileChooserPrefs(app.getPreferencesRepository(), 
"saveAsImage/lastDir").bind(chooser);
 
                chooser.setAcceptAllFileFilterUsed(false);
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
index 26b2dc32d..85ece23f9 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
@@ -447,7 +447,7 @@ public class CgenPanel extends ProjectPanel
             configuration.setRootPath(Utils.getRootPathForDataMap(map));
             configuration.updateOutputPath(basePath);
         }
-        
configuration.setEncoding(GeneralPrefs.of(app.getPreferencesRepository()).getEncoding());
+        configuration.setEncoding(new 
GeneralPrefs(app.getPreferencesRepository()).getEncoding());
         return configuration;
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditor.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditor.java
index 7e405306d..ba463f75d 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditor.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditor.java
@@ -256,8 +256,8 @@ public class TemplateEditor extends AppFrame {
     }
 
     private void bindGeometry() {
-        CMSplitPanePrefs.of(app.getPreferencesRepository(), 
"templateEditor/splitPane").bind(split, 600);
-        CMComponentGeometryPrefs.of(app.getPreferencesRepository(), 
"templateEditor/geometry").bind(this, 1200, 700);
+        new CMSplitPanePrefs(app.getPreferencesRepository(), 
"templateEditor/splitPane").bind(split, 600);
+        new CMComponentGeometryPrefs(app.getPreferencesRepository(), 
"templateEditor/geometry").bind(this, 1200, 700);
     }
 
     private void mapVelocityTokenMaker() {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
index 48f8ff414..a0eb5b9bf 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
@@ -27,19 +27,19 @@ import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.modeler.event.model.DataMapEvent;
 import org.apache.cayenne.modeler.pref.DataMapPrefs;
+import org.apache.cayenne.modeler.project.ProjectComparators;
+import org.apache.cayenne.modeler.project.ProjectSession;
+import org.apache.cayenne.modeler.toolkit.ProjectPanel;
 import org.apache.cayenne.modeler.toolkit.Renderers;
 import org.apache.cayenne.modeler.toolkit.checkbox.CMCheckBox;
 import org.apache.cayenne.modeler.toolkit.combobox.CMUndoableComboBox;
 import org.apache.cayenne.modeler.toolkit.text.CMUndoableTextField;
-import org.apache.cayenne.modeler.toolkit.ProjectPanel;
 import org.apache.cayenne.modeler.ui.action.LinkDataMapAction;
-import org.apache.cayenne.modeler.project.ProjectSession;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.main.catalog.CatalogUpdateDialog;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.main.locking.LockingUpdateDialog;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.main.pkg.PackageUpdateDialog;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.main.schema.SchemaUpdateDialog;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.main.superclass.SuperclassUpdateDialog;
-import org.apache.cayenne.modeler.project.ProjectComparators;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
 import org.apache.cayenne.util.Util;
 import org.apache.cayenne.validation.ValidationException;
@@ -241,7 +241,7 @@ public class DataMapMainView extends ProjectPanel {
         dataMap.setDefaultPackage(newDefaultPackage);
 
         // update class generation preferences
-        DataMapPrefs.of(app.getPreferencesRepository(), dataMap)
+        new DataMapPrefs(app.getPreferencesRepository(), dataMap)
                 .setSuperclassPackage(newDefaultPackage, 
DataMapPrefs.DEFAULT_SUPERCLASS_PACKAGE_SUFFIX);
 
         session.fireDataMapEvent(DataMapEvent.ofChange(this, dataMap));
@@ -331,6 +331,7 @@ public class DataMapMainView extends ProjectPanel {
         if (Util.nullSafeEquals(newName, oldName)) {
             return;
         }
+
         // completely new name, set new name for domain
         DataMapEvent e = DataMapEvent.ofChange(this, map, oldName);
         DataChannelDescriptor domain = (DataChannelDescriptor) 
session.project().getRootNode();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataNodeEditorPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataNodeEditorPanel.java
index fc2912340..5b6b4bee6 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataNodeEditorPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataNodeEditorPanel.java
@@ -230,7 +230,8 @@ public class DataNodeEditorPanel extends ProjectPanel {
         // passed validation, set value, then move prefs subtree to the new 
name...
         String oldName = node.getName();
         node.setName(newName);
-        DataNodePrefs.rename(app.getPreferencesRepository(), 
app.getFrame().getProjectSession().project(), oldName, newName);
+
+        new DataNodePrefs(app.getPreferencesRepository(), session.project(), 
oldName).rename(newName);
     }
 
     private DataNodePrefs nodePrefs() {
@@ -238,7 +239,7 @@ public class DataNodeEditorPanel extends ProjectPanel {
         if (selected == null) {
             throw new IllegalStateException("No DataNode selected");
         }
-        return DataNodePrefs.of(app.getPreferencesRepository(), 
app.getFrame().getProjectSession().project(), selected.getName());
+        return new DataNodePrefs(app.getPreferencesRepository(), 
session.project(), selected.getName());
     }
 
     private void dataSourceConfigAction() {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/jdbc/JDBCDataSourcePanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/jdbc/JDBCDataSourcePanel.java
index f8e4dbb09..a1adfea4e 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/jdbc/JDBCDataSourcePanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/jdbc/JDBCDataSourcePanel.java
@@ -158,7 +158,7 @@ public class JDBCDataSourcePanel extends DataSourcePanel {
 
         DataSourceDescriptor projectDataSourceDescriptor = 
getNode().getDataSourceDescriptor();
 
-        String key = DataNodePrefs.of(
+        String key = new DataNodePrefs(
                 app.getPreferencesRepository(),
                 frame.getProjectSession().project(),
                 getNode().getName()).getLocalDataSource();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbAttributePanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbAttributePanel.java
index 955b05b85..6060a49b7 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbAttributePanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbAttributePanel.java
@@ -185,7 +185,7 @@ public class DbAttributePanel extends JPanel implements 
DbEntityDisplayListener,
         TableColumn typeColumn = 
table.getColumnModel().getColumn(DbAttributeTableModel.DB_ATTRIBUTE_TYPE);
         typeColumn.setCellEditor(new CMComboBoxCellEditor(comboBox));
 
-        CMTablePrefs.of(session.app().getPreferencesRepository(), 
"dbEntity/attributeTable")
+        new CMTablePrefs(session.app().getPreferencesRepository(), 
"dbEntity/attributeTable")
                 .bind(table, null, DbAttributeTableModel.DB_ATTRIBUTE_NAME);
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbEntityPropertiesView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbEntityPropertiesView.java
index fb55c170b..9938f52a3 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbEntityPropertiesView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbEntityPropertiesView.java
@@ -71,7 +71,7 @@ public class DbEntityPropertiesView extends ProjectPanel 
implements DbEntityDisp
 
         splitPane.setOneTouchExpandable(true);
         splitPane.setResizeWeight(0.5);
-        CMSplitPanePrefs.of(app.getPreferencesRepository(), 
"dbEntity/splitPane").bind(splitPane, -1);
+        new CMSplitPanePrefs(app.getPreferencesRepository(), 
"dbEntity/splitPane").bind(splitPane, -1);
         add(splitPane);
 
         toolBar.setFloatable(false);
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbRelationshipPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbRelationshipPanel.java
index ca95137d0..0a1ac9e04 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbRelationshipPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbRelationshipPanel.java
@@ -193,7 +193,7 @@ public class DbRelationshipPanel extends JPanel implements 
DbEntityDisplayListen
         TableColumn toDepPkColumn = 
table.getColumnModel().getColumn(DbRelationshipTableModel.TO_DEPENDENT_KEY);
         toDepPkColumn.setCellRenderer(new CheckBoxCellRenderer());
 
-        CMTablePrefs.of(session.app().getPreferencesRepository(), 
"dbEntity/relationshipTable")
+        new CMTablePrefs(session.app().getPreferencesRepository(), 
"dbEntity/relationshipTable")
                 .bind(table, null, DbRelationshipTableModel.NAME);
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/attributes/EmbeddableAttributesView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/attributes/EmbeddableAttributesView.java
index 2b1d832c5..1e745680f 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/attributes/EmbeddableAttributesView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/attributes/EmbeddableAttributesView.java
@@ -171,7 +171,7 @@ public class EmbeddableAttributesView extends ProjectPanel 
implements
         AutoCompletion.enable(javaTypesCombo, false, true, 
session::getSelectedDataMap);
         typeColumn.setCellEditor(new CMComboBoxCellEditor(javaTypesCombo));
 
-        CMTablePrefs.of(app.getPreferencesRepository(), 
"embeddable/attributeTable")
+        new CMTablePrefs(app.getPreferencesRepository(), 
"embeddable/attributeTable")
                 .bind(table, null, 
EmbeddableAttributeTableModel.OBJ_ATTRIBUTE);
 
     }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/attrinfo/ObjAttributeInfoDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/attrinfo/ObjAttributeInfoDialog.java
index b11d8acab..ff21852d8 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/attrinfo/ObjAttributeInfoDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/attrinfo/ObjAttributeInfoDialog.java
@@ -411,7 +411,7 @@ public class ObjAttributeInfoDialog extends ProjectDialog 
implements TreeSelecti
                 
.getColumn(OverrideEmbeddableAttributeTableModel.DB_ATTRIBUTE_TYPE);
         dbAttrTypeColumn.setCellRenderer(renderer);
 
-        CMTablePrefs.of(app.getPreferencesRepository(), 
"objEntity/overrideAttributeTable")
+        new CMTablePrefs(app.getPreferencesRepository(), 
"objEntity/overrideAttributeTable")
                 .bind(overrideAttributeTable, null,
                         OverrideEmbeddableAttributeTableModel.OBJ_ATTRIBUTE);
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/callbacks/ObjEntityCallbacksView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/callbacks/ObjEntityCallbacksView.java
index 142ba9e19..03fd81a77 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/callbacks/ObjEntityCallbacksView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/callbacks/ObjEntityCallbacksView.java
@@ -219,7 +219,7 @@ public class ObjEntityCallbacksView extends ProjectPanel {
         }
 
         for (CMTable table : tables) {
-            CMTablePrefs.of(app.getPreferencesRepository(), 
"objEntity/callbackTable")
+            new CMTablePrefs(app.getPreferencesRepository(), 
"objEntity/callbackTable")
                     .bind(table, MIN_SIZES);
         }
     }
@@ -513,7 +513,7 @@ public class ObjEntityCallbacksView extends ProjectPanel {
 
         public void mouseDragged(MouseEvent e) {
             if (table.getColumnWidthChanged()) {
-                CMTablePrefs.of(app.getPreferencesRepository(), 
"objEntity/callbackTable")
+                new CMTablePrefs(app.getPreferencesRepository(), 
"objEntity/callbackTable")
                         .bind(table, MIN_SIZES);
                 for (CMTable nextTable : tables) {
                     if (!table.equals(nextTable)) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjAttributePanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjAttributePanel.java
index b054c4e04..806fdfd37 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjAttributePanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjAttributePanel.java
@@ -318,7 +318,7 @@ public class ObjAttributePanel extends JPanel implements 
ObjEntityDisplayListene
         
table.getColumnModel().getColumn(ObjAttributeTableModel.DB_ATTRIBUTE).setCellRenderer(new
 DbAttributePathComboBoxRenderer());
         
table.getColumnModel().getColumn(ObjAttributeTableModel.DB_ATTRIBUTE).setCellEditor(new
 DbAttributePathComboBoxEditor(session::getSelectedDataMap));
 
-        CMTablePrefs.of(session.app().getPreferencesRepository(), 
"objEntity/attributeTable")
+        new CMTablePrefs(session.app().getPreferencesRepository(), 
"objEntity/attributeTable")
                 .bind(table, minSizes, ObjAttributeTableModel.OBJ_ATTRIBUTE);
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjEntityPropertiesView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjEntityPropertiesView.java
index 9f365889a..717b2dd67 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjEntityPropertiesView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjEntityPropertiesView.java
@@ -67,7 +67,7 @@ public class ObjEntityPropertiesView extends ProjectPanel 
implements ObjEntityDi
 
         splitPane.setOneTouchExpandable(true);
         splitPane.setResizeWeight(0.5);
-        CMSplitPanePrefs.of(app.getPreferencesRepository(), 
"objEntity/splitPane").bind(splitPane, -1);
+        new CMSplitPanePrefs(app.getPreferencesRepository(), 
"objEntity/splitPane").bind(splitPane, -1);
         add(splitPane);
 
         toolBar.setFloatable(false);
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjRelationshipPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjRelationshipPanel.java
index 297918de0..53917a608 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjRelationshipPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjRelationshipPanel.java
@@ -276,7 +276,7 @@ public class ObjRelationshipPanel extends JPanel implements 
ObjEntityDisplayList
         deleteRulesCombo.setSelectedIndex(0); // Default to the first value
         col.setCellEditor(new CMComboBoxCellEditor(deleteRulesCombo));
 
-        CMTablePrefs.of(session.app().getPreferencesRepository(), 
"objEntity/relationshipTable")
+        new CMTablePrefs(session.app().getPreferencesRepository(), 
"objEntity/relationshipTable")
                 .bind(table, null, ObjRelationshipTableModel.REL_NAME);
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTab.java
index 45854a8a5..22aef111c 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTab.java
@@ -287,7 +287,7 @@ public class ProcedureParameterTab extends ProjectPanel 
implements ProcedurePara
         moveUp.setEnabled(false);
         moveDown.setEnabled(false);
 
-        CMTablePrefs.of(app.getPreferencesRepository(), 
"procedure/parameterTable").bind(table, null);
+        new CMTablePrefs(app.getPreferencesRepository(), 
"procedure/parameterTable").bind(table, null);
     }
 
     public void procedureParameterAdded(ProcedureParameterEvent e) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryOrderingTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryOrderingTab.java
index 01bc19698..79c10a1b6 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryOrderingTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryOrderingTab.java
@@ -81,7 +81,7 @@ public class SelectQueryOrderingTab extends ProjectPanel {
 
         //As of CAY-888 #3 main pane is now a JSplitPane. Top component is a 
bit larger.
         JSplitPane mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
-        CMSplitPanePrefs.of(app.getPreferencesRepository(), 
"selectQuery/orderingSplit").bind(mainPanel, defLocation);
+        new CMSplitPanePrefs(app.getPreferencesRepository(), 
"selectQuery/orderingSplit").bind(mainPanel, defLocation);
 
         mainPanel.setTopComponent(createEditorPanel());
         mainPanel.setBottomComponent(createSelectorPanel());
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplatePrefetchTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplatePrefetchTab.java
index 7c26515d8..7c99300dd 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplatePrefetchTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplatePrefetchTab.java
@@ -92,7 +92,7 @@ public class SQLTemplatePrefetchTab extends ProjectPanel {
 
         //As of CAY-888 #3 main pane is now a JSplitPane. Top component is a 
bit larger.
         JSplitPane mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
-        CMSplitPanePrefs.of(app.getPreferencesRepository(), 
"sqlTemplate/prefetchSplit").bind(mainPanel, defLocation);
+        new CMSplitPanePrefs(app.getPreferencesRepository(), 
"sqlTemplate/prefetchSplit").bind(mainPanel, defLocation);
 
         mainPanel.setTopComponent(createEditorPanel());
         mainPanel.setBottomComponent(createSelectorPanel());
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/welcome/WelcomeScreen.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/welcome/WelcomeScreen.java
index c0d9c3005..78c3a3b6e 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/welcome/WelcomeScreen.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/welcome/WelcomeScreen.java
@@ -126,7 +126,7 @@ public class WelcomeScreen extends AppPanel implements 
RecentFileListListener, R
 
     @Override
     public void recentFileListChanged() {
-        List<File> arr = 
RecentProjectsPrefs.of(app.getPreferencesRepository()).getFiles();
+        List<File> arr = new 
RecentProjectsPrefs(app.getPreferencesRepository()).getFiles();
         recentProjectsList.setModel(new RecentFileListModel(arr));
     }
 }

Reply via email to