♻️ Create event JSON using Jackson
authorDavid Roden <github-a8in@qsheltier.de>
Sat, 25 Jan 2025 15:41:04 +0000 (16:41 +0100)
committerDavid Roden <github-a8in@qsheltier.de>
Sat, 25 Jan 2025 15:41:04 +0000 (16:41 +0100)
server/pom.xml
server/src/main/java/de/qsheltier/msta/Server.java

index bb53ad9..00b8bb4 100644 (file)
        <name>MSTA – Server</name>
        <description>Manual Software Testing Avoidance – Server Component</description>
 
+       <dependencies>
+               <dependency>
+                       <groupId>com.fasterxml.jackson.core</groupId>
+                       <artifactId>jackson-databind</artifactId>
+               </dependency>
+       </dependencies>
+
 </project>
index f9419a4..0ebfa8a 100644 (file)
@@ -1,5 +1,7 @@
 package de.qsheltier.msta;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import java.awt.Component;
 import java.awt.Frame;
 import java.awt.Window;
@@ -16,6 +18,8 @@ import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketAddress;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Consumer;
@@ -135,7 +139,7 @@ public class Server implements Closeable {
                                                        .filter(window -> !lastOpenWindows.contains(window))
                                                        .toList();
                                        openWindows.stream()
-                                                       .map(window -> "{\"event\":\"new-window\"}")
+                                                       .map(window -> createEvent("new-window"))
                                                        .forEach(writeLine);
 
                                        var openFrames = allWindows.stream()
@@ -144,7 +148,7 @@ public class Server implements Closeable {
                                                        .filter(frame -> !lastOpenFrames.contains(frame))
                                                        .toList();
                                        openFrames.stream()
-                                                       .map(window -> "{\"event\":\"new-frame\"}")
+                                                       .map(frame -> createEvent("new-frame"))
                                                        .forEach(writeLine);
 
                                        lastOpenWindows.addAll(openWindows);
@@ -168,6 +172,17 @@ public class Server implements Closeable {
                }
        }
 
+       private String createEvent(String name) {
+               Map<String, Object> reply = new HashMap<>();
+               reply.put("event", name);
+               try {
+                       return objectMapper.writeValueAsString(reply);
+               } catch (JsonProcessingException e) {
+                       return "";
+               }
+       }
+
+       private final ObjectMapper objectMapper = new ObjectMapper();
        private final ServerSocket serverSocket = new ServerSocket();
        private final Runnable shutdownHook;
        private final AtomicBoolean closed = new AtomicBoolean(false);