From 4e853cf35f9d4532f2638a1b070f5a028e2c304c Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Sun, 15 Mar 2026 16:53:03 +0100 Subject: [PATCH 1/4] Add: Interfaces used by the CommandParserDispatcher --- .../casono/server/network/parser/CommandParser.java | 11 +++++++++++ .../cs108/casono/server/network/parser/Request.java | 6 ++++++ 2 files changed, 17 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParser.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParser.java new file mode 100644 index 0000000..1e44499 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParser.java @@ -0,0 +1,11 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; + +/** Parser to convert the PrimitiveRequest to a Request and performing checks for required fields and data types */ +public interface CommandParser { + /** + * Parses the provided PrimitiveRequest into a command-specific request + * @param primitiveRequest + * @return + */ + Request parse(PrimitiveRequest primitiveRequest); +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java new file mode 100644 index 0000000..a0187f1 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java @@ -0,0 +1,6 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; + +/** Request, produced by the CommandParser */ +public interface Request { + +} -- 2.52.0 From 135e6a53278e790d5f13bc1fe4d20437efeefedf Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Sun, 15 Mar 2026 16:53:29 +0100 Subject: [PATCH 2/4] Add: Exception to be thrown if no matching CommandParser is found --- .../server/network/parser/UnknownCommandException.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/UnknownCommandException.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/UnknownCommandException.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/UnknownCommandException.java new file mode 100644 index 0000000..f7c0bee --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/UnknownCommandException.java @@ -0,0 +1,9 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; + +/** Exception thrown when the CommandParserDispatcher has no registered handler for the provided + * request */ +public class UnknownCommandException extends RuntimeException{ + public UnknownCommandException(String message) { + super(message); + } +} -- 2.52.0 From 80c7e1c25d8ca0847815f88fee3f16000fc2118e Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Sun, 15 Mar 2026 17:04:41 +0100 Subject: [PATCH 3/4] 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); + } +} -- 2.52.0 From f7f570638b3163ad601f18d0bcf26e1deaa06538 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Sun, 15 Mar 2026 17:06:19 +0100 Subject: [PATCH 4/4] Style: Correct JavaDoc comments and remove trailing whitespaces --- .../cs108/casono/server/network/parser/CommandParser.java | 6 +++++- .../server/network/parser/CommandParserDispatcher.java | 6 ++++-- .../dbis/cs108/casono/server/network/parser/Request.java | 4 +--- .../server/network/parser/UnknownCommandException.java | 8 +++++--- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParser.java index 1e44499..ae00bca 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/CommandParser.java @@ -1,9 +1,13 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; -/** Parser to convert the PrimitiveRequest to a Request and performing checks for required fields and data types */ +/** + * Parser to convert the PrimitiveRequest to a Request and performing checks for required fields and + * data types + */ public interface CommandParser { /** * Parses the provided PrimitiveRequest into a command-specific request + * * @param primitiveRequest * @return */ 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 index c2d1d9f..722815c 100644 --- 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 @@ -8,8 +8,9 @@ public class CommandParserDispatcher { private final Map parsers = new HashMap<>(); /** - * Register a new CommandParser - * @param command + * Register a new CommandParser + * + * @param command * @param parser the parser class */ public void register(String command, CommandParser parser) { @@ -18,6 +19,7 @@ public class CommandParserDispatcher { /** * Parses the PrimitiveRequest into a Request using the appropriate CommandParser + * * @param primitiveRequest the PrimitiveRequest to parse * @return the parsed Request object */ diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java index a0187f1..4018a31 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java @@ -1,6 +1,4 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; /** Request, produced by the CommandParser */ -public interface Request { - -} +public interface Request {} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/UnknownCommandException.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/UnknownCommandException.java index f7c0bee..5048d70 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/UnknownCommandException.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/UnknownCommandException.java @@ -1,8 +1,10 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; -/** Exception thrown when the CommandParserDispatcher has no registered handler for the provided - * request */ -public class UnknownCommandException extends RuntimeException{ +/** + * Exception thrown when the CommandParserDispatcher has no registered handler for the provided + * request + */ +public class UnknownCommandException extends RuntimeException { public UnknownCommandException(String message) { super(message); } -- 2.52.0