This is an automated email from the ASF dual-hosted git repository.

stariy95 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 edeb05500 Unify Modeler and MCP `dbimport` tool path logic
edeb05500 is described below

commit edeb05500a3e2675183d1990e091c0c84c23e699
Author: Nikita Timofeev <[email protected]>
AuthorDate: Wed May 27 14:36:15 2026 +0400

    Unify Modeler and MCP `dbimport` tool path logic
---
 .../org/apache/cayenne/mcp/tools/dbimport/DbImportRunTool.java | 10 ++++++----
 .../org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java   |  4 ++--
 .../apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java    |  2 +-
 .../cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java  |  4 ++--
 4 files changed, 11 insertions(+), 9 deletions(-)

diff --git 
a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunTool.java
 
b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunTool.java
index e9ab9609d..a6ab4d846 100644
--- 
a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunTool.java
+++ 
b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunTool.java
@@ -189,11 +189,12 @@ public class DbImportRunTool {
                     new DbImportValidation(true, false, null, null, null));
         }
 
-        // Resolve DataMap file path for preference node lookup
-        Path dataMapFile = resolveDataMapFile(dataMap);
-
         // Step 4 — DBConnector stored in preferences?
-        String dataMapId = 
PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString());
+        // Keep this in sync with PrefsManager.dataMapPath(...), which keys 
Modeler preferences
+        // from URL.getPath(). On Windows file:/D:/... has a leading slash 
here, and hashing a
+        // java.nio Path string would point to a different preference node.
+        URL dataMapSourceUrl = dataMap.getConfigurationSource().getURL();
+        String dataMapId = 
PreferenceNodeIds.idForPath(dataMapSourceUrl.getPath());
         DBConnector connector = new 
DataMapPrefs(prefsLocator.dataMapNode(dataMapId)).getConnector();
         if (connector == null) {
             return 
validationFailed(DbImportErrorCode.dbconnector_not_configured,
@@ -206,6 +207,7 @@ public class DbImportRunTool {
                     new DbImportValidation(true, true, false, null, null));
         }
 
+        Path dataMapFile = resolveDataMapFile(dataMap);
         DbImportResolved resolved = new DbImportResolved(
                 dataMapFile.toAbsolutePath().toString(),
                 connector.getUrl(),
diff --git 
a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java
 
b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java
index 4f5100445..85c79c6ef 100644
--- 
a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java
+++ 
b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java
@@ -167,7 +167,7 @@ public class DbImportRunIT {
     public void connectorNotConfigured() {
         // Clear the connector from prefs
         new DataMapPrefs(prefsLocator.dataMapNode(
-                
PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString())))
+                PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath())))
                 .setConnector(new DBConnector()); // empty connector clears 
URL sentinel
 
         DbImportRunResult result = tool.run(projectFile.toString(), "TestMap");
@@ -191,7 +191,7 @@ public class DbImportRunIT {
         c.setJdbcDriver(driver);
         c.setDbAdapter(adapter);
 
-        Preferences mapPrefs = 
prefsLocator.dataMapNode(PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString()));
+        Preferences mapPrefs = 
prefsLocator.dataMapNode(PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath()));
         new DataMapPrefs(mapPrefs).setConnector(c);
     }
 }
diff --git 
a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java
 
b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java
index 13bbef7f3..8b99a856d 100644
--- 
a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java
+++ 
b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java
@@ -87,7 +87,7 @@ public class DbImportRunMcpIT {
 
         // The in-process MCP server uses new PrefsLocator() → 
Preferences.userRoot().
         // Write the connector there so the server can find it when the tool 
runs.
-        String dataMapId = 
PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString());
+        String dataMapId = 
PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath());
         PrefsLocator locator = new PrefsLocator(Preferences.userRoot());
         dataMapPrefsNode = locator.dataMapNode(dataMapId);
         DBConnector connector = new DBConnector();
diff --git 
a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java
 
b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java
index 0bcc07269..d7b4a4dda 100644
--- 
a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java
+++ 
b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java
@@ -165,7 +165,7 @@ public class DbImportRunValidationTest {
         connector.setJdbcDriver("com.nonexistent.Driver");
         
connector.setDbAdapter("org.apache.cayenne.dba.hsqldb.HSQLDBNoSchemaAdapter");
         new DataMapPrefs(locator.dataMapNode(
-                
PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString())))
+                PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath())))
                 .setConnector(connector);
 
         DbImportRunTool isolatedTool = new DbImportRunTool(locator);
@@ -198,7 +198,7 @@ public class DbImportRunValidationTest {
         connector.setJdbcDriver("org.hsqldb.jdbc.JDBCDriver");
         
connector.setDbAdapter("org.apache.cayenne.dba.hsqldb.HSQLDBNoSchemaAdapter");
         new DataMapPrefs(locator.dataMapNode(
-                
PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString())))
+                PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath())))
                 .setConnector(connector);
 
         DbImportRunTool isolatedTool = new DbImportRunTool(locator);

Reply via email to