Skip to content

Commit edeb055

Browse files
committed
Unify Modeler and MCP dbimport tool path logic
1 parent 0a2e2fb commit edeb055

4 files changed

Lines changed: 11 additions & 9 deletions

File tree

cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunTool.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,12 @@ public DbImportRunResult run(String projectPath, String dataMapName) {
189189
new DbImportValidation(true, false, null, null, null));
190190
}
191191

192-
// Resolve DataMap file path for preference node lookup
193-
Path dataMapFile = resolveDataMapFile(dataMap);
194-
195192
// Step 4 — DBConnector stored in preferences?
196-
String dataMapId = PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString());
193+
// Keep this in sync with PrefsManager.dataMapPath(...), which keys Modeler preferences
194+
// from URL.getPath(). On Windows file:/D:/... has a leading slash here, and hashing a
195+
// java.nio Path string would point to a different preference node.
196+
URL dataMapSourceUrl = dataMap.getConfigurationSource().getURL();
197+
String dataMapId = PreferenceNodeIds.idForPath(dataMapSourceUrl.getPath());
197198
DBConnector connector = new DataMapPrefs(prefsLocator.dataMapNode(dataMapId)).getConnector();
198199
if (connector == null) {
199200
return validationFailed(DbImportErrorCode.dbconnector_not_configured,
@@ -206,6 +207,7 @@ public DbImportRunResult run(String projectPath, String dataMapName) {
206207
new DbImportValidation(true, true, false, null, null));
207208
}
208209

210+
Path dataMapFile = resolveDataMapFile(dataMap);
209211
DbImportResolved resolved = new DbImportResolved(
210212
dataMapFile.toAbsolutePath().toString(),
211213
connector.getUrl(),

cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public void drift() throws Exception {
167167
public void connectorNotConfigured() {
168168
// Clear the connector from prefs
169169
new DataMapPrefs(prefsLocator.dataMapNode(
170-
PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString())))
170+
PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath())))
171171
.setConnector(new DBConnector()); // empty connector clears URL sentinel
172172

173173
DbImportRunResult result = tool.run(projectFile.toString(), "TestMap");
@@ -191,7 +191,7 @@ private void storeConnector(
191191
c.setJdbcDriver(driver);
192192
c.setDbAdapter(adapter);
193193

194-
Preferences mapPrefs = prefsLocator.dataMapNode(PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString()));
194+
Preferences mapPrefs = prefsLocator.dataMapNode(PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath()));
195195
new DataMapPrefs(mapPrefs).setConnector(c);
196196
}
197197
}

cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunMcpIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ FOREIGN KEY (artist_id) REFERENCES artist(id)
8787

8888
// The in-process MCP server uses new PrefsLocator() → Preferences.userRoot().
8989
// Write the connector there so the server can find it when the tool runs.
90-
String dataMapId = PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString());
90+
String dataMapId = PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath());
9191
PrefsLocator locator = new PrefsLocator(Preferences.userRoot());
9292
dataMapPrefsNode = locator.dataMapNode(dataMapId);
9393
DBConnector connector = new DBConnector();

cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/dbimport/DbImportRunValidationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public void jdbcDriverNotLoadable(@TempDir Path tmp) throws IOException {
165165
connector.setJdbcDriver("com.nonexistent.Driver");
166166
connector.setDbAdapter("org.apache.cayenne.dba.hsqldb.HSQLDBNoSchemaAdapter");
167167
new DataMapPrefs(locator.dataMapNode(
168-
PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString())))
168+
PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath())))
169169
.setConnector(connector);
170170

171171
DbImportRunTool isolatedTool = new DbImportRunTool(locator);
@@ -198,7 +198,7 @@ public void jdbcConnectionFailed(@TempDir Path tmp) throws IOException {
198198
connector.setJdbcDriver("org.hsqldb.jdbc.JDBCDriver");
199199
connector.setDbAdapter("org.apache.cayenne.dba.hsqldb.HSQLDBNoSchemaAdapter");
200200
new DataMapPrefs(locator.dataMapNode(
201-
PreferenceNodeIds.idForPath(dataMapFile.toAbsolutePath().toString())))
201+
PreferenceNodeIds.idForPath(dataMapFile.toUri().getRawPath())))
202202
.setConnector(connector);
203203

204204
DbImportRunTool isolatedTool = new DbImportRunTool(locator);

0 commit comments

Comments
 (0)