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 a4502115b CAY-2785 Modeler: improve folder selection for cgen  - 
refactor output-dir related methods in cgen
a4502115b is described below

commit a4502115bd85fc3ec7d2f392b65c66f171beb372
Author: Nikita Timofeev <stari...@gmail.com>
AuthorDate: Wed Dec 7 16:51:28 2022 +0300

    CAY-2785 Modeler: improve folder selection for cgen
     - refactor output-dir related methods in cgen
---
 .../apache/cayenne/tools/CayenneGeneratorTask.java |  2 +-
 .../org/apache/cayenne/gen/CgenConfiguration.java  | 43 ++++++++--------------
 .../apache/cayenne/gen/ClassGenerationAction.java  |  4 +-
 .../apache/cayenne/gen/xml/CgenConfigHandler.java  |  2 +-
 .../apache/cayenne/gen/xml/CgenSaverDelegate.java  |  6 +--
 .../cayenne/gen/BaseTemplatesGenerationTest.java   |  2 +-
 .../apache/cayenne/gen/CgenConfigurationTest.java  | 43 +++++++++-------------
 .../cayenne/gen/ClassGenerationActionTest.java     |  5 ++-
 .../cayenne/gen/xml/CgenSaverDelegateTest.java     |  2 +-
 .../java/org/apache/cayenne/tools/CgenTask.java    |  6 ++-
 .../apache/cayenne/tools/CayenneGeneratorMojo.java |  4 +-
 .../editor/cgen/GeneratorControllerPanel.java      | 10 ++---
 12 files changed, 57 insertions(+), 72 deletions(-)

diff --git 
a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java 
b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index fda3473f2..9fd856ed2 100644
--- 
a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ 
b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -185,7 +185,7 @@ public class CayenneGeneratorTask extends CayenneTask {
         CgenConfiguration cgenConfiguration = new CgenConfiguration();
         cgenConfiguration.setDataMap(dataMap);
         if(destDir != null) {
-            cgenConfiguration.setRelativePath(destDir.toPath());
+            cgenConfiguration.updateOutputPath(destDir.toPath());
         }
         cgenConfiguration.setEncoding(encoding != null ? encoding : 
cgenConfiguration.getEncoding());
         cgenConfiguration.setMakePairs(makepairs != null ? makepairs : 
cgenConfiguration.isMakePairs());
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
index a09bec15a..e550f7026 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.gen;
 
 import java.io.Serializable;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -184,8 +183,8 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
     }
 
     /**
-     * TODO: this should be used in loadin and sa
      * @param rootProjectPath root path for the Cayenne project this config 
relates to
+     * @see #updateOutputPath(Path)
      */
     public void setRootPath(Path rootProjectPath) {
         if (!Objects.requireNonNull(rootProjectPath).isAbsolute()) {
@@ -194,39 +193,20 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
         this.rootProjectPath = rootProjectPath;
     }
 
-    /**
-     * Directly set relative (to {@code rootProjectPath}) output directory
-     *
-     * @param relPath to set
-     * @since 5.0 renamed from {@code setRelPath()}*
-     */
-    public void setRelativePath(Path relPath) {
-        this.cgenOutputRelativePath = relPath;
-    }
-
     /**
      * @return cgen output relative path
-     * TODO: used only it tests, maybe should be hidden completely
      */
     public Path getRelPath() {
         return cgenOutputRelativePath;
     }
 
     /**
-     * TODO: used only by TextInput in the Cgen UI, review this
-     *
-     * @param pathStr to update relative path with
-     * @since 5.0 renamed from {@code setRelPath()}
-     */
-    public void updateRelativeOutputPath(String pathStr) {
-        updateRelativeOutputPath(Paths.get(pathStr));
-    }
-
-    /**
-     * @param path  to update relative path with
+     * Method that calculates output path based on provided {@code Path} and 
{@code rootProjectPath}
+     * @param path to update relative path with
+     * @see #setRootPath(Path)
      * @since 5.0
      */
-    public void updateRelativeOutputPath(Path path) {
+    public void updateOutputPath(Path path) {
         if (rootProjectPath != null) {
             if (path.isAbsolute() && 
rootProjectPath.getRoot().equals(path.getRoot())) {
                 this.cgenOutputRelativePath = rootProjectPath.relativize(path);
@@ -237,7 +217,6 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
     }
 
     /**
-     * TODO: used for the XML serialization, could be changed
      * @return normalized relative path
      * @since 5.0 renamed from {@code buildRelPath()} and made package private
      */
@@ -249,15 +228,25 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
     }
 
     /**
-     * TODO: change return type to Optional&lt;Path&gt;
+     * This method calculates effective output directory for the class 
generator.
+     * It uses {@code rootProjectPath} and {@code cgenOutputRelativePath}.
+     *
      * @return calculated output directory
+     * @see #setRootPath(Path)
+     * @see #updateOutputPath(Path)
      * @since 5.0 renamed from {@code buildPath()}
      */
     public Path buildOutputPath() {
         if (rootProjectPath == null) {
+            if(!cgenOutputRelativePath.isAbsolute()) {
+                throw new ValidationException("Output directory is a relative 
path but no root is set.");
+            }
+            // this should be only in case this is a new unsaved project
             return cgenOutputRelativePath;
         }
+
         if(cgenOutputRelativePath == null) {
+            // this case should be invalid, but let the caller deal with it
             return null;
         }
 
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
index 1d7c5c8ae..b31048473 100644
--- 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
@@ -330,7 +330,7 @@ public class ClassGenerationAction {
                String className = (String) 
context.get(Artifact.SUPER_CLASS_KEY);
 
                String filename = 
StringUtils.getInstance().replaceWildcardInStringWithString(WILDCARD, 
cgenConfiguration.getOutputPattern(), className);
-               File dest = new File(mkpath(new 
File(cgenConfiguration.buildOutputPath().toString()), packageName), filename);
+               File dest = new 
File(mkpath(cgenConfiguration.buildOutputPath().toFile(), packageName), 
filename);
 
         if (dest.exists() && !fileNeedUpdate(dest, 
cgenConfiguration.getSuperTemplate().getData())) {
             return null;
@@ -349,7 +349,7 @@ public class ClassGenerationAction {
                String className = (String) context.get(Artifact.SUB_CLASS_KEY);
 
                String filename = 
StringUtils.getInstance().replaceWildcardInStringWithString(WILDCARD, 
cgenConfiguration.getOutputPattern(), className);
-               File dest = new File(mkpath(new 
File(Objects.requireNonNull(cgenConfiguration.buildOutputPath()).toString()), 
packageName), filename);
+               File dest = new 
File(mkpath(cgenConfiguration.buildOutputPath().toFile(), packageName), 
filename);
 
                if (dest.exists()) {
                        // no overwrite of subclasses
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index 50f8c7907..3e6aca53e 100644
--- 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -151,7 +151,7 @@ public class CgenConfigHandler extends 
NamespaceAwareNestedTagHandler {
         if (path.trim().length() == 0) {
             return;
         }
-        configuration.setRelativePath(Paths.get(path));
+        configuration.updateOutputPath(Paths.get(path));
     }
 
     private void createGenerationMode(String mode) {
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
index df532360a..1839f89f1 100644
--- 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
+++ 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
@@ -72,16 +72,16 @@ public class CgenSaverDelegate extends BaseSaverDelegate {
         if(prevRootPath == null) {
             Utils.getMavenSrcPathForPath(baseDirectory)
                     .map(Path::of)
-                    .ifPresent(cgenConfiguration::updateRelativeOutputPath);
+                    .ifPresent(cgenConfiguration::updateOutputPath);
         }
 
         if(prevOutputPath != null) {
             // Update relative path to match with the new root
-            cgenConfiguration.updateRelativeOutputPath(prevOutputPath);
+            cgenConfiguration.updateOutputPath(prevOutputPath);
         } else if(cgenConfiguration.getRelPath() == null) {
             // No path was set, and we are not in the Maven tree.
             // Set output dir match with the root, nothing else we could do 
here
-            cgenConfiguration.updateRelativeOutputPath(baseDirectory);
+            cgenConfiguration.updateOutputPath(baseDirectory);
         }
     }
 
diff --git 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
index 5911d69e8..cebbdd08f 100644
--- 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
+++ 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
@@ -145,7 +145,7 @@ public class BaseTemplatesGenerationTest {
         cgenConfiguration.addArtifact(artifact);
 
         cgenConfiguration.setRootPath(folder.getRoot().toPath());
-        cgenConfiguration.setRelativePath(Paths.get("."));
+        cgenConfiguration.updateOutputPath(Paths.get("."));
         cgenConfiguration.loadEntity(objEntity);
         cgenConfiguration.setDataMap(dataMap);
 
diff --git 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenConfigurationTest.java 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenConfigurationTest.java
index 23f5c3397..55b5b3a99 100644
--- 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenConfigurationTest.java
+++ 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenConfigurationTest.java
@@ -54,7 +54,7 @@ public class CgenConfigurationTest {
         public void equalRootsEqualDirectories() {
             configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
             Path relPath = Paths.get("C:\\test1\\test2\\test3");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get(""), configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -64,7 +64,7 @@ public class CgenConfigurationTest {
         public void equalRootsNotEqualDirectories() {
             configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
             Path relPath = Paths.get("C:\\test1\\test2\\testAnother");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get("..\\testAnother"), 
configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -74,7 +74,7 @@ public class CgenConfigurationTest {
         public void equalRootsEmptyDirectories() {
             configuration.setRootPath(Paths.get("C:\\"));
             Path relPath = Paths.get("C:\\");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get(""), configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -84,7 +84,7 @@ public class CgenConfigurationTest {
         public void notEqualRootsEqualDirectories() {
             configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
             Path relPath = Paths.get("E:\\test1\\test2\\test3");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get("E:\\test1\\test2\\test3"), 
configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -94,7 +94,7 @@ public class CgenConfigurationTest {
         public void notEqualRootsNotEqualDirectories() {
             configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
             Path relPath = Paths.get("E:\\test1\\test2\\testAnother");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get("E:\\test1\\test2\\testAnother"), 
configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -104,7 +104,7 @@ public class CgenConfigurationTest {
         public void notEqualRootsEmptyDirectories() {
             configuration.setRootPath(Paths.get("C:\\"));
             Path relPath = Paths.get("E:\\");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get("E:\\"), configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -114,7 +114,7 @@ public class CgenConfigurationTest {
         public void emptyRootNotEmptyRelPath() {
             configuration.setRootPath(Paths.get(""));
             Path relPath = Paths.get("E:\\");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get("E:\\"), configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -125,27 +125,20 @@ public class CgenConfigurationTest {
             configuration.setRootPath(Paths.get("E:\\"));
             Path relPath = Paths.get("");
 
-            configuration.setRelativePath(relPath);
+            configuration.updateOutputPath(relPath);
 
             assertEquals(relPath, configuration.getRelPath());
             assertEquals(Paths.get("E:\\"), configuration.buildOutputPath());
         }
 
-        @Test(expected = InvalidPathException.class)
-        public void invalidRelPath() {
-            configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
-            configuration.updateRelativeOutputPath("invalidRoot:\\test");
-        }
-
         @Test(expected = InvalidPathException.class)
         public void invalidRootPath() {
             configuration.setRootPath(Paths.get("invalidRoot:\\test"));
-            configuration.updateRelativeOutputPath("C:\\test1\\test2\\test3");
         }
 
         @Test
         public void nullRootPath() {
-            configuration.updateRelativeOutputPath("C:\\test1\\test2\\test3");
+            configuration.updateOutputPath(Path.of("C:\\test1\\test2\\test3"));
             assertEquals(Paths.get("C:\\test1\\test2\\test3"), 
configuration.getRelPath());
             assertEquals(Paths.get("C:\\test1\\test2\\test3"), 
configuration.buildOutputPath());
         }
@@ -169,7 +162,7 @@ public class CgenConfigurationTest {
         public void equalRootsEqualDirectories() {
             configuration.setRootPath(Paths.get("/test1/test2/test3"));
             Path relPath = Paths.get("/test1/test2/test3");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
 
             assertEquals(Paths.get(""), configuration.getRelPath());
@@ -180,7 +173,7 @@ public class CgenConfigurationTest {
         public void equalRootsNotEqualDirectories() {
             configuration.setRootPath(Paths.get("/test1/test2/test3"));
             Path relPath = Paths.get("/test1/test2/testAnother");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get("../testAnother"), 
configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -190,7 +183,7 @@ public class CgenConfigurationTest {
         public void equalRootsEmptyDirectories() {
             configuration.setRootPath(Paths.get("/"));
             Path relPath = Paths.get("/");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get(""), configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -200,7 +193,7 @@ public class CgenConfigurationTest {
         public void concatCorrectRootPathAndRelPath() {
             configuration.setRootPath(Paths.get("/test1/test2/test3"));
             Path relPath = Paths.get("test1/test2/test3");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get("test1/test2/test3"), 
configuration.getRelPath());
             assertEquals(Paths.get("/test1/test2/test3/test1/test2/test3"), 
configuration.buildOutputPath());
@@ -210,7 +203,7 @@ public class CgenConfigurationTest {
         public void emptyRootNotEmptyRelPath() {
             configuration.setRootPath(Paths.get(""));
             Path relPath = Paths.get("/");
-            configuration.updateRelativeOutputPath(relPath.toString());
+            configuration.updateOutputPath(relPath);
 
             assertEquals(Paths.get("/"), configuration.getRelPath());
             assertEquals(relPath, configuration.buildOutputPath());
@@ -219,7 +212,7 @@ public class CgenConfigurationTest {
         @Test
         public void notEmptyRootEmptyRelPath() {
             configuration.setRootPath(Paths.get("/"));
-            configuration.updateRelativeOutputPath("");
+            configuration.updateOutputPath(Paths.get(""));
 
             assertEquals(Paths.get(""), configuration.getRelPath());
             assertEquals(Paths.get("/"), configuration.buildOutputPath());
@@ -228,18 +221,18 @@ public class CgenConfigurationTest {
         @Test(expected = ValidationException.class)
         public void invalidRootPath() {
             configuration.setRootPath(Paths.get("invalidRoot:/test"));
-            configuration.updateRelativeOutputPath("/test1/test2/test3");
+            configuration.updateOutputPath(Paths.get("/test1/test2/test3"));
         }
 
         @Test(expected = ValidationException.class)
         public void concatInvalidRootPathAndRelPath() {
             configuration.setRootPath(Paths.get("invalidRoot:/test"));
-            configuration.updateRelativeOutputPath("test1/test2/test3");
+            configuration.updateOutputPath(Paths.get("test1/test2/test3"));
         }
 
         @Test
         public void nullRootPath() {
-            configuration.updateRelativeOutputPath("/test1/test2/test3");
+            configuration.updateOutputPath(Paths.get("/test1/test2/test3"));
             assertEquals(Paths.get("/test1/test2/test3"), 
configuration.getRelPath());
             assertEquals(Paths.get("/test1/test2/test3"), 
configuration.buildOutputPath());
         }
diff --git 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
index d5c8544b0..990809207 100644
--- 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
+++ 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
@@ -20,6 +20,7 @@
 package org.apache.cayenne.gen;
 
 import java.io.*;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -268,7 +269,7 @@ public class ClassGenerationActionTest extends CgenCase {
                TemplateType templateType = TemplateType.DATAMAP_SUPERCLASS;
 
                cgenConfiguration.setRootPath(tempFolder.getRoot().toPath());
-               cgenConfiguration.updateRelativeOutputPath(".");
+               cgenConfiguration.updateOutputPath(Paths.get("."));
                action = new ClassGenerationAction(cgenConfiguration);
                ObjEntity testEntity1 = new ObjEntity("TEST");
                testEntity1.setClassName("TestClass1");
@@ -290,7 +291,7 @@ public class ClassGenerationActionTest extends CgenCase {
                TemplateType templateType = TemplateType.DATAMAP_SINGLE_CLASS;
 
                cgenConfiguration.setRootPath(tempFolder.getRoot().toPath());
-               cgenConfiguration.updateRelativeOutputPath(".");
+               cgenConfiguration.updateOutputPath(Paths.get("."));
                action = new ClassGenerationAction(cgenConfiguration);
                ObjEntity testEntity1 = new ObjEntity("TEST");
                testEntity1.setClassName("TestClass1");
diff --git 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/xml/CgenSaverDelegateTest.java
 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/xml/CgenSaverDelegateTest.java
index eb2ba18ac..8e5ee5e84 100644
--- 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/xml/CgenSaverDelegateTest.java
+++ 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/xml/CgenSaverDelegateTest.java
@@ -50,7 +50,7 @@ public class CgenSaverDelegateTest {
         CgenConfiguration config = new CgenConfiguration();
 
         config.setRootPath(Paths.get("/tmp/src/main/java").toAbsolutePath());
-        config.setRelativePath(Paths.get(""));
+        config.updateOutputPath(Paths.get(""));
 
         URL baseURL = Paths.get("/tmp/src/main/resources").toUri().toURL();
 
diff --git 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index 0d9c6eba4..32c626924 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -341,7 +341,9 @@ public class CgenTask extends BaseCayenneTask {
         } else {
             getLogger().info("Using default cgen config.");
             cgenConfiguration = new CgenConfiguration();
-            
cgenConfiguration.updateRelativeOutputPath(getDestDirFile().getPath());
+            if(getDestDirFile() != null) {
+                cgenConfiguration.updateOutputPath(getDestDirFile().toPath());
+            }
             cgenConfiguration.setDataMap(dataMap);
             return Collections.singletonList(cgenConfiguration);
         }
@@ -351,7 +353,7 @@ public class CgenTask extends BaseCayenneTask {
         CgenConfiguration cgenConfiguration = new CgenConfiguration();
         cgenConfiguration.setDataMap(dataMap);
         if(getDestDirFile() != null) {
-            cgenConfiguration.setRelativePath(getDestDirFile().toPath());
+            cgenConfiguration.updateOutputPath(getDestDirFile().toPath());
         }
         cgenConfiguration.setEncoding(encoding != null ? encoding : 
cgenConfiguration.getEncoding());
         cgenConfiguration.setMakePairs(makePairs != null ? makePairs : 
cgenConfiguration.isMakePairs());
diff --git 
a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
 
b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
index 201876b29..78b3d2d19 100644
--- 
a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
+++ 
b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
@@ -348,7 +348,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
             logger.info("Using default cgen config.");
             CgenConfiguration cgenConfiguration = new CgenConfiguration();
             cgenConfiguration.setDataMap(dataMap);
-            cgenConfiguration.setRelativePath(defaultDir.toPath());
+            cgenConfiguration.updateOutputPath(defaultDir.toPath());
             return Collections.singletonList(cgenConfiguration);
         }
     }
@@ -356,7 +356,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
     private CgenConfiguration cgenConfigFromPom(DataMap dataMap) {
         CgenConfiguration cgenConfiguration = new CgenConfiguration();
         cgenConfiguration.setDataMap(dataMap);
-        cgenConfiguration.setRelativePath(destDir != null ? destDir.toPath() : 
defaultDir.toPath());
+        cgenConfiguration.updateOutputPath(destDir != null ? destDir.toPath() 
: defaultDir.toPath());
         cgenConfiguration.setEncoding(encoding != null ? encoding : 
cgenConfiguration.getEncoding());
         cgenConfiguration.setMakePairs(makePairs != null ? makePairs : 
cgenConfiguration.isMakePairs());
         if (mode != null && mode.equals("datamap")) {
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 d10b95995..794643e2c 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.Path;
 import java.nio.file.Paths;
 
 /**
@@ -48,10 +49,11 @@ public class GeneratorControllerPanel extends JPanel {
             protected void updateModel(String text) throws ValidationException 
{
                 CgenConfiguration cgenByDataMap = getCgenConfig();
                 if (cgenByDataMap != null) {
-                    if (cgenByDataMap.getRootPath() == null && 
!Paths.get(text).isAbsolute()) {
+                    Path path = Paths.get(text);
+                    if (cgenByDataMap.getRootPath() == null && 
!path.isAbsolute()) {
                         throw new ValidationException("You should save project 
to use relative path as an output directory.");
                     }
-                    cgenByDataMap.updateRelativeOutputPath(text);
+                    cgenByDataMap.updateOutputPath(path);
                     checkConfigDirty();
                 }
             }
@@ -68,9 +70,7 @@ public class GeneratorControllerPanel extends JPanel {
     }
 
     protected void checkConfigDirty() {
-        if (!codeGeneratorController.isInitFromModel()) {
-            codeGeneratorController.checkCgenConfigDirty();
-        }
+        codeGeneratorController.checkCgenConfigDirty();
     }
 
     protected CgenConfiguration getCgenConfig() {

Reply via email to