From 80c7e1c25d8ca0847815f88fee3f16000fc2118e Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Sun, 15 Mar 2026 17:04:41 +0100 Subject: [PATCH] Add: CommandParserDispatcher to dispatch PrimitiveRequest to match CommandParser --- .../parser/CommandParserDispatcher.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParserDispatcher.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParserDispatcher.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParserDispatcher.java new file mode 100644 index 0000000..c2d1d9f --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParserDispatcher.java @@ -0,0 +1,34 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; + +import java.util.HashMap; +import java.util.Map; + +/** Dispatcher all CommandParser are registered in */ +public class CommandParserDispatcher { + private final Map parsers = new HashMap<>(); + + /** + * Register a new CommandParser + * @param command + * @param parser the parser class + */ + public void register(String command, CommandParser parser) { + parsers.put(command, parser); + } + + /** + * Parses the PrimitiveRequest into a Request using the appropriate CommandParser + * @param primitiveRequest the PrimitiveRequest to parse + * @return the parsed Request object + */ + public Request parse(PrimitiveRequest primitiveRequest) { + String command = primitiveRequest.command(); + CommandParser parser = parsers.get(command); + + if (parser == null) { + throw new UnknownCommandException(command); + } + + return parser.parse(primitiveRequest); + } +}