Add CommandParserDispatcher to dispatch PrimitiveRequest to matching CommandParser #188
+15
@@ -0,0 +1,15 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
+36
@@ -0,0 +1,36 @@
|
|||||||
|
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<String, CommandParser> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package ch.unibas.dmi.dbis.cs108.casono.server.network.parser;
|
||||||
|
|
||||||
|
/** Request, produced by the CommandParser */
|
||||||
|
public interface Request {}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user