You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2019/09/11 08:28:36 UTC

[cayenne] 02/02: CAY-2592 Modeler: make all datamaps selected in global cgen tab

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

ntimofeev pushed a commit to branch STABLE-4.1
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit fe34eb20785f470e353200db2950862ae37b4dbd
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Wed Sep 11 11:28:21 2019 +0300

    CAY-2592 Modeler: make all datamaps selected in global cgen tab
---
 .../cayenne/modeler/editor/GeneratorsPanel.java    | 24 ++++-----
 .../cayenne/modeler/editor/GeneratorsTab.java      |  4 +-
 .../modeler/editor/GeneratorsTabController.java    | 57 ++++++++++++++++------
 .../modeler/editor/cgen/domain/CgenTab.java        |  3 +-
 .../editor/cgen/domain/CgenTabController.java      | 20 +++-----
 .../editor/dbimport/domain/DbImportTab.java        |  3 +-
 .../dbimport/domain/DbImportTabController.java     |  7 +--
 7 files changed, 71 insertions(+), 47 deletions(-)

diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsPanel.java
index 5ea2242..24e63ec 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsPanel.java
@@ -35,30 +35,30 @@ import java.awt.BorderLayout;
 /**
  * @since 4.1
  */
-public class GeneratorsPanel extends JPanel {
+class GeneratorsPanel extends JPanel {
+
+    private final DataMap dataMap;
+    private final Class<?> type;
+    private final String icon;
 
     private JCheckBox checkConfig;
-    private JLabel dataMapLabel;
     private JButton toConfigButton;
-    private DataMap dataMap;
-    private Class type;
-    private String icon;
 
-    public GeneratorsPanel(DataMap dataMap, String icon, Class type) {
+    GeneratorsPanel(DataMap dataMap, String icon, Class<?> type) {
         this.type = type;
         this.icon = icon;
         this.dataMap = dataMap;
         initView();
     }
 
-    public void initView(){
+    private void initView(){
         setLayout(new BorderLayout());
         FormLayout layout = new FormLayout(
                 "left:pref, 4dlu, fill:70dlu, 3dlu, fill:120, 3dlu, fill:120", "");
         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
         this.checkConfig = new JCheckBox();
-        this.dataMapLabel = new JLabel(dataMap.getName());
-        this.dataMapLabel.setToolTipText(dataMap.getName());
+        JLabel dataMapLabel = new JLabel(dataMap.getName());
+        dataMapLabel.setToolTipText(dataMap.getName());
         DataChannelMetaData metaData = Application.getInstance().getMetaData();
         this.toConfigButton = new JButton("Edit Config");
         if(metaData.get(dataMap, type) == null) {
@@ -71,15 +71,15 @@ public class GeneratorsPanel extends JPanel {
         this.add(builder.getPanel(), BorderLayout.CENTER);
     }
 
-    public JCheckBox getCheckConfig() {
+    JCheckBox getCheckConfig() {
         return checkConfig;
     }
 
-    public JButton getToConfigButton() {
+    JButton getToConfigButton() {
         return toConfigButton;
     }
 
-    public DataMap getDataMap() {
+    DataMap getDataMap() {
         return dataMap;
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsTab.java
index 611905f..8f03ca7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsTab.java
@@ -40,11 +40,11 @@ import java.util.concurrent.ConcurrentMap;
 public class GeneratorsTab extends JPanel {
 
     protected ProjectController projectController;
-    private GeneratorsTabController additionalTabController;
+    private GeneratorsTabController<?> additionalTabController;
 
     private TopGeneratorPanel generationPanel;
 
-    public GeneratorsTab(ProjectController projectController, GeneratorsTabController additionalTabController, String icon, String text) {
+    public GeneratorsTab(ProjectController projectController, GeneratorsTabController<?> additionalTabController, String icon, String text) {
         this.projectController = projectController;
         this.additionalTabController = additionalTabController;
         this.generationPanel = new TopGeneratorPanel(icon);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsTabController.java
index 3f37978..8350998 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/GeneratorsTabController.java
@@ -27,10 +27,10 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
 import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.configuration.event.DataMapEvent;
+import org.apache.cayenne.configuration.event.DataMapListener;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
 import org.apache.cayenne.project.Project;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,28 +38,34 @@ import org.slf4j.LoggerFactory;
 /**
  * @since 4.1
  */
-public abstract class GeneratorsTabController {
+public abstract class GeneratorsTabController<T> implements DataMapListener {
 
-    public static Logger logObj = LoggerFactory.getLogger(ErrorDebugDialog.class);
-    public ProjectController projectController;
-    public GeneratorsTab view;
-    private Class type;
+    protected final static Logger LOGGER = LoggerFactory.getLogger(GeneratorsTabController.class);
 
-    public ConcurrentMap<DataMap, GeneratorsPanel> generatorsPanels;
-    public Set<DataMap> selectedDataMaps;
+    private final ProjectController projectController;
+    private final ConcurrentMap<DataMap, GeneratorsPanel> generatorsPanels;
+    private final Set<DataMap> selectedDataMaps;
+    private final Class<T> type;
+    private final boolean selectAllByDefault;
 
-    public GeneratorsTabController(Class type, ProjectController projectController) {
-        this.type = type;
+    protected GeneratorsTab view;
+
+    public GeneratorsTabController(ProjectController projectController, Class<T> type, boolean selectAllByDefault) {
         this.generatorsPanels = new ConcurrentHashMap<>();
         this.selectedDataMaps = new HashSet<>();
+        this.type = type;
+        this.selectAllByDefault = selectAllByDefault;
         this.projectController = projectController;
+        this.projectController.addDataMapListener(this);
     }
 
-    public String icon;
+    private boolean isSelectAllChecked() {
+        return view.getGenerationPanel().getSelectAll().isSelected();
+    }
 
     public abstract void runGenerators(Set<DataMap> dataMaps);
 
-    public void createPanels(){
+    void createPanels(){
         Collection<DataMap> dataMaps = getDataMaps();
         refreshSelectedMaps(dataMaps);
         generatorsPanels.clear();
@@ -74,7 +80,7 @@ public abstract class GeneratorsTabController {
                 currPanel.getCheckConfig().setSelected(true);
             }
         });
-        if(selectedDataMaps.isEmpty() && type == CgenConfiguration.class) {
+        if(selectedDataMaps.isEmpty() && selectAllByDefault) {
             GeneratorsTab.TopGeneratorPanel topGeneratorPanel = view.getGenerationPanel();
             topGeneratorPanel.getSelectAll().setSelected(true);
             topGeneratorPanel.getGenerateAll().setEnabled(true);
@@ -122,7 +128,7 @@ public abstract class GeneratorsTabController {
     public abstract void showConfig(DataMap dataMap);
 
     private void setGenerateButtonDisabled() {
-        if(selectedDataMaps.size() == 0) {
+        if(selectedDataMaps.isEmpty()) {
             view.getGenerationPanel().getGenerateAll().setEnabled(false);
         } else {
             view.getGenerationPanel().getGenerateAll().setEnabled(true);
@@ -153,4 +159,25 @@ public abstract class GeneratorsTabController {
     private void refreshSelectedMaps(Collection<DataMap> dataMaps) {
         selectedDataMaps.removeIf(dataMap -> !dataMaps.contains(dataMap));
     }
+
+    @Override
+    public void dataMapAdded(DataMapEvent e) {
+        GeneratorsPanel generatorPanel = new GeneratorsPanel(e.getDataMap(), "icon-datamap.png", type);
+        initListenersForPanel(generatorPanel);
+        generatorsPanels.put(e.getDataMap(), generatorPanel);
+        if(isSelectAllChecked()) {
+            generatorPanel.getCheckConfig().setSelected(true);
+            selectedDataMaps.add(e.getDataMap());
+        }
+    }
+
+    @Override
+    public void dataMapRemoved(DataMapEvent e) {
+        selectedDataMaps.remove(e.getDataMap());
+        generatorsPanels.remove(e.getDataMap());
+    }
+
+    @Override
+    public void dataMapChanged(DataMapEvent e) {
+    }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
index 40c7064..1858b3a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.modeler.editor.cgen.domain;
 
+import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.editor.GeneratorsTab;
 import org.apache.cayenne.modeler.editor.GeneratorsTabController;
@@ -30,7 +31,7 @@ import javax.swing.JOptionPane;
  */
 public class CgenTab extends GeneratorsTab {
 
-    public CgenTab(ProjectController projectController, GeneratorsTabController additionalTabController) {
+    public CgenTab(ProjectController projectController, GeneratorsTabController<CgenConfiguration> additionalTabController) {
         super(projectController, additionalTabController, "icon-gen_java.png", "Run class generation on selected datamaps.");
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
index ff4b53a..caa53d2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
@@ -42,10 +42,10 @@ import org.apache.cayenne.modeler.util.ModelerUtil;
 /**
  * @since 4.1
  */
-public class CgenTabController extends GeneratorsTabController {
+public class CgenTabController extends GeneratorsTabController<CgenConfiguration> {
 
     public CgenTabController(ProjectController projectController) {
-        super(CgenConfiguration.class, projectController);
+        super(projectController, CgenConfiguration.class, true);
         this.view = new CgenTab(projectController, this);
     }
 
@@ -68,7 +68,7 @@ public class CgenTabController extends GeneratorsTabController {
                 classGenerationAction.prepareArtifacts();
                 classGenerationAction.execute();
             } catch (Exception e) {
-                logObj.error("Error generating classes", e);
+                LOGGER.error("Error generating classes", e);
                 generationFail = true;
                 ((CgenTab)view).showErrorMessage(e.getMessage());
             }
@@ -84,26 +84,19 @@ public class CgenTabController extends GeneratorsTabController {
         cgenConfiguration.setDataMap(dataMap);
         Path basePath = Paths.get(ModelerUtil.initOutputFolder());
 
-        // no destination folder
-        if (basePath == null) {
-            JOptionPane.showMessageDialog(this.getView(), "Select directory for source files.");
-            return null;
-        }
-
         // no such folder
         if (!Files.exists(basePath)) {
             try {
                 Files.createDirectories(basePath);
             } catch (IOException e) {
-                JOptionPane.showMessageDialog(this.getView(), "Can't create directory. " +
-                        ". Select a different one.");
+                JOptionPane.showMessageDialog(getView(), "Can't create directory. Select a different one.");
                 return null;
             }
         }
 
         // not a directory
         if (!Files.isDirectory(basePath)) {
-            JOptionPane.showMessageDialog(this.getView(), basePath + " is not a valid directory.");
+            JOptionPane.showMessageDialog(getView(), basePath + " is not a valid directory.");
             return null;
         }
 
@@ -119,7 +112,8 @@ public class CgenTabController extends GeneratorsTabController {
 
     public void showConfig(DataMap dataMap) {
         if (dataMap != null) {
-            projectController.fireDataMapDisplayEvent(new DataMapDisplayEvent(this.getView(), dataMap, dataMap.getDataChannelDescriptor()));
+            DataMapDisplayEvent event = new DataMapDisplayEvent(getView(), dataMap, dataMap.getDataChannelDescriptor());
+            getProjectController().fireDataMapDisplayEvent(event);
         }
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTab.java
index 25313cf..20fa79c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTab.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.editor.dbimport.domain;
 
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.editor.GeneratorsTab;
 import org.apache.cayenne.modeler.editor.GeneratorsTabController;
@@ -27,7 +28,7 @@ import org.apache.cayenne.modeler.editor.GeneratorsTabController;
  */
 public class DbImportTab extends GeneratorsTab {
 
-    public DbImportTab(ProjectController projectController, GeneratorsTabController additionalTabController) {
+    public DbImportTab(ProjectController projectController, GeneratorsTabController<ReverseEngineering> additionalTabController) {
         super(projectController, additionalTabController, "icon-dbi-runImport.png", "Run reverse engineering on selected datamaps.");
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTabController.java
index b2514b0..779402e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTabController.java
@@ -31,10 +31,10 @@ import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
 /**
  * @since 4.1
  */
-public class DbImportTabController extends GeneratorsTabController {
+public class DbImportTabController extends GeneratorsTabController<ReverseEngineering> {
 
     public DbImportTabController(ProjectController projectController) {
-        super(ReverseEngineering.class, projectController);
+        super(projectController, ReverseEngineering.class, false);
         this.view = new DbImportTab(projectController, this);
     }
 
@@ -52,7 +52,8 @@ public class DbImportTabController extends GeneratorsTabController {
     @Override
     public void showConfig(DataMap dataMap) {
         if (dataMap != null) {
-            projectController.fireDataMapDisplayEvent(new DataMapDisplayEvent(this.getView(), dataMap, dataMap.getDataChannelDescriptor()));
+            DataMapDisplayEvent event = new DataMapDisplayEvent(getView(), dataMap, dataMap.getDataChannelDescriptor());
+            getProjectController().fireDataMapDisplayEvent(event);
         }
     }
 }