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


The following commit(s) were added to refs/heads/master by this push:
     new fc020cdc5 CAY-2786 OutputDir incorrect work fix
     new 8725b2658 Merge pull request #551 from 
Ivan-nikitko/CAY-2786_outputDir_fix
fc020cdc5 is described below

commit fc020cdc5d6afceecd60acb3b362f99060684746
Author: Ivan Nikitka <nikitko.i...@gmail.com>
AuthorDate: Sun Dec 11 12:25:01 2022 +0100

    CAY-2786 OutputDir incorrect work fix
---
 .../cayenne/modeler/editor/cgen/ClassesTabController.java  |  4 ++--
 .../modeler/editor/cgen/CodeGeneratorController.java       |  5 +++--
 .../cayenne/modeler/editor/cgen/GeneratorController.java   |  1 +
 .../modeler/editor/cgen/GeneratorControllerPanel.java      | 14 +++++++++++++-
 .../apache/cayenne/modeler/editor/cgen/SelectionModel.java |  4 ++++
 .../java/org/apache/cayenne/modeler/util/TextAdapter.java  |  5 +++++
 6 files changed, 28 insertions(+), 5 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 78d7414bc..656c7db20 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
@@ -122,7 +122,7 @@ public class ClassesTabController extends CayenneController 
{
                 + (getParentController().isDataMapSelected() ? 1 : 0);
         int totalClasses = getParentController().getClasses().size();
         checkBoxHeader.setSelected(selectedCount >= totalClasses);
-        getParentController().enableGenerateButton(selectedCount != 0);
+        getParentController().updateGenerateButton();
         getParentController().updateSelectedEntities();
         
getParentController().getStandardModeController().updateTemplateEditorButtons();
         view.repaint();
@@ -138,7 +138,7 @@ public class ClassesTabController extends CayenneController 
{
         if (getParentController().updateSelection(checkBoxHeader.isSelected() 
? o -> true : o -> false)) {
             tableBinding.updateView();
             getParentController().updateSelectedEntities();
-            
getParentController().enableGenerateButton(checkBoxHeader.isSelected());
+            getParentController().updateGenerateButton();
             
getParentController().getStandardModeController().updateTemplateEditorButtons();
         }
     }
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 9eab1bfe1..fa50c6685 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
@@ -262,8 +262,9 @@ public class CodeGeneratorController extends 
CayenneController implements ObjEnt
         }
     }
 
-    public void enableGenerateButton(boolean enable) {
-        view.getGenerateButton().setEnabled(enable);
+    public void updateGenerateButton(){
+        boolean isOutputPathValid = 
standardModeController.getView().getOutputFolder().isDataValid();
+        view.getGenerateButton().setEnabled(!selectionModel.isModelEmpty()&& 
isOutputPathValid);
     }
 
     private void prepareClasses(DataMap dataMap) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java
index af69dcee2..f750de744 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java
@@ -70,6 +70,7 @@ public abstract class GeneratorController extends 
CayenneController {
             
getParentController().setCurrentClass(cgenConfiguration.getDataMap());
             getParentController().setSelected(true);
         }
+        getView().getOutputFolder().updateModel();
     }
 
     public abstract void updateConfiguration(CgenConfiguration 
cgenConfiguration);
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
index 794643e2c..715b459bb 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
@@ -27,6 +27,7 @@ import org.apache.cayenne.validation.ValidationException;
 import javax.swing.JButton;
 import javax.swing.JPanel;
 import javax.swing.JTextField;
+import java.nio.file.InvalidPathException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
@@ -49,11 +50,22 @@ public class GeneratorControllerPanel extends JPanel {
             protected void updateModel(String text) throws ValidationException 
{
                 CgenConfiguration cgenByDataMap = getCgenConfig();
                 if (cgenByDataMap != null) {
-                    Path path = Paths.get(text);
+                    Path path;
+                    try {
+                        path = Paths.get(text);
+                    } catch (InvalidPathException e) {
+                        isDataValid = false;
+                        codeGeneratorController.updateGenerateButton();
+                        throw new ValidationException("An invalid path has 
been detected. It cannot be saved or used until it is corrected.");
+                    }
                     if (cgenByDataMap.getRootPath() == null && 
!path.isAbsolute()) {
+                        isDataValid =false;
+                        codeGeneratorController.updateGenerateButton();
                         throw new ValidationException("You should save project 
to use relative path as an output directory.");
                     }
                     cgenByDataMap.updateOutputPath(path);
+                    isDataValid = true;
+                    codeGeneratorController.updateGenerateButton();
                     checkConfigDirty();
                 }
             }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/SelectionModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/SelectionModel.java
index c558e1438..0104c1c4d 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/SelectionModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/SelectionModel.java
@@ -105,6 +105,10 @@ class SelectionModel {
         return modified;
     }
 
+    boolean isModelEmpty() {
+        return (getSelectedEntitiesCount() == 0 && 
getSelecetedEmbeddablesCount() == 0 && getSelectedDataMapsCount() == 0);
+    }
+
     List<Embeddable> getSelectedEmbeddables(Collection<ConfigurationNode> 
classes) {
         List<Embeddable> selected = new 
ArrayList<>(selectedEmbeddables.size());
         for (Object classObj : classes) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/TextAdapter.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/TextAdapter.java
index f96f419b3..a22a7713c 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/TextAdapter.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/TextAdapter.java
@@ -51,6 +51,7 @@ public abstract class TextAdapter {
     protected UndoableEditListener undoableListener;
 
     protected JTextComponent textComponent;
+    protected boolean isDataValid;
 
     public TextAdapter(JTextField textField) {
         this(textField, true, false, true);
@@ -176,4 +177,8 @@ public abstract class TextAdapter {
         textComponent.setBackground(defaultBGColor);
         textComponent.setToolTipText(defaultToolTip);
     }
+
+    public boolean isDataValid() {
+        return isDataValid;
+    }
 }

Reply via email to