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, "");