From fd2bf7e7b0f62df7fade9cb19388c204efd936ff Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Wed, 28 Feb 2024 11:02:03 +0100 Subject: [PATCH 1/3] sprotty.server: replaced usage of internal GSON api (#89) --- .../server/json/PropertyBasedTypeAdapter.java | 53 +------------------ 1 file changed, 2 insertions(+), 51 deletions(-) diff --git a/org.eclipse.sprotty.server/src/main/java/org/eclipse/sprotty/server/json/PropertyBasedTypeAdapter.java b/org.eclipse.sprotty.server/src/main/java/org/eclipse/sprotty/server/json/PropertyBasedTypeAdapter.java index bc67c3a..430fd3b 100644 --- a/org.eclipse.sprotty.server/src/main/java/org/eclipse/sprotty/server/json/PropertyBasedTypeAdapter.java +++ b/org.eclipse.sprotty.server/src/main/java/org/eclipse/sprotty/server/json/PropertyBasedTypeAdapter.java @@ -25,10 +25,9 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; +import com.google.gson.JsonParser; import com.google.gson.TypeAdapter; -import com.google.gson.internal.bind.JsonTreeWriter; import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; /** @@ -116,57 +115,9 @@ protected Field findField(Class type, String propertyName) throws NoSuchField } protected JsonElement toTree(JsonReader in) throws IOException { - JsonTreeWriter writer = new JsonTreeWriter(); - transfer(in, writer); - return writer.get(); + return JsonParser.parseReader(in); } - protected void transfer(JsonReader in, JsonWriter out) throws IOException { - JsonToken token = in.peek(); - switch (token) { - case BEGIN_ARRAY: - in.beginArray(); - out.beginArray(); - while (in.hasNext()) { - transfer(in, out); - } - out.endArray(); - in.endArray(); - break; - - case BEGIN_OBJECT: - in.beginObject(); - out.beginObject(); - while (in.hasNext()) { - out.name(in.nextName()); - transfer(in, out); - } - out.endObject(); - in.endObject(); - break; - - case STRING: - out.value(in.nextString()); - break; - - case NUMBER: - out.value(in.nextDouble()); - break; - - case BOOLEAN: - out.value(in.nextBoolean()); - break; - - case NULL: - in.nextNull(); - out.nullValue(); - break; - - default: - throw new IllegalStateException(); - } - } - @Override public void write(JsonWriter out, T value) throws IOException { if (value == null) { From b508f0094be8d616bb70b1d52b39bfde9c900a13 Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Wed, 28 Feb 2024 13:01:36 +0100 Subject: [PATCH 2/3] manifest-gen: added instruction to add 'Export-Package' directives (#90) --- gradle/manifest-gen.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/manifest-gen.gradle b/gradle/manifest-gen.gradle index e14b85a..3d1e84b 100644 --- a/gradle/manifest-gen.gradle +++ b/gradle/manifest-gen.gradle @@ -23,6 +23,7 @@ jar.bundle.bnd ( 'Bundle-Vendor': 'Eclipse Sprotty', 'Bundle-RequiredExecutionEnvironment': 'JavaSE-11', 'Import-Package': "com.google.common.*;version=\"$versions.guava\", *", + '-exportcontents': 'org.eclipse.sprotty*', "-savemanifest": "build/tmp/bnd/MANIFEST.MF", ) From f17ff502d7bbb25b78e059809fdb0c97a281de7a Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Wed, 28 Feb 2024 12:24:22 +0100 Subject: [PATCH 3/3] examples/runner: consolidated/simplified 'ExampleLauncher' implementation --- .../examples/ExampleEndpointConfigurator.java | 54 ------------------- .../sprotty/examples/ExampleLauncher.java | 30 +++++++++-- 2 files changed, 27 insertions(+), 57 deletions(-) delete mode 100644 examples/runner/src/main/java/org/eclipse/sprotty/examples/ExampleEndpointConfigurator.java diff --git a/examples/runner/src/main/java/org/eclipse/sprotty/examples/ExampleEndpointConfigurator.java b/examples/runner/src/main/java/org/eclipse/sprotty/examples/ExampleEndpointConfigurator.java deleted file mode 100644 index 817e463..0000000 --- a/examples/runner/src/main/java/org/eclipse/sprotty/examples/ExampleEndpointConfigurator.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2019 TypeFox and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ -package org.eclipse.sprotty.examples; - -import jakarta.websocket.server.ServerEndpointConfig; - -import org.eclipse.sprotty.IDiagramServer; -import org.eclipse.sprotty.examples.circlegraph.LayoutSelectionAction; -import org.eclipse.sprotty.server.json.ActionTypeAdapter; -import org.eclipse.sprotty.server.websocket.DiagramServerEndpoint; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.inject.Injector; - -public class ExampleEndpointConfigurator extends ServerEndpointConfig.Configurator { - - private final Injector injector; - - public ExampleEndpointConfigurator(Injector injector) { - this.injector = injector; - } - - @SuppressWarnings("unchecked") - @Override - public T getEndpointInstance(Class endpointClass) throws InstantiationException { - DiagramServerEndpoint endpoint = ((DiagramServerEndpoint) super.getEndpointInstance(endpointClass)); - endpoint.setGson(getGson()); - endpoint.setDiagramServerProvider(injector.getInstance(IDiagramServer.Provider.class)); - return (T) endpoint; - } - - private Gson getGson() { - GsonBuilder builder = new GsonBuilder(); - ActionTypeAdapter.Factory factory = new ActionTypeAdapter.Factory(); - factory.addActionKind(LayoutSelectionAction.KIND, LayoutSelectionAction.class); - builder.registerTypeAdapterFactory(factory); - return builder.create(); - } - -} diff --git a/examples/runner/src/main/java/org/eclipse/sprotty/examples/ExampleLauncher.java b/examples/runner/src/main/java/org/eclipse/sprotty/examples/ExampleLauncher.java index 22ef0fa..f8c9b15 100644 --- a/examples/runner/src/main/java/org/eclipse/sprotty/examples/ExampleLauncher.java +++ b/examples/runner/src/main/java/org/eclipse/sprotty/examples/ExampleLauncher.java @@ -23,17 +23,23 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.WebAppContext; import org.eclipse.jetty.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer; +import org.eclipse.sprotty.IDiagramServer; import org.eclipse.sprotty.examples.circlegraph.CircleGraphModule; +import org.eclipse.sprotty.examples.circlegraph.LayoutSelectionAction; import org.eclipse.sprotty.layout.ElkLayoutEngine; +import org.eclipse.sprotty.server.json.ActionTypeAdapter; +import org.eclipse.sprotty.server.websocket.DiagramServerEndpoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.inject.Guice; import com.google.inject.Injector; public class ExampleLauncher { - private static final Logger LOG = LoggerFactory.getLogger(ExampleLauncher.class); + private static final Logger LOG = LoggerFactory.getLogger(ExampleLauncher.class); public static void main(String[] args) { try { @@ -56,15 +62,33 @@ public void launch() throws Exception { webAppContext.setWelcomeFiles(new String[] { "index.html" }); server.setHandler(webAppContext); + final ServerEndpointConfig.Configurator configurator = new ServerEndpointConfig.Configurator() { + + @SuppressWarnings("unchecked") + @Override + public T getEndpointInstance(Class endpointClass) throws InstantiationException { + DiagramServerEndpoint endpoint = ((LoggingServerEndpoint) super.getEndpointInstance(endpointClass)); + endpoint.setGson(getGson()); + endpoint.setDiagramServerProvider(circleGraphInjector.getInstance(IDiagramServer.Provider.class)); + return (T) endpoint; + } + }; + JakartaWebSocketServletContainerInitializer.configure(webAppContext, (servletContext, serverContainer) -> { serverContainer.addEndpoint(ServerEndpointConfig.Builder .create(LoggingServerEndpoint.class, "/circlegraph") - .configurator(new ExampleEndpointConfigurator(circleGraphInjector)) + .configurator(configurator) .build()); }); server.start(); server.join(); } - + + private Gson getGson() { + final ActionTypeAdapter.Factory factory = new ActionTypeAdapter.Factory(); + factory.addActionKind(LayoutSelectionAction.KIND, LayoutSelectionAction.class); + + return new GsonBuilder().registerTypeAdapterFactory(factory).create(); + } }