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 cce8944bc CAY-2785 Modeler: improve folder selection for cgen
cce8944bc is described below

commit cce8944bcc088f59479d42d4c103606968898978
Author: Nikita Timofeev <stari...@gmail.com>
AuthorDate: Fri Dec 30 10:59:13 2022 +0300

    CAY-2785 Modeler: improve folder selection for cgen
---
 .../java/org/apache/cayenne/gen/internal/Utils.java | 21 +++++++++++++++++++++
 .../apache/cayenne/gen/xml/CgenConfigHandler.java   | 21 ++-------------------
 .../cayenne/modeler/editor/cgen/CgenController.java |  2 ++
 3 files changed, 25 insertions(+), 19 deletions(-)

diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/internal/Utils.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/internal/Utils.java
index ef4164902..c664fcfc0 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/internal/Utils.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/internal/Utils.java
@@ -19,7 +19,12 @@
 
 package org.apache.cayenne.gen.internal;
 
+import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.map.DataMap;
+
 import java.io.File;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Optional;
 
@@ -54,6 +59,22 @@ public class Utils {
         return Optional.empty();
     }
 
+    public static Path getRootPathForDataMap(DataMap dataMap) {
+        if(dataMap.getConfigurationSource() == null) {
+            throw new CayenneRuntimeException("Unable to create path from the 
unsaved DataMap");
+        }
+        Path resourcePath;
+        try {
+            resourcePath = 
Path.of(dataMap.getConfigurationSource().getURL().toURI());
+        } catch (URISyntaxException e) {
+            throw new CayenneRuntimeException("Unable to create path from the 
DataMap source location", e);
+        }
+        if (Files.isRegularFile(resourcePath)) {
+            resourcePath = resourcePath.getParent();
+        }
+        return resourcePath;
+    }
+
     private static String checkDefaultMavenResourceDir(String path, String 
dirType) {
         String resourcePath = buildFilePath("src", dirType, "resources");
         int idx = path.indexOf(resourcePath);
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 05a91ac43..3185bcd42 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
@@ -31,6 +31,7 @@ import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.CgenConfigList;
 import org.apache.cayenne.gen.CgenTemplate;
 import org.apache.cayenne.gen.TemplateType;
+import org.apache.cayenne.gen.internal.Utils;
 import org.apache.cayenne.map.DataMap;
 import org.xml.sax.Attributes;
 
@@ -294,7 +295,7 @@ public class CgenConfigHandler extends 
NamespaceAwareNestedTagHandler {
     private void createConfig() {
         loaderContext.addDataMapListener(dataMap -> {
             configuration.setDataMap(dataMap);
-            configuration.setRootPath(buildRootPath(dataMap));
+            configuration.setRootPath(Utils.getRootPathForDataMap(dataMap));
             configuration.resolveExcludedEntities();
             configuration.resolveExcludedEmbeddables();
 
@@ -306,22 +307,4 @@ public class CgenConfigHandler extends 
NamespaceAwareNestedTagHandler {
             configurations.add(configuration);
         });
     }
-
-    /**
-     * @param dataMap loaded cgen config related to
-     * @return base path to the Cayenne project
-     */
-    private Path buildRootPath(DataMap dataMap) {
-        URL url = dataMap.getConfigurationSource().getURL();
-        Path resourcePath;
-        try {
-            resourcePath = Paths.get(url.toURI());
-        } catch (URISyntaxException e) {
-            throw new CayenneRuntimeException("Unable to read cgen path", e);
-        }
-        if (Files.isRegularFile(resourcePath)) {
-            resourcePath = resourcePath.getParent();
-        }
-        return resourcePath;
-    }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CgenController.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CgenController.java
index af5787b48..2af57f06b 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CgenController.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CgenController.java
@@ -30,6 +30,7 @@ import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.CgenConfigList;
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.gen.ClassGenerationActionFactory;
+import org.apache.cayenne.gen.internal.Utils;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.Entity;
@@ -301,6 +302,7 @@ public class CgenController extends CayenneController 
implements ObjEntityListen
         map.getEmbeddables().forEach(configuration::loadEmbeddable);
         if (map.getLocation() != null) {
             Path basePath = Paths.get(ModelerUtil.initOutputFolder());
+            configuration.setRootPath(Utils.getRootPathForDataMap(dataMap));
             configuration.updateOutputPath(basePath);
         }
         Preferences preferences = 
application.getPreferencesNode(GeneralPreferences.class, "");

Reply via email to