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 2020/01/29 11:00:42 UTC

[cayenne] 02/02: Update code generation UI

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

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

commit 0ff24bf8703902d0df6e60f2389e79c1653f111f
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Wed Jan 29 13:59:27 2020 +0300

    Update code generation UI
---
 .../modeler/editor/cgen/ClassesTabController.java  | 33 ++++----
 .../modeler/editor/cgen/ClassesTabPanel.java       |  2 +-
 .../editor/cgen/CodeGeneratorController.java       |  4 +-
 .../editor/cgen/CodeGeneratorControllerBase.java   | 90 ++++++++++++----------
 .../apache/cayenne/swing/ImageRendererColumn.java  |  7 +-
 5 files changed, 72 insertions(+), 64 deletions(-)

diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java
index e8730f6..0739a69 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java
@@ -26,6 +26,7 @@ import org.apache.cayenne.swing.ObjectBinding;
 import org.apache.cayenne.swing.TableBindingBuilder;
 
 import javax.swing.JLabel;
+import javax.swing.table.TableColumnModel;
 import java.awt.Component;
 
 /**
@@ -38,11 +39,11 @@ public class ClassesTabController extends CayenneController {
 
     private BindingBuilder builder;
 
-    public ClassesTabController(CodeGeneratorControllerBase parent) {
+    public ClassesTabController(CodeGeneratorController parent) {
         super(parent);
 
         this.view = new ClassesTabPanel();
-        builder = new BindingBuilder(getApplication().getBindingFactory(), this);
+        this.builder = new BindingBuilder(getApplication().getBindingFactory(), this);
     }
 
     public void startup(){
@@ -50,8 +51,8 @@ public class ClassesTabController extends CayenneController {
         classSelectedAction();
     }
 
-    protected CodeGeneratorControllerBase getParentController() {
-        return (CodeGeneratorControllerBase) getParent();
+    protected CodeGeneratorController getParentController() {
+        return (CodeGeneratorController) getParent();
     }
 
     public Component getView() {
@@ -77,14 +78,16 @@ public class ClassesTabController extends CayenneController {
                 "XXXXXXXXXXXXXXXXXXXXXXXXXX");
 
         tableBuilder.addColumn(
-                "Comments, Warnings",
+                "",
                 "parent.getProblem(#item)",
                 String.class,
                 false,
-                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
+                "XX");
 
         this.tableBinding = tableBuilder.bindToTable(view.getTable(), "parent.classes");
-        view.getTable().getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
+        TableColumnModel columnModel = view.getTable().getColumnModel();
+        columnModel.getColumn(1).setCellRenderer(new ImageRendererColumn());
+        columnModel.getColumn(2).setCellRenderer(new ImageRendererColumn());
     }
 
     public boolean isSelected() {
@@ -103,17 +106,10 @@ public class ClassesTabController extends CayenneController {
         int selectedCount = getParentController().getSelectedEntitiesSize()
                 + getParentController().getSelectedEmbeddablesSize()
                 + (getParentController().isDataMapSelected() ? 1 : 0);
-        if(selectedCount == 0) {
-            getParentController().enableGenerateButton(false);
-        } else {
-            getParentController().enableGenerateButton(true);
-        }
-        if (selectedCount < getParentController().getClasses().size()) {
-            ((CodeGeneratorPane)parent.getView()).getCheckAll().setSelected(false);
-        }
-        else if (selectedCount == getParentController().getClasses().size()) {
-            ((CodeGeneratorPane)parent.getView()).getCheckAll().setSelected(true);
-        }
+        int totalClasses = getParentController().getClasses().size();
+
+        getParentController().enableGenerateButton(selectedCount != 0);
+        getParentController().getView().getCheckAll().setSelected(selectedCount >= totalClasses);
         getParentController().updateSelectedEntities();
     }
 
@@ -121,6 +117,7 @@ public class ClassesTabController extends CayenneController {
      * An action that updates entity check boxes in response to the Select All state
      * change.
      */
+    @SuppressWarnings("unused")
     public void checkAllAction() {
         if (getParentController().updateSelection(((CodeGeneratorPane)parent.getView()).getCheckAll().isSelected() ? o -> true : o -> false)) {
             tableBinding.updateView();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java
index a4a76f7..c00ce4b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java
@@ -44,7 +44,7 @@ public class ClassesTabPanel extends JPanel {
 
         // set some minimal preferred size, so that it is smaller than other forms used in
         // the dialog... this way we get the right automated overall size
-        tablePanel.setPreferredSize(new Dimension(530, 200));
+        tablePanel.setPreferredSize(new Dimension(300, 200));
 
         setLayout(new BorderLayout());
         add(tablePanel, BorderLayout.CENTER);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
index fe03397..03caae6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
@@ -68,7 +68,7 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase impleme
         super(parent, projectController);
         this.classesSelector = new ClassesTabController(this);
         this.generatorSelector = new GeneratorTabController(this);
-        view = new CodeGeneratorPane(generatorSelector.getView(), classesSelector.getView());
+        this.view = new CodeGeneratorPane(generatorSelector.getView(), classesSelector.getView());
         this.prevGeneratorController = new ConcurrentHashMap<>();
         initBindings();
         initListeners();
@@ -110,7 +110,7 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase impleme
     }
 
     @Override
-    public Component getView() {
+    public CodeGeneratorPane getView() {
         return view;
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
index 5b3d081..7d137a8 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
@@ -59,6 +59,7 @@ import org.apache.cayenne.validation.ValidationResult;
  */
 public abstract class CodeGeneratorControllerBase extends CayenneController {
 
+    protected static Icon errorIcon = ModelerUtil.buildIcon("icon-error.png");
     public static final String SELECTED_PROPERTY = "selected";
 
     protected DataMap dataMap;
@@ -272,34 +273,21 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         return selected;
     }
 
-    /**
-     * Returns the first encountered validation problem for an antity matching the name or
-     * null if the entity is valid or the entity is not present.
-     */
-    public String getProblem(Object obj) {
-
-        String name = null;
-
-        if (obj instanceof ObjEntity) {
-            name = ((ObjEntity) obj).getName();
-        }
-        else if (obj instanceof Embeddable) {
-            name = ((Embeddable) obj).getClassName();
-        }
-
-        if (validation == null) {
-            return null;
-        }
-
-        List failures = validation.getFailures(name);
-        if (failures.isEmpty()) {
-            return null;
+    private void updateArtifactGenerationMode(Object classObj, boolean selected) {
+        DataMap dataMap = (DataMap) classObj;
+        CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(dataMap, CgenConfiguration.class);
+        if(selected) {
+            cgenConfiguration.setArtifactsGenerationMode("all");
+        } else {
+            cgenConfiguration.setArtifactsGenerationMode("entity");
         }
-
-        return ((ValidationFailure) failures.get(0)).getDescription();
     }
 
     public boolean isSelected() {
+        return isSelected(currentClass);
+    }
+
+    public boolean isSelected(Object currentClass) {
         if (currentClass instanceof ObjEntity) {
             return selectedEntities
                     .contains(((ObjEntity) currentClass).getName());
@@ -316,6 +304,10 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
     }
 
     public void setSelected(boolean selectedFlag) {
+        setSelected(currentClass, selectedFlag);
+    }
+
+    public void setSelected(Object currentClass, boolean selectedFlag) {
         if (currentClass == null) {
             return;
         }
@@ -357,14 +349,33 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         }
     }
 
-    private void updateArtifactGenerationMode(Object classObj, boolean selected) {
-        DataMap dataMap = (DataMap) classObj;
-        CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(dataMap, CgenConfiguration.class);
-        if(selected) {
-            cgenConfiguration.setArtifactsGenerationMode("all");
-        } else {
-            cgenConfiguration.setArtifactsGenerationMode("entity");
+    /**
+     * Returns the first encountered validation problem for an antity matching the name or
+     * null if the entity is valid or the entity is not present.
+     */
+    public JLabel getProblem(Object obj) {
+        String name = null;
+        if (obj instanceof ObjEntity) {
+            name = ((ObjEntity) obj).getName();
+        } else if (obj instanceof Embeddable) {
+            name = ((Embeddable) obj).getClassName();
         }
+
+        ValidationFailure validationFailure = null;
+        if (validation != null) {
+            List<ValidationFailure> failures = validation.getFailures(name);
+            if (!failures.isEmpty()) {
+                validationFailure = failures.get(0);
+            }
+        }
+
+        JLabel labelIcon = new JLabel();
+        labelIcon.setVisible(true);
+        if(validationFailure != null) {
+            labelIcon.setIcon(errorIcon);
+            labelIcon.setToolTipText(validationFailure.getDescription());
+        }
+        return labelIcon;
     }
 
     public JLabel getItemName(Object obj) {
@@ -387,6 +398,14 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         return labelIcon;
     }
 
+    public Object getCurrentClass() {
+        return currentClass;
+    }
+
+    public void setCurrentClass(Object currentClass) {
+        this.currentClass = currentClass;
+    }
+
     public void updateSelectedEntities(){
         updateEntities();
         updateEmbeddables();
@@ -465,14 +484,6 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         return projectController;
     }
 
-    public Object getCurrentClass() {
-        return currentClass;
-    }
-
-    public void setCurrentClass(Object currentClass) {
-        this.currentClass = currentClass;
-    }
-
     public boolean isInitFromModel() {
         return initFromModel;
     }
@@ -481,7 +492,6 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         this.initFromModel = initFromModel;
     }
 
-
     public abstract void enableGenerateButton(boolean enabled);
 
     void removeFromSelectedEntities(ObjEntity objEntity) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
index 01ed924..11ea7ed 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
@@ -37,10 +37,11 @@ public class ImageRendererColumn extends DefaultTableCellRenderer {
     public Component getTableCellRendererComponent(JTable table, Object value,
             boolean isSelected, boolean hasFocus, int row, int column) {
         super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
-        setText(((JLabel) value).getText());
+        JLabel label = (JLabel) value;
+        setText(label.getText());
+        setIcon(label.getIcon());
+        setToolTipText(label.getToolTipText());
         setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
-        Icon icon = ((JLabel) value).getIcon();
-        setIcon(icon);
         return this;
     }
 }