This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 8d67464989a75b2c2d5433f43c9bc8d358eed309 Author: Andrus Adamchik <[email protected]> AuthorDate: Tue May 19 12:09:45 2026 -0400 CAY-2943 cleanup, refactoring --- .../cayenne/mcp/tools/openproject/OpenProjectTool.java | 18 ++++++++++++------ .../mcp/tools/openproject/HandshakeWatcherTest.java | 3 ++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/openproject/OpenProjectTool.java b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/openproject/OpenProjectTool.java index b29e6d270..c67a179be 100644 --- a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/openproject/OpenProjectTool.java +++ b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/openproject/OpenProjectTool.java @@ -134,14 +134,20 @@ public class OpenProjectTool { // Step 3 — discover a Modeler installation. OsKind osKind = OsKind.detect(); DiscoveryResult discovery = ModelerDiscovery.discover(mcpDir.get(), osKind); - if (discovery instanceof NotFound nf) { - String notes = String.join("; ", nf.probeNotes()); - return validationFailed(OpenProjectErrorCode.modeler_not_found, + return switch (discovery) { + case Found f -> launchAndAwait(f, projectFile); + case NotFound nf -> validationFailed(OpenProjectErrorCode.modeler_not_found, "No CayenneModeler installation found relative to MCP jar at %s. Probes: %s" - .formatted(mcpDir.get(), notes), + .formatted(mcpDir.get(), String.join("; ", nf.probeNotes())), new OpenProjectValidation(true, true, false)); - } - Found found = (Found) discovery; + }; + } + + /** + * Steps 4-5 of the open-project flow: spawn the Modeler with the handshake nonce + * and wait for it to confirm a successful project load. + */ + private OpenProjectResult launchAndAwait(Found found, Path projectFile) { OpenProjectValidation allPassed = new OpenProjectValidation(true, true, true); // Step 4 — launch. diff --git a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/openproject/HandshakeWatcherTest.java b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/openproject/HandshakeWatcherTest.java index 79af1435a..a429405a6 100644 --- a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/openproject/HandshakeWatcherTest.java +++ b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/openproject/HandshakeWatcherTest.java @@ -52,7 +52,8 @@ public class HandshakeWatcherTest { @Test public void handshakeReceivedReadsPidAndPath() throws BackingStoreException { - Preferences node = Preferences.userRoot() + Preferences node = Preferences + .userRoot() .node(HandshakeWatcher.NODE_PREFIX + "/" + nonce); node.putLong("pid", 4242L); node.put("startedAt", "2026-05-17T10:00:00Z");
