You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2026/04/19 15:48:02 UTC

(cayenne) 07/08: Modeler cleanup

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 7bc24c8e236a4c8aeacc751ebb7bc2a7327f3352
Author: Andrus Adamchik <an...@objectstyle.com>
AuthorDate: Sun Apr 19 09:16:21 2026 -0400

    Modeler cleanup
    
    removing ProjectController.setCurrentXyz. Object disolay changes should go through the "fire.." methods
---
 .../apache/cayenne/modeler/ProjectController.java  |  4 +-
 .../modeler/action/DBConnectionAwareAction.java    | 49 +++++++++---------
 .../modeler/action/GetDbConnectionAction.java      | 15 +++---
 .../cayenne/modeler/action/LoadDbSchemaAction.java |  7 ++-
 .../modeler/action/ReverseEngineeringAction.java   | 23 ++++-----
 .../dialog/db/load/DbImportProjectSaver.java       | 17 +------
 .../modeler/dialog/db/load/DbLoaderContext.java    | 58 ++++++----------------
 .../modeler/dialog/db/load/LoaderDelegate.java     |  6 +--
 8 files changed, 68 insertions(+), 111 deletions(-)

diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
index 6c935f5b8..39514db33 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
@@ -464,9 +464,7 @@ public class ProjectController extends CayenneController {
         return state.dataMap;
     }
 
-    public void setSelectedDataMap(DataMap dataMap) {
-        state.dataMap = dataMap;
-    }
+
 
     public ObjEntity getSelectedObjEntity() {
         return state.objEntity;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBConnectionAwareAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBConnectionAwareAction.java
index a372d9896..c80081203 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBConnectionAwareAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBConnectionAwareAction.java
@@ -19,8 +19,7 @@
 
 package org.apache.cayenne.modeler.action;
 
-import java.util.prefs.Preferences;
-
+import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.dialog.db.DataSourceWizard;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
@@ -41,18 +40,18 @@ public abstract class DBConnectionAwareAction extends CayenneAction {
         super(name, application);
     }
 
-    protected DBConnectionInfo getConnectionInfo(String title) {
-        DBConnectionInfo connectionInfo;
-        if (datamapPrefNotExist()) {
+    protected DBConnectionInfo getConnectionInfo(String title, DataMap dataMap) {
+
+        DBConnectionInfo connectionInfo = getConnectionInfoFromPreferences(dataMap);
+        if (connectionInfo == null) {
             DataSourceWizard connectWizard = getDataSourceWizard(title);
             if (connectWizard == null) {
                 return null;
             }
             connectionInfo = connectWizard.getConnectionInfo();
-            saveConnectionInfo(connectWizard);
-        } else {
-            connectionInfo = getConnectionInfoFromPreferences();
+            saveConnectionInfo(dataMap, connectWizard);
         }
+
         return connectionInfo;
     }
 
@@ -72,31 +71,29 @@ public abstract class DBConnectionAwareAction extends CayenneAction {
         return connectWizard;
     }
 
-    protected boolean datamapPrefNotExist() {
-        Preferences dataMapPreference = getProjectController().
-                getSelectedDataMapPreferences(getProjectController().getSelectedDataMap())
-                .getCurrentPreference();
-        return dataMapPreference == null || dataMapPreference.get(URL_PROPERTY, null) == null;
-    }
+    private DBConnectionInfo getConnectionInfoFromPreferences(DataMap dataMap) {
+
+        DataMapDefaults defaults = getProjectController().getSelectedDataMapPreferences(dataMap);
+        if (defaults == null
+                || defaults.getCurrentPreference() == null
+                || defaults.getCurrentPreference().get(URL_PROPERTY, null) == null) {
+            return null;
+        }
 
-    protected DBConnectionInfo getConnectionInfoFromPreferences() {
         DBConnectionInfo connectionInfo = new DBConnectionInfo();
-        DataMapDefaults dataMapDefaults = getProjectController()
-                .getSelectedDataMapPreferences(getProjectController().getSelectedDataMap());
-        connectionInfo.setDbAdapter(dataMapDefaults.getCurrentPreference().get(DB_ADAPTER_PROPERTY, null));
-        connectionInfo.setUrl(dataMapDefaults.getCurrentPreference().get(URL_PROPERTY, null));
-        connectionInfo.setUserName(dataMapDefaults.getCurrentPreference().get(USER_NAME_PROPERTY, null));
-        connectionInfo.setPassword(dataMapDefaults.getCurrentPreference().get(PASSWORD_PROPERTY, null));
-        connectionInfo.setJdbcDriver(dataMapDefaults.getCurrentPreference().get(JDBC_DRIVER_PROPERTY, null));
+        connectionInfo.setDbAdapter(defaults.getCurrentPreference().get(DB_ADAPTER_PROPERTY, null));
+        connectionInfo.setUrl(defaults.getCurrentPreference().get(URL_PROPERTY, null));
+        connectionInfo.setUserName(defaults.getCurrentPreference().get(USER_NAME_PROPERTY, null));
+        connectionInfo.setPassword(defaults.getCurrentPreference().get(PASSWORD_PROPERTY, null));
+        connectionInfo.setJdbcDriver(defaults.getCurrentPreference().get(JDBC_DRIVER_PROPERTY, null));
         return connectionInfo;
     }
 
-    protected void saveConnectionInfo(DataSourceWizard connectWizard) {
-        DataMapDefaults dataMapDefaults = getProjectController().
-                getSelectedDataMapPreferences(getProjectController().getSelectedDataMap());
+    protected void saveConnectionInfo(DataMap dataMap, DataSourceWizard connectWizard) {
+        DataMapDefaults dataMapDefaults = getProjectController().getSelectedDataMapPreferences(dataMap);
 
         String dbAdapter = connectWizard.getConnectionInfo().getDbAdapter();
-        if(dbAdapter != null) {
+        if (dbAdapter != null) {
             dataMapDefaults.getCurrentPreference().put(DB_ADAPTER_PROPERTY, dbAdapter);
         } else {
             dataMapDefaults.getCurrentPreference().remove(DB_ADAPTER_PROPERTY);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GetDbConnectionAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GetDbConnectionAction.java
index d870fea7e..e45a11a97 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GetDbConnectionAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GetDbConnectionAction.java
@@ -19,34 +19,37 @@
 
 package org.apache.cayenne.modeler.action;
 
-import java.awt.event.ActionEvent;
-
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.dialog.db.DataSourceWizard;
 
+import java.awt.event.ActionEvent;
+
 /**
  * @since 4.1
  */
 public class GetDbConnectionAction extends DBConnectionAwareAction {
 
-    public static final String DIALOG_TITLE = "Configure Connection to Database";
+    private static final String DIALOG_TITLE = "Configure Connection to Database";
     private static final String ACTION_NAME = "Configure Connection";
     private static final String ICON_NAME = "icon-dbi-config.png";
 
-    public GetDbConnectionAction(final Application application) {
+    public GetDbConnectionAction(Application application) {
         super(ACTION_NAME, application);
     }
 
+    @Override
     public String getIconName() {
         return ICON_NAME;
     }
 
     @Override
-    public void performAction(final ActionEvent e) {
+    public void performAction(ActionEvent e) {
         DataSourceWizard connectWizard = getDataSourceWizard(DIALOG_TITLE, new String[]{"Continue", "Cancel"});
         if (connectWizard == null) {
             return;
         }
-        saveConnectionInfo(connectWizard);
+        saveConnectionInfo(
+                application.getFrameController().getProjectController().getSelectedDataMap(),
+                connectWizard);
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
index 5a08e211d..45a999d49 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
@@ -65,7 +65,7 @@ public class LoadDbSchemaAction extends DBConnectionAwareAction {
     }
 
     public void loadDbSchema(TreePath tablePath) {
-        final DbImportView rootParent = ((DbImportView) draggableTreePanel.getParent().getParent());
+        DbImportView rootParent = ((DbImportView) draggableTreePanel.getParent().getParent());
         rootParent.getLoadDbSchemaProgress().setVisible(true);
         rootParent.getLoadDbSchemaButton().setEnabled(false);
         Thread thread = new Thread(() -> {
@@ -75,7 +75,10 @@ public class LoadDbSchemaAction extends DBConnectionAwareAction {
             draggableTreePanel.getMoveInvertButton().setEnabled(false);
             try {
 
-                DBConnectionInfo connectionInfo = getConnectionInfo("Load Db Schema");
+                DBConnectionInfo connectionInfo = getConnectionInfo(
+                        "Load Db Schema",
+                        application.getFrameController().getProjectController().getSelectedDataMap());
+
                 if (connectionInfo == null) {
                     return;
                 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
index 02a4cb5ac..5c294c592 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.modeler.action;
 
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.dialog.db.load.DbLoadResultDialog;
 import org.apache.cayenne.modeler.dialog.db.load.DbLoaderContext;
 import org.apache.cayenne.modeler.dialog.db.load.LoadDataMapTask;
@@ -62,22 +61,20 @@ public class ReverseEngineeringAction extends DBConnectionAwareAction {
         resetParams();
         dataMaps.addAll(dataMapSet);
         dataMapCount.set(dataMaps.size());
-        ProjectController projectController = Application.getInstance().getFrameController().getProjectController();
-        for (DataMap dataMap : dataMapSet) {
-            projectController.setSelectedDataMap(dataMap);
-            startImport();
-        }
+        dataMapSet.forEach(this::startImport);
     }
 
-    private void startImport() {
-        DbLoaderContext context = new DbLoaderContext(application.getMetaData());
+    private void startImport(DataMap dataMap) {
+        DbLoaderContext context = new DbLoaderContext(
+                getProjectController(),
+                application.getMetaData(),
+                dataMap);
 
-        DBConnectionInfo connectionInfo = getConnectionInfo(DIALOG_TITLE);
+        DBConnectionInfo connectionInfo = getConnectionInfo(DIALOG_TITLE, dataMap);
         if (connectionInfo == null) {
             return;
         }
 
-        context.setProjectController(getProjectController());
         try {
             context.setConnection(connectionInfo.makeDataSource(getApplication().getClassLoadingService()).getConnection());
         } catch (SQLException ex) {
@@ -97,7 +94,7 @@ public class ReverseEngineeringAction extends DBConnectionAwareAction {
             return;
         }
 
-        DbImportController dbImportController = Application.getInstance().getFrameController().getDbImportController();
+        DbImportController dbImportController = application.getFrameController().getDbImportController();
         DbLoadResultDialog dbLoadResultDialog = dbImportController.createDialog();
 
         runLoaderInThread(context, () -> {
@@ -120,9 +117,9 @@ public class ReverseEngineeringAction extends DBConnectionAwareAction {
     @Override
     public void performAction(ActionEvent event) {
         resetParams();
-        dataMaps.add(Application.getInstance().getFrameController().getProjectController().getSelectedDataMap());
+        dataMaps.add(application.getFrameController().getProjectController().getSelectedDataMap());
         dataMapCount.set(dataMaps.size());
-        startImport();
+        startImport(application.getFrameController().getProjectController().getSelectedDataMap());
     }
 
     private void resetParams() {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbImportProjectSaver.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbImportProjectSaver.java
index c33361596..d850e45f0 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbImportProjectSaver.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbImportProjectSaver.java
@@ -19,7 +19,6 @@
 package org.apache.cayenne.modeler.dialog.db.load;
 
 import org.apache.cayenne.configuration.ConfigurationNameMapper;
-import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.event.DataMapEvent;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.map.DataMap;
@@ -51,20 +50,8 @@ public class DbImportProjectSaver implements ProjectSaver {
     public void save(Project project) {
 
         DataMap dataMap = (DataMap) project.getRootNode();
-
-        if (projectController.getSelectedDataMap() != null) {
-            projectController.fireDataMapEvent(new DataMapEvent(Application.getFrame(), dataMap, MapEvent.REMOVE));
-            projectController.fireDataMapEvent(new DataMapEvent(Application.getFrame(), dataMap, MapEvent.ADD));
-        } else {
-            DataChannelDescriptor currentDomain = (DataChannelDescriptor) projectController.getProject().getRootNode();
-            Resource baseResource = currentDomain.getConfigurationSource();
-            // a new DataMap, so need to set configuration source for it
-            if (baseResource != null) {
-                Resource dataMapResource = baseResource.getRelativeResource(nameMapper.configurationLocation(dataMap));
-                dataMap.setConfigurationSource(dataMapResource);
-            }
-            projectController.addDataMap(Application.getFrame(), dataMap);
-        }
+        projectController.fireDataMapEvent(new DataMapEvent(Application.getFrame(), dataMap, MapEvent.REMOVE));
+        projectController.fireDataMapEvent(new DataMapEvent(Application.getFrame(), dataMap, MapEvent.ADD));
     }
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
index 00703081f..4a819ae42 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
@@ -19,14 +19,7 @@
 
 package org.apache.cayenne.modeler.dialog.db.load;
 
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-import java.io.File;
-import java.sql.Connection;
-
-import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.xml.DataChannelMetaData;
-import org.apache.cayenne.dbsync.naming.NameBuilder;
 import org.apache.cayenne.dbsync.reverse.dbimport.DbImportConfiguration;
 import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
 import org.apache.cayenne.dbsync.reverse.dbload.DbLoaderDelegate;
@@ -41,6 +34,10 @@ import org.apache.cayenne.util.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.swing.*;
+import java.io.File;
+import java.sql.Connection;
+
 /**
  * @since 4.0
  */
@@ -48,34 +45,27 @@ public class DbLoaderContext {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(DbLoaderContext.class);
 
+    private final ProjectController projectController;
+    private final DataMap dataMap;
+    private final DataChannelMetaData dataChannelMetaData;
+
     private DbImportConfiguration config;
     private Connection connection;
-    private ProjectController projectController;
-    private boolean existingMap;
-    private DataMap dataMap;
     private boolean stopping;
     private String loadStatusNote;
     private volatile boolean isInterrupted;
 
-    private DataChannelMetaData metaData;
-
-    public DbLoaderContext(DataChannelMetaData metaData) {
-        this.metaData = metaData;
+    public DbLoaderContext(ProjectController projectController, DataChannelMetaData dataChannelMetaData, DataMap dataMap) {
+        this.projectController = projectController;
+        this.dataChannelMetaData = dataChannelMetaData;
+        this.dataMap = dataMap;
     }
 
-    DataMap getDataMap() {
+    public DataMap getDataMap() {
         return dataMap;
     }
 
-    boolean isExistingDataMap() {
-        return existingMap;
-    }
-
-    public void setProjectController(ProjectController projectController) {
-        this.projectController = projectController;
-    }
-
-    ProjectController getProjectController() {
+    public ProjectController getProjectController() {
         return projectController;
     }
 
@@ -99,10 +89,6 @@ public class DbLoaderContext {
         return stopping;
     }
 
-    public DataChannelMetaData getMetaData() {
-        return metaData;
-    }
-
     void setStopping(boolean stopping) {
         this.stopping = stopping;
     }
@@ -131,7 +117,7 @@ public class DbLoaderContext {
             return false;
         }
         // Build reverse engineering from metadata and dialog values
-        ReverseEngineering metaReverseEngineering = metaData.get(getProjectController().getSelectedDataMap(), ReverseEngineering.class);
+        ReverseEngineering metaReverseEngineering = dataChannelMetaData.get(dataMap, ReverseEngineering.class);
         if(metaReverseEngineering == null) {
             return false;
         }
@@ -192,23 +178,11 @@ public class DbLoaderContext {
     }
 
     private void prepareDataMap() {
-        dataMap = getProjectController().getSelectedDataMap();
-        existingMap = dataMap != null;
-
-        if (!existingMap) {
-            ConfigurationNode root = getProjectController().getProject().getRootNode();
-            dataMap = new DataMap();
-            dataMap.setName(NameBuilder.builder(dataMap, root).name());
-        }
-        if (dataMap.getConfigurationSource() != null) {
+        if (this.dataMap.getConfigurationSource() != null) {
             getConfig().setTargetDataMap(new File(dataMap.getConfigurationSource().getURL().getPath()));
         }
     }
 
-    public void processWarn(final Throwable th, final String message) {
-        LOGGER.warn(message, Util.unwindException(th));
-    }
-
     public void processException(final Throwable th, final String message) {
         LOGGER.info("Exception on reverse engineering", Util.unwindException(th));
         isInterrupted = true;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/LoaderDelegate.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/LoaderDelegate.java
index e515088ca..dba94f895 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/LoaderDelegate.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/LoaderDelegate.java
@@ -29,7 +29,7 @@ import org.apache.cayenne.modeler.Application;
 
 final class LoaderDelegate extends DefaultDbLoaderDelegate {
 
-    private DbLoaderContext context;
+    private final DbLoaderContext context;
 
     LoaderDelegate(DbLoaderContext dbLoaderContext) {
         this.context = dbLoaderContext;
@@ -44,9 +44,7 @@ final class LoaderDelegate extends DefaultDbLoaderDelegate {
     @Override
     public void dbEntityRemoved(DbEntity entity) {
         checkCanceled();
-        if (context.isExistingDataMap()) {
-            context.getProjectController().fireDbEntityEvent(new EntityEvent(Application.getFrame(), entity, MapEvent.REMOVE));
-        }
+        context.getProjectController().fireDbEntityEvent(new EntityEvent(Application.getFrame(), entity, MapEvent.REMOVE));
     }
 
     @Override