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

commit 2be41da52d17993550fe126a1bb0571dd45fbc59
Author: Nikita Timofeev <stari...@gmail.com>
AuthorDate: Tue Dec 6 18:52:12 2022 +0300

    CAY-2785 Modeler: improve folder selection for cgen
     - refactor output-dir related methods in cgen
---
 .../apache/cayenne/tools/CayenneGeneratorTask.java |  4 +-
 .../org/apache/cayenne/gen/CgenConfiguration.java  | 78 +++++++++++++---------
 .../apache/cayenne/gen/ClassGenerationAction.java  |  6 +-
 .../apache/cayenne/gen/xml/CgenConfigHandler.java  |  2 +-
 .../apache/cayenne/gen/xml/CgenSaverDelegate.java  |  4 +-
 .../cayenne/gen/BaseTemplatesGenerationTest.java   |  2 +-
 .../apache/cayenne/gen/CgenConfigurationTest.java  | 72 ++++++++++----------
 .../cayenne/gen/ClassGenerationActionTest.java     |  4 +-
 .../cayenne/gen/xml/CgenSaverDelegateTest.java     | 16 +++--
 .../org/apache/cayenne/crypto/db/auto/_Table1.java |  2 +
 .../org/apache/cayenne/crypto/db/auto/_Table2.java |  2 +
 .../org/apache/cayenne/crypto/db/auto/_Table3.java |  2 +
 .../org/apache/cayenne/crypto/db/auto/_Table4.java |  2 +
 .../org/apache/cayenne/crypto/db/auto/_Table5.java |  2 +
 .../org/apache/cayenne/crypto/db/auto/_Table6.java |  2 +
 .../org/apache/cayenne/crypto/db/auto/_Table7.java |  2 +
 .../org/apache/cayenne/crypto/db/auto/_Table8.java |  2 +
 .../java/org/apache/cayenne/tools/CgenTask.java    |  6 +-
 .../apache/cayenne/tools/CayenneGeneratorMojo.java |  5 +-
 .../editor/cgen/CodeGeneratorController.java       |  6 +-
 .../modeler/editor/cgen/GeneratorController.java   |  2 +-
 .../editor/cgen/GeneratorControllerPanel.java      |  3 +-
 22 files changed, 137 insertions(+), 89 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 aca2070a4..fda3473f2 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
@@ -184,7 +184,9 @@ public class CayenneGeneratorTask extends CayenneTask {
     private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
         CgenConfiguration cgenConfiguration = new CgenConfiguration();
         cgenConfiguration.setDataMap(dataMap);
-        cgenConfiguration.setRelPath(destDir != null ? destDir.toPath() : 
cgenConfiguration.getRelPath());
+        if(destDir != null) {
+            cgenConfiguration.setRelativePath(destDir.toPath());
+        }
         cgenConfiguration.setEncoding(encoding != null ? encoding : 
cgenConfiguration.getEncoding());
         cgenConfiguration.setMakePairs(makepairs != null ? makepairs : 
cgenConfiguration.isMakePairs());
         if(mode != null && mode.equals("datamap")) {
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 92a827735..8bdaeb67f 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
@@ -26,6 +26,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -173,23 +174,36 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
         return rootPath;
     }
 
+    /**
+     * @param rootPath absolute target path for the cgen generation
+     */
     public void setRootPath(Path rootPath) {
+        if (!Objects.requireNonNull(rootPath).isAbsolute()) {
+            throw new ValidationException("Root path : " + '"' + rootPath + 
'"' + "should be absolute");
+        }
         this.rootPath = rootPath;
     }
 
-    public void setRelPath(Path relPath) {
+    /**
+     * Directly set relative (to {@code rootPath}) output directory
+     * @param relPath to set
+     * @since 5.0 renamed from {@code setRelPath()}
+     */
+    public void setRelativePath(Path relPath) {
         this.relPath = relPath;
     }
 
-    public void setRelPath(String pathStr) {
-        Path path = Paths.get(pathStr);
+    public Path getRelPath() {
+        return relPath;
+    }
 
+    /**
+     * @param pathStr to update relative path with
+     * @since 5.0 renamed from {@code setRelPath()}
+     */
+    public void updateRelativeOutputPath(String pathStr) {
+        Path path = Paths.get(pathStr);
         if (rootPath != null) {
-
-            if (!rootPath.isAbsolute()) {
-                throw new ValidationException("Root path : " + '"' + rootPath 
+ '"' + "should be absolute");
-            }
-
             if (path.isAbsolute() && 
rootPath.getRoot().equals(path.getRoot())) {
                 this.relPath = rootPath.relativize(path);
                 return;
@@ -198,6 +212,31 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
         this.relPath = path;
     }
 
+    /**
+     * @return normalized relative path
+     * @since 5.0 renamed from {@code buildRelPath()} and made package private
+     */
+    String getNormalizedRelativePath() {
+        if (relPath == null || relPath.toString().isEmpty()) {
+            return ".";
+        }
+        return relPath.toString();
+    }
+
+    /**
+     * @return calculated output directory
+     * @since 5.0 renamed from {@code buildPath()}
+     */
+    public Path buildOutputPath() {
+        if (rootPath == null) {
+            return relPath;
+        }
+        if (relPath == null) {
+            return rootPath;
+        }
+        return rootPath.resolve(relPath).toAbsolutePath().normalize();
+    }
+
     public boolean isOverwrite() {
         return overwrite;
     }
@@ -310,17 +349,6 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
         this.createPKProperties = createPKProperties;
     }
 
-    public Path getRelPath() {
-        return relPath;
-    }
-
-    public String buildRelPath() {
-        if (relPath == null || relPath.toString().isEmpty()) {
-            return ".";
-        }
-        return relPath.toString();
-    }
-
     Collection<Artifact> getArtifacts() {
         return artifacts;
     }
@@ -345,16 +373,6 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
         artifacts.add(artifact);
     }
 
-    public Path buildPath() {
-        if (rootPath == null) {
-            return relPath;
-        }
-        if (relPath == null) {
-            return rootPath;
-        }
-        return rootPath.resolve(relPath).toAbsolutePath().normalize();
-    }
-
     public void loadEntity(ObjEntity entity) {
         if (!entity.isGeneric()) {
             entityArtifacts.add(entity.getName());
@@ -422,7 +440,7 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
                 .simpleTag("name", this.name)
                 .simpleTag("excludeEntities", getExcludeEntites())
                 .simpleTag("excludeEmbeddables", getExcludeEmbeddables())
-                .simpleTag("destDir", separatorsToUnix(buildRelPath()))
+                .simpleTag("destDir", 
separatorsToUnix(getNormalizedRelativePath()))
                 .simpleTag("mode", this.artifactsGenerationMode.getLabel())
                 .start("template").cdata(this.template.getData(), 
!this.template.isFile()).end()
                 .start("superTemplate").cdata(this.superTemplate.getData(), 
!this.superTemplate.isFile()).end()
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 0f828f5f6..1d7c5c8ae 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
@@ -274,7 +274,7 @@ public class ClassGenerationAction {
         * Called internally from "execute".
         */
        protected void validateAttributes() {
-               Path dir = cgenConfiguration.buildPath();
+               Path dir = cgenConfiguration.buildOutputPath();
                if (dir == null) {
                        throw new CayenneRuntimeException("Output directory is 
not set.");
                }
@@ -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.buildPath().toString()), packageName), filename);
+               File dest = new File(mkpath(new 
File(cgenConfiguration.buildOutputPath().toString()), 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.buildPath()).toString()), 
packageName), filename);
+               File dest = new File(mkpath(new 
File(Objects.requireNonNull(cgenConfiguration.buildOutputPath()).toString()), 
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 77fa050cf..038bb6f4f 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.setRelPath(Paths.get(path));
+        configuration.setRelativePath(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 a5d85fd14..3f40e0658 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
@@ -80,14 +80,14 @@ public class CgenSaverDelegate extends BaseSaverDelegate {
             cgenConfiguration.setRootPath(cgenPath);
         }
 
-        Path prevPath = cgenConfiguration.buildPath();
+        Path prevPath = cgenConfiguration.buildOutputPath();
         if(prevPath != null) {
             if(prevPath.isAbsolute()) {
                 Path relPath = prevPath;
                 if (resourcePath.getRoot().equals(prevPath.getRoot())) {
                     relPath = resourcePath.relativize(prevPath).normalize();
                 }
-                cgenConfiguration.setRelPath(relPath);
+                cgenConfiguration.setRelativePath(relPath);
             }
         }
         cgenConfiguration.setRootPath(resourcePath);
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 61a50253e..5911d69e8 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.setRelPath(Paths.get("."));
+        cgenConfiguration.setRelativePath(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 5d4a580ce..23f5c3397 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,70 +54,70 @@ public class CgenConfigurationTest {
         public void equalRootsEqualDirectories() {
             configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
             Path relPath = Paths.get("C:\\test1\\test2\\test3");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get(""), configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
         public void equalRootsNotEqualDirectories() {
             configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
             Path relPath = Paths.get("C:\\test1\\test2\\testAnother");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get("..\\testAnother"), 
configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
         public void equalRootsEmptyDirectories() {
             configuration.setRootPath(Paths.get("C:\\"));
             Path relPath = Paths.get("C:\\");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get(""), configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
         public void notEqualRootsEqualDirectories() {
             configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
             Path relPath = Paths.get("E:\\test1\\test2\\test3");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get("E:\\test1\\test2\\test3"), 
configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
         public void notEqualRootsNotEqualDirectories() {
             configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
             Path relPath = Paths.get("E:\\test1\\test2\\testAnother");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get("E:\\test1\\test2\\testAnother"), 
configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
         public void notEqualRootsEmptyDirectories() {
             configuration.setRootPath(Paths.get("C:\\"));
             Path relPath = Paths.get("E:\\");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get("E:\\"), configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test(expected = ValidationException.class)
         public void emptyRootNotEmptyRelPath() {
             configuration.setRootPath(Paths.get(""));
             Path relPath = Paths.get("E:\\");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get("E:\\"), configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
@@ -125,29 +125,29 @@ public class CgenConfigurationTest {
             configuration.setRootPath(Paths.get("E:\\"));
             Path relPath = Paths.get("");
 
-            configuration.setRelPath(relPath);
+            configuration.setRelativePath(relPath);
 
             assertEquals(relPath, configuration.getRelPath());
-            assertEquals(Paths.get("E:\\"), configuration.buildPath());
+            assertEquals(Paths.get("E:\\"), configuration.buildOutputPath());
         }
 
         @Test(expected = InvalidPathException.class)
         public void invalidRelPath() {
             configuration.setRootPath(Paths.get("C:\\test1\\test2\\test3"));
-            configuration.setRelPath("invalidRoot:\\test");
+            configuration.updateRelativeOutputPath("invalidRoot:\\test");
         }
 
         @Test(expected = InvalidPathException.class)
         public void invalidRootPath() {
             configuration.setRootPath(Paths.get("invalidRoot:\\test"));
-            configuration.setRelPath("C:\\test1\\test2\\test3");
+            configuration.updateRelativeOutputPath("C:\\test1\\test2\\test3");
         }
 
         @Test
         public void nullRootPath() {
-            configuration.setRelPath("C:\\test1\\test2\\test3");
+            configuration.updateRelativeOutputPath("C:\\test1\\test2\\test3");
             assertEquals(Paths.get("C:\\test1\\test2\\test3"), 
configuration.getRelPath());
-            assertEquals(Paths.get("C:\\test1\\test2\\test3"), 
configuration.buildPath());
+            assertEquals(Paths.get("C:\\test1\\test2\\test3"), 
configuration.buildOutputPath());
         }
     }
 
@@ -169,79 +169,79 @@ public class CgenConfigurationTest {
         public void equalRootsEqualDirectories() {
             configuration.setRootPath(Paths.get("/test1/test2/test3"));
             Path relPath = Paths.get("/test1/test2/test3");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
 
             assertEquals(Paths.get(""), configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
         public void equalRootsNotEqualDirectories() {
             configuration.setRootPath(Paths.get("/test1/test2/test3"));
             Path relPath = Paths.get("/test1/test2/testAnother");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get("../testAnother"), 
configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
         public void equalRootsEmptyDirectories() {
             configuration.setRootPath(Paths.get("/"));
             Path relPath = Paths.get("/");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get(""), configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
         public void concatCorrectRootPathAndRelPath() {
             configuration.setRootPath(Paths.get("/test1/test2/test3"));
             Path relPath = Paths.get("test1/test2/test3");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get("test1/test2/test3"), 
configuration.getRelPath());
-            assertEquals(Paths.get("/test1/test2/test3/test1/test2/test3"), 
configuration.buildPath());
+            assertEquals(Paths.get("/test1/test2/test3/test1/test2/test3"), 
configuration.buildOutputPath());
         }
 
         @Test(expected = ValidationException.class)
         public void emptyRootNotEmptyRelPath() {
             configuration.setRootPath(Paths.get(""));
             Path relPath = Paths.get("/");
-            configuration.setRelPath(relPath.toString());
+            configuration.updateRelativeOutputPath(relPath.toString());
 
             assertEquals(Paths.get("/"), configuration.getRelPath());
-            assertEquals(relPath, configuration.buildPath());
+            assertEquals(relPath, configuration.buildOutputPath());
         }
 
         @Test
         public void notEmptyRootEmptyRelPath() {
             configuration.setRootPath(Paths.get("/"));
-            configuration.setRelPath("");
+            configuration.updateRelativeOutputPath("");
 
             assertEquals(Paths.get(""), configuration.getRelPath());
-            assertEquals(Paths.get("/"), configuration.buildPath());
+            assertEquals(Paths.get("/"), configuration.buildOutputPath());
         }
 
         @Test(expected = ValidationException.class)
         public void invalidRootPath() {
             configuration.setRootPath(Paths.get("invalidRoot:/test"));
-            configuration.setRelPath("/test1/test2/test3");
+            configuration.updateRelativeOutputPath("/test1/test2/test3");
         }
 
         @Test(expected = ValidationException.class)
         public void concatInvalidRootPathAndRelPath() {
             configuration.setRootPath(Paths.get("invalidRoot:/test"));
-            configuration.setRelPath("test1/test2/test3");
+            configuration.updateRelativeOutputPath("test1/test2/test3");
         }
 
         @Test
         public void nullRootPath() {
-            configuration.setRelPath("/test1/test2/test3");
+            configuration.updateRelativeOutputPath("/test1/test2/test3");
             assertEquals(Paths.get("/test1/test2/test3"), 
configuration.getRelPath());
-            assertEquals(Paths.get("/test1/test2/test3"), 
configuration.buildPath());
+            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 296e15295..d5c8544b0 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
@@ -268,7 +268,7 @@ public class ClassGenerationActionTest extends CgenCase {
                TemplateType templateType = TemplateType.DATAMAP_SUPERCLASS;
 
                cgenConfiguration.setRootPath(tempFolder.getRoot().toPath());
-               cgenConfiguration.setRelPath(".");
+               cgenConfiguration.updateRelativeOutputPath(".");
                action = new ClassGenerationAction(cgenConfiguration);
                ObjEntity testEntity1 = new ObjEntity("TEST");
                testEntity1.setClassName("TestClass1");
@@ -290,7 +290,7 @@ public class ClassGenerationActionTest extends CgenCase {
                TemplateType templateType = TemplateType.DATAMAP_SINGLE_CLASS;
 
                cgenConfiguration.setRootPath(tempFolder.getRoot().toPath());
-               cgenConfiguration.setRelPath(".");
+               cgenConfiguration.updateRelativeOutputPath(".");
                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 ef05d1ce3..12780ebf3 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.setRelPath(Paths.get(""));
+        config.setRelativePath(Paths.get(""));
 
         URL baseURL = Paths.get("/tmp/src/main/resources").toUri().toURL();
 
@@ -61,7 +61,7 @@ public class CgenSaverDelegateTest {
     }
 
     @Test
-    public void testEmptyRoot() throws Exception {
+    public void testEmptyRootInMavenTree() throws Exception {
         CgenConfiguration config = new CgenConfiguration();
 
         URL baseURL = Paths.get("/tmp/src/main/resources").toUri().toURL();
@@ -69,12 +69,18 @@ public class CgenSaverDelegateTest {
         CgenSaverDelegate.resolveOutputDir(baseURL, config);
 
         assertEquals(Paths.get("/tmp/src/main/resources").toAbsolutePath(), 
config.getRootPath());
-        assertEquals(Paths.get(""), config.getRelPath());
+        assertEquals(Paths.get("../java"), config.getRelPath());
     }
 
+    @Test
+    public void testEmptyRoot() throws Exception {
+        CgenConfiguration config = new CgenConfiguration();
 
+        URL baseURL = Paths.get("/tmp/somefolder").toUri().toURL();
 
+        CgenSaverDelegate.resolveOutputDir(baseURL, config);
 
-
-
+        assertEquals(Paths.get("/tmp/somefolder").toAbsolutePath(), 
config.getRootPath());
+        assertEquals(Paths.get(""), config.getRelPath());
+    }
 }
\ No newline at end of file
diff --git 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table1.java 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table1.java
index 1c938419f..5f769c951 100644
--- 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table1.java
+++ 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table1.java
@@ -10,6 +10,7 @@ import org.apache.cayenne.crypto.db.Table1;
 import org.apache.cayenne.crypto.db.Table7;
 import org.apache.cayenne.exp.property.EntityProperty;
 import org.apache.cayenne.exp.property.ListProperty;
+import org.apache.cayenne.exp.property.NumericIdProperty;
 import org.apache.cayenne.exp.property.NumericProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.exp.property.StringProperty;
@@ -26,6 +27,7 @@ public abstract class _Table1 extends BaseDataObject {
 
     public static final EntityProperty<Table1> SELF = 
PropertyFactory.createSelf(Table1.class);
 
+    public static final NumericIdProperty<Integer> ID_PK_PROPERTY = 
PropertyFactory.createNumericId("ID", "Table1", Integer.class);
     public static final String ID_PK_COLUMN = "ID";
 
     public static final NumericProperty<Integer> CRYPTO_INT = 
PropertyFactory.createNumeric("cryptoInt", Integer.class);
diff --git 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table2.java 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table2.java
index c828f07d1..7ccd3e5d9 100644
--- 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table2.java
+++ 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table2.java
@@ -8,6 +8,7 @@ import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.crypto.db.Table2;
 import org.apache.cayenne.exp.property.BaseProperty;
 import org.apache.cayenne.exp.property.EntityProperty;
+import org.apache.cayenne.exp.property.NumericIdProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 
 /**
@@ -22,6 +23,7 @@ public abstract class _Table2 extends BaseDataObject {
 
     public static final EntityProperty<Table2> SELF = 
PropertyFactory.createSelf(Table2.class);
 
+    public static final NumericIdProperty<Integer> ID_PK_PROPERTY = 
PropertyFactory.createNumericId("ID", "Table2", Integer.class);
     public static final String ID_PK_COLUMN = "ID";
 
     public static final BaseProperty<byte[]> CRYPTO_BYTES = 
PropertyFactory.createBase("cryptoBytes", byte[].class);
diff --git 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table3.java 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table3.java
index 38859faff..bc9e6957f 100644
--- 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table3.java
+++ 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table3.java
@@ -7,6 +7,7 @@ import java.io.ObjectOutputStream;
 import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.crypto.db.Table3;
 import org.apache.cayenne.exp.property.EntityProperty;
+import org.apache.cayenne.exp.property.NumericIdProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.exp.property.StringProperty;
 
@@ -22,6 +23,7 @@ public abstract class _Table3 extends BaseDataObject {
 
     public static final EntityProperty<Table3> SELF = 
PropertyFactory.createSelf(Table3.class);
 
+    public static final NumericIdProperty<Integer> ID_PK_PROPERTY = 
PropertyFactory.createNumericId("ID", "Table3", Integer.class);
     public static final String ID_PK_COLUMN = "ID";
 
     public static final StringProperty<String> CRYPTO_STRING = 
PropertyFactory.createString("cryptoString", String.class);
diff --git 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table4.java 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table4.java
index c40e33530..862d1105f 100644
--- 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table4.java
+++ 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table4.java
@@ -7,6 +7,7 @@ import java.io.ObjectOutputStream;
 import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.crypto.db.Table4;
 import org.apache.cayenne.exp.property.EntityProperty;
+import org.apache.cayenne.exp.property.NumericIdProperty;
 import org.apache.cayenne.exp.property.NumericProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.exp.property.StringProperty;
@@ -23,6 +24,7 @@ public abstract class _Table4 extends BaseDataObject {
 
     public static final EntityProperty<Table4> SELF = 
PropertyFactory.createSelf(Table4.class);
 
+    public static final NumericIdProperty<Integer> ID_PK_PROPERTY = 
PropertyFactory.createNumericId("ID", "Table4", Integer.class);
     public static final String ID_PK_COLUMN = "ID";
 
     public static final NumericProperty<Integer> PLAIN_INT = 
PropertyFactory.createNumeric("plainInt", Integer.class);
diff --git 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table5.java 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table5.java
index a633adf79..f5cd4d8bf 100644
--- 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table5.java
+++ 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table5.java
@@ -7,6 +7,7 @@ import java.io.ObjectOutputStream;
 import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.crypto.db.Table5;
 import org.apache.cayenne.exp.property.EntityProperty;
+import org.apache.cayenne.exp.property.NumericIdProperty;
 import org.apache.cayenne.exp.property.NumericProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 
@@ -22,6 +23,7 @@ public abstract class _Table5 extends BaseDataObject {
 
     public static final EntityProperty<Table5> SELF = 
PropertyFactory.createSelf(Table5.class);
 
+    public static final NumericIdProperty<Integer> ID_PK_PROPERTY = 
PropertyFactory.createNumericId("ID", "Table5", Integer.class);
     public static final String ID_PK_COLUMN = "ID";
 
     public static final NumericProperty<Integer> CRYPTO_INT1 = 
PropertyFactory.createNumeric("cryptoInt1", Integer.class);
diff --git 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table6.java 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table6.java
index 597deb9ee..9404fd8a5 100644
--- 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table6.java
+++ 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table6.java
@@ -7,6 +7,7 @@ import java.io.ObjectOutputStream;
 import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.crypto.db.Table6;
 import org.apache.cayenne.exp.property.EntityProperty;
+import org.apache.cayenne.exp.property.NumericIdProperty;
 import org.apache.cayenne.exp.property.NumericProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 
@@ -22,6 +23,7 @@ public abstract class _Table6 extends BaseDataObject {
 
     public static final EntityProperty<Table6> SELF = 
PropertyFactory.createSelf(Table6.class);
 
+    public static final NumericIdProperty<Integer> ID_PK_PROPERTY = 
PropertyFactory.createNumericId("ID", "Table6", Integer.class);
     public static final String ID_PK_COLUMN = "ID";
 
     public static final NumericProperty<Long> CRYPTO_INT1 = 
PropertyFactory.createNumeric("cryptoInt1", Long.class);
diff --git 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table7.java 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table7.java
index 3ba44f90a..ef0cc9e27 100644
--- 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table7.java
+++ 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table7.java
@@ -8,6 +8,7 @@ import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.crypto.db.Table1;
 import org.apache.cayenne.crypto.db.Table7;
 import org.apache.cayenne.exp.property.EntityProperty;
+import org.apache.cayenne.exp.property.NumericIdProperty;
 import org.apache.cayenne.exp.property.NumericProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.exp.property.StringProperty;
@@ -24,6 +25,7 @@ public abstract class _Table7 extends BaseDataObject {
 
     public static final EntityProperty<Table7> SELF = 
PropertyFactory.createSelf(Table7.class);
 
+    public static final NumericIdProperty<Integer> ID_PK_PROPERTY = 
PropertyFactory.createNumericId("ID", "Table7", Integer.class);
     public static final String ID_PK_COLUMN = "ID";
 
     public static final NumericProperty<Integer> CRYPTO_INT = 
PropertyFactory.createNumeric("cryptoInt", Integer.class);
diff --git 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table8.java 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table8.java
index 5b39f9007..1003a6fbe 100644
--- 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table8.java
+++ 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table8.java
@@ -7,6 +7,7 @@ import java.io.ObjectOutputStream;
 import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.crypto.db.Table8;
 import org.apache.cayenne.exp.property.EntityProperty;
+import org.apache.cayenne.exp.property.NumericIdProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.exp.property.StringProperty;
 
@@ -22,6 +23,7 @@ public abstract class _Table8 extends BaseDataObject {
 
     public static final EntityProperty<Table8> SELF = 
PropertyFactory.createSelf(Table8.class);
 
+    public static final NumericIdProperty<Integer> ID_PK_PROPERTY = 
PropertyFactory.createNumericId("ID", "Table8", Integer.class);
     public static final String ID_PK_COLUMN = "ID";
 
     public static final StringProperty<String> CRYPTO_STRING = 
PropertyFactory.createString("cryptoString", String.class);
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 7340a6e57..0d9c6eba4 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,7 @@ public class CgenTask extends BaseCayenneTask {
         } else {
             getLogger().info("Using default cgen config.");
             cgenConfiguration = new CgenConfiguration();
-            cgenConfiguration.setRelPath(getDestDirFile().getPath());
+            
cgenConfiguration.updateRelativeOutputPath(getDestDirFile().getPath());
             cgenConfiguration.setDataMap(dataMap);
             return Collections.singletonList(cgenConfiguration);
         }
@@ -350,7 +350,9 @@ public class CgenTask extends BaseCayenneTask {
     private CgenConfiguration cgenConfigFromPom(DataMap dataMap) {
         CgenConfiguration cgenConfiguration = new CgenConfiguration();
         cgenConfiguration.setDataMap(dataMap);
-        cgenConfiguration.setRelPath(getDestDirFile() != null ? 
getDestDirFile().toPath() : cgenConfiguration.getRelPath());
+        if(getDestDirFile() != null) {
+            cgenConfiguration.setRelativePath(getDestDirFile().toPath());
+        }
         cgenConfiguration.setEncoding(encoding != null ? encoding : 
cgenConfiguration.getEncoding());
         cgenConfiguration.setMakePairs(makePairs != null ? makePairs : 
cgenConfiguration.isMakePairs());
         if (mode != null && mode.equals("datamap")) {
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 aa370476e..305b1bc47 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.setRelPath(defaultDir.getPath());
+            cgenConfiguration.updateRelativeOutputPath(defaultDir.getPath());
             return Collections.singletonList(cgenConfiguration);
         }
     }
@@ -356,7 +356,8 @@ public class CayenneGeneratorMojo extends AbstractMojo {
     private CgenConfiguration cgenConfigFromPom(DataMap dataMap) {
         CgenConfiguration cgenConfiguration = new CgenConfiguration();
         cgenConfiguration.setDataMap(dataMap);
-        cgenConfiguration.setRelPath(destDir != null ? destDir.getPath() : 
defaultDir.getPath());
+        // TODO: check this call, CayenneGeneratorTask and CgenTask use 
setRelPath()
+        cgenConfiguration.updateRelativeOutputPath(destDir != null ? 
destDir.getPath() : defaultDir.getPath());
         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/CodeGeneratorController.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
index 7ab00e356..b4f14d2d1 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
@@ -531,7 +531,11 @@ public class CodeGeneratorController extends 
CayenneController implements ObjEnt
      */
     public void onProjectSaved(ProjectSavedEvent e) {
         // update path input
-        
getStandardModeController().getView().getOutputFolder().setText(cgenConfiguration.getRootPath().toString());
+        if(getStandardModeController() != null
+                && getStandardModeController().getView() != null
+                && cgenConfiguration != null) {
+            
getStandardModeController().getView().getOutputFolder().setText(cgenConfiguration.getRootPath().toString());
+        }
     }
 
     private final Predicate<ConfigurationNode> defaultPredicate = o -> 
o.acceptVisitor(new BaseConfigurationNodeVisitor<Boolean>() {
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 5346e2aba..af69dcee2 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
@@ -64,7 +64,7 @@ public abstract class GeneratorController extends 
CayenneController {
         this.cgenConfiguration = cgenConfiguration;
 
         if (cgenConfiguration.getRootPath() != null) {
-            
getView().getOutputFolder().setText(cgenConfiguration.buildPath().toString());
+            
getView().getOutputFolder().setText(cgenConfiguration.buildOutputPath().toString());
         }
         
if(cgenConfiguration.getArtifactsGenerationMode().equalsIgnoreCase("all")) {
             
getParentController().setCurrentClass(cgenConfiguration.getDataMap());
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 90f418b10..ccf8d1ee8 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,7 +27,6 @@ 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;
 
 /**
@@ -55,7 +54,7 @@ public class GeneratorControllerPanel extends JPanel {
                     if (cgenByDataMap.getRootPath() == null && 
!Paths.get(text).isAbsolute()) {
                         throw new ValidationException("You should save project 
to use rel path as output directory ");
                     }
-                    cgenByDataMap.setRelPath(text);
+                    cgenByDataMap.updateRelativeOutputPath(text);
                     checkConfigDirty();
                 }
             }


Reply via email to