diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/Sts4LanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/Sts4LanguageServer.java
index b22b798a3..8b29c305b 100644
--- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/Sts4LanguageServer.java
+++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/Sts4LanguageServer.java
@@ -10,11 +10,10 @@
*******************************************************************************/
package org.springframework.ide.vscode.commons.languageserver;
-import org.eclipse.lsp4j.jsonrpc.services.JsonDelegate;
import org.eclipse.lsp4j.services.LanguageServer;
-import org.springframework.ide.vscode.commons.languageserver.sprotty.SprottyService;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleWorkspaceService;
+import org.springframework.ide.vscode.commons.protocol.java.SprottyProtocol;
/**
* STS4 language server
@@ -22,7 +21,7 @@ import org.springframework.ide.vscode.commons.languageserver.util.SimpleWorkspac
* @author Alex Boyko
*
*/
-public interface Sts4LanguageServer extends LanguageServer {
+public interface Sts4LanguageServer extends LanguageServer, SprottyProtocol {
@Override
SimpleTextDocumentService getTextDocumentService();
@@ -42,8 +41,4 @@ public interface Sts4LanguageServer extends LanguageServer {
*/
DiagnosticService getDiagnosticService();
- @JsonDelegate
- SprottyService getSprottyService();
-
-
}
diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java
index 15e7fc330..0fbf14fcc 100644
--- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java
+++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java
@@ -32,7 +32,6 @@ import org.eclipse.lsp4j.ApplyWorkspaceEditParams;
import org.eclipse.lsp4j.ApplyWorkspaceEditResponse;
import org.eclipse.lsp4j.ClientCapabilities;
import org.eclipse.lsp4j.CodeLensOptions;
-import org.eclipse.lsp4j.CompletionOptions;
import org.eclipse.lsp4j.Diagnostic;
import org.eclipse.lsp4j.DiagnosticSeverity;
import org.eclipse.lsp4j.ExecuteCommandOptions;
@@ -513,6 +512,8 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC
private DiagnosticSeverityProvider severityProvider = DiagnosticSeverityProvider.DEFAULT;
+ private SprottyMessageHandler sprottyMessageHandler;
+
/**
* Convenience method. Subclasses can call this to use a {@link IReconcileEngine} ported
* from old STS codebase to validate a given {@link TextDocument} and publish Diagnostics.
@@ -718,4 +719,16 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC
return hasCompletionSnippetSupport;
}
+ @Override
+ public void sprottyMessage(JsonObject message) {
+ if (this.sprottyMessageHandler != null) {
+ async.execute(() -> this.sprottyMessageHandler.handleMessage(message));
+ }
+ }
+
+ public void onSprottyMessage(SprottyMessageHandler h) {
+ Assert.isNull("Multiple handlers not supported!", this.sprottyMessageHandler);
+ this.sprottyMessageHandler = h;
+ }
+
}
diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SprottyMessageHandler.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SprottyMessageHandler.java
new file mode 100644
index 000000000..de835b45f
--- /dev/null
+++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SprottyMessageHandler.java
@@ -0,0 +1,8 @@
+package org.springframework.ide.vscode.commons.languageserver.util;
+
+import com.google.gson.JsonObject;
+
+@FunctionalInterface
+public interface SprottyMessageHandler {
+ void handleMessage(JsonObject message);
+}
diff --git a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/STS4LanguageClient.java b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/STS4LanguageClient.java
index 626590859..4e6543f9a 100644
--- a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/STS4LanguageClient.java
+++ b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/STS4LanguageClient.java
@@ -24,6 +24,7 @@ import org.springframework.ide.vscode.commons.protocol.java.JavaCodeCompletePara
import org.springframework.ide.vscode.commons.protocol.java.JavaDataParams;
import org.springframework.ide.vscode.commons.protocol.java.JavaSearchParams;
import org.springframework.ide.vscode.commons.protocol.java.JavaTypeHierarchyParams;
+import org.springframework.ide.vscode.commons.protocol.java.SprottyProtocol;
import org.springframework.ide.vscode.commons.protocol.java.TypeData;
import org.springframework.ide.vscode.commons.protocol.java.TypeDescriptorData;
@@ -32,7 +33,7 @@ import org.springframework.ide.vscode.commons.protocol.java.TypeDescriptorData;
*
* @author Kris De Volder
*/
-public interface STS4LanguageClient extends LanguageClient {
+public interface STS4LanguageClient extends LanguageClient, SprottyProtocol {
@JsonNotification("sts/highlight")
void highlight(HighlightParams highlights);
diff --git a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/SprottyClient.java b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/SprottyClient.java
deleted file mode 100644
index bea4f6c7e..000000000
--- a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/SprottyClient.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.springframework.ide.vscode.commons.protocol;
-
-import org.eclipse.lsp4j.jsonrpc.services.JsonNotification;
-
-import com.google.gson.JsonObject;
-
-public interface SprottyClient {
-
- @JsonNotification("sts/progress")
- void sprottyMessage(JsonObject message);
-
-}
diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/sprotty/SprottyService.java b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/java/SprottyProtocol.java
similarity index 63%
rename from headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/sprotty/SprottyService.java
rename to headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/java/SprottyProtocol.java
index 71ebac8e8..8fb155d20 100644
--- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/sprotty/SprottyService.java
+++ b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/java/SprottyProtocol.java
@@ -1,10 +1,10 @@
-package org.springframework.ide.vscode.commons.languageserver.sprotty;
+package org.springframework.ide.vscode.commons.protocol.java;
import org.eclipse.lsp4j.jsonrpc.services.JsonNotification;
import com.google.gson.JsonObject;
-public interface SprottyService {
+public interface SprottyProtocol {
@JsonNotification("sts/sprotty")
void sprottyMessage(JsonObject message);
diff --git a/headless-services/commons/commons-sprotty/pom.xml b/headless-services/commons/commons-sprotty/pom.xml
index 669175c08..c0f680c71 100644
--- a/headless-services/commons/commons-sprotty/pom.xml
+++ b/headless-services/commons/commons-sprotty/pom.xml
@@ -8,6 +8,11 @@
commons-sprotty
+
+ org.springframework.ide.vscode
+ commons-language-server
+ ${project.version}
+
org.springframework.boot
spring-boot-starter
diff --git a/headless-services/commons/commons-sprotty/src/main/java/org/springframework/ide/vscode/commons/sprotty/scan/DiagramWebsocketServer.java b/headless-services/commons/commons-sprotty/src/main/java/org/springframework/ide/vscode/commons/sprotty/scan/DiagramWebsocketServer.java
index 12b02d010..29435c58f 100644
--- a/headless-services/commons/commons-sprotty/src/main/java/org/springframework/ide/vscode/commons/sprotty/scan/DiagramWebsocketServer.java
+++ b/headless-services/commons/commons-sprotty/src/main/java/org/springframework/ide/vscode/commons/sprotty/scan/DiagramWebsocketServer.java
@@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
+import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
import org.springframework.stereotype.Controller;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
@@ -22,6 +23,9 @@ import org.springframework.web.socket.handler.TextWebSocketHandler;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
+
+import reactor.core.publisher.Mono;
@Controller
public class DiagramWebsocketServer implements WebSocketConfigurer, InitializingBean {
@@ -35,6 +39,9 @@ public class DiagramWebsocketServer implements WebSocketConfigurer, Initializing
@Autowired
private IDiagramServer diagramServer;
+ @Autowired
+ private SimpleLanguageServer server;
+
private void initializeGson() {
if (gson == null) {
GsonBuilder builder = new GsonBuilder();
@@ -46,6 +53,15 @@ public class DiagramWebsocketServer implements WebSocketConfigurer, Initializing
@Override
public void afterPropertiesSet() throws Exception {
initializeGson();
+ server.onSprottyMessage((jsonMessage) -> {
+ ActionMessage actionMessage = gson.fromJson(jsonMessage, ActionMessage.class);
+ diagramServer.accept(actionMessage);
+ });
+ server.doOnInitialized(() -> {
+ diagramServer.setRemoteEndpoint(message -> {
+ sendMessage((JsonObject)gson.toJsonTree(message));
+ });
+ });
}
@Override
@@ -73,9 +89,6 @@ public class DiagramWebsocketServer implements WebSocketConfigurer, Initializing
}
log.info("Websocket connection OPENED in: "+this);
log.info("Number of active sessions = {}", ws_sessions.size());
- diagramServer.setRemoteEndpoint(message -> {
- sendMessage(gson.toJson(message, ActionMessage.class));
- });
}
@Override
@@ -116,13 +129,14 @@ public class DiagramWebsocketServer implements WebSocketConfigurer, Initializing
};
}
- private void sendMessage(String msg) {
+ private void sendMessage(JsonObject msg) {
+ server.getClient().sprottyMessage(msg);
synchronized (ws_sessions) {
for (WebSocketSession ws : ws_sessions) {
try {
if (ws.isOpen()) {
log.info("Sent: {}", msg);
- ws.sendMessage(new TextMessage(msg));
+ ws.sendMessage(new TextMessage(msg.toString()));
}
} catch (Exception e) {
log.error("Error forwarding message to ws session", e);
diff --git a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java
index 1b94688f3..6b1685f09 100644
--- a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java
+++ b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java
@@ -132,6 +132,7 @@ import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
import reactor.core.publisher.Mono;
@@ -394,6 +395,10 @@ public class LanguageServerHarness {
return CompletableFuture.completedFuture(Collections.emptyList());
}
+ @Override
+ public void sprottyMessage(JsonObject message) {
+ }
+
});
}