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 <[email protected]>
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, "");