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; + } }