♻️ Use a JSON object node instead of a Map
authorDavid Roden <github-a8in@qsheltier.de>
Sun, 26 Jan 2025 18:31:10 +0000 (19:31 +0100)
committerDavid Roden <github-a8in@qsheltier.de>
Sun, 26 Jan 2025 18:31:10 +0000 (19:31 +0100)
server/src/main/java/de/qsheltier/msta/Server.java

index 8b42f90..bd7fd3f 100644 (file)
@@ -1,7 +1,9 @@
 package de.qsheltier.msta;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.awt.Component;
 import java.awt.Frame;
 import java.awt.Window;
@@ -17,7 +19,6 @@ import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketAddress;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -134,7 +135,7 @@ public class Server implements Closeable {
                        var newWindows = currentlyOpenWindows.stream().filter(window -> !windows.containsValue(window)).toList();
                        newWindows.forEach(newWindow -> {
                                synchronized (outputWriters) {
-                                       outputWriters.forEach(writeLine -> writeLine.accept(createEvent("window-opened", new Pair("id", newWindow.getName()), new Pair("is-frame", newWindow instanceof Frame))));
+                                       outputWriters.forEach(writeLine -> writeLine.accept(createEvent("window-opened", objectMapper.createObjectNode().put("id", newWindow.getName()).put("is-frame", newWindow instanceof Frame))));
                                }
                                windows.put(newWindow.getName(), newWindow);
                        });
@@ -155,7 +156,7 @@ public class Server implements Closeable {
                                }
                        };
                        try (var inputReader = new BufferedReader(new InputStreamReader(inputStream))) {
-                               writeLine.accept(createEvent("connected"));
+                               writeLine.accept(createEvent("connected", objectMapper.createObjectNode()));
                                synchronized (outputWriters) {
                                        outputWriters.add(writeLine);
                                }
@@ -169,7 +170,7 @@ public class Server implements Closeable {
                                        if (words.getFirst().equalsIgnoreCase("info") && (words.size() == 3) && words.get(1).equalsIgnoreCase("window")) {
                                                var windowName = words.get(2);
                                                stream(Window.getWindows()).filter(window -> window.getName().equals(windowName))
-                                                               .forEach(window -> writeLine.accept(createMessage(new Pair("info", "window"), new Pair("id", window.getName()))));
+                                                               .forEach(window -> writeLine.accept(createMessage(objectMapper.createObjectNode().put("info", "window").put("id", window.getName()))));
                                        }
                                }
                        } finally {
@@ -180,16 +181,14 @@ public class Server implements Closeable {
                }
        }
 
-       private String createEvent(String name, Pair... parameters) {
-               return createMessage(new Pair("event", name), parameters);
+       private String createEvent(String name, ObjectNode parameters) {
+               parameters.put("event", name);
+               return createMessage(parameters);
        }
 
-       private String createMessage(Pair messageName, Pair... parameters) {
-               Map<String, Object> reply = new HashMap<>();
-               reply.put(messageName.first, messageName.second);
-               stream(parameters).forEach(pair -> reply.put(pair.first, pair.second));
+       private String createMessage(JsonNode messageNode) {
                try {
-                       return objectMapper.writeValueAsString(reply);
+                       return objectMapper.writeValueAsString(messageNode);
                } catch (JsonProcessingException e) {
                        return "";
                }
@@ -202,6 +201,4 @@ public class Server implements Closeable {
        private final Set<Consumer<String>> outputWriters = new HashSet<>();
        private final Map<String, Window> windows = new ConcurrentHashMap<>();
 
-       private record Pair(String first, Object second) {}
-
 }