diff options
| -rw-r--r-- | src/main/java/derms/client/CLI.java | 86 | ||||
| -rw-r--r-- | src/main/java/derms/client/ResponderClient.java | 27 | ||||
| -rw-r--r-- | src/main/java/derms/client/ResponderClientCLI.java | 53 |
3 files changed, 141 insertions, 25 deletions
diff --git a/src/main/java/derms/client/CLI.java b/src/main/java/derms/client/CLI.java new file mode 100644 index 0000000..05f4e35 --- /dev/null +++ b/src/main/java/derms/client/CLI.java @@ -0,0 +1,86 @@ +package derms.client; + +import java.util.*; + +abstract class CLI implements Runnable { + protected Map<String, Command> commands = new HashMap<String, Command>(); + protected List<Description> cmdDescriptions = new ArrayList<Description>(); + protected List<Description> argDescriptions = new ArrayList<Description>(); + + protected CLI() { + commands.put("quit", new Quit()); + cmdDescriptions.add(new Description("quit", "Exit the program")); + + commands.put("help", new Help()); + cmdDescriptions.add(new Description("help", "List commands")); + } + + @Override + public void run() { + Scanner scanner = new Scanner(System.in); + System.out.println("Type 'help' for a list of commands."); + for (;;) { + System.out.print("Command: "); + String input = scanner.nextLine(); + String[] fields = input.split(" "); + if (fields.length < 1 || fields[0] == "") { + continue; + } + Command cmd = commands.get(fields[0]); + if (cmd == null) { + System.out.println("Invalid command '"+fields[0]+"'"); + System.out.println("Type 'help' for a list of commands."); + continue; + } + String[] args = null; + if (fields.length < 2) { + args = new String[0]; + } else { + args = Arrays.copyOfRange(fields, 1, fields.length); + } + cmd.exec(args); + } + } + + protected interface Command { + public void exec(String[] args); + } + + protected class Quit implements Command { + @Override + public void exec(String[] args) { + System.out.println("Shutting down..."); + System.exit(1); + } + } + + protected class Help implements Command { + @Override + public void exec(String[] args) { + System.out.println("\nCommands:"); + for (Description d : cmdDescriptions) { + System.out.println(d); + } + System.out.println("\nArguments:"); + for (Description d : argDescriptions) { + System.out.println(d); + } + System.out.println(); + } + } + + protected class Description { + String object; /// The thing being described + String description; + + protected Description(String object, String description) { + this.object = object; + this.description = description; + } + + @Override + public String toString() { + return object+"\n\t"+description; + } + } +} diff --git a/src/main/java/derms/client/ResponderClient.java b/src/main/java/derms/client/ResponderClient.java index af5dc3d..2c9cb1f 100644 --- a/src/main/java/derms/client/ResponderClient.java +++ b/src/main/java/derms/client/ResponderClient.java @@ -2,34 +2,11 @@ package derms.client; import java.net.MalformedURLException; -public class ResponderClient extends Client { - public static final String usage = "Usage: java derms.client.ResponderClienet <FE host>"; - - public ResponderClient(String FEhost) throws MalformedURLException { +class ResponderClient extends Client { + ResponderClient(String FEhost) throws MalformedURLException { super(FEhost); } - public static void main(String[] args) { - if (args.length < 1) { - System.err.println("Missing argument 'FE host'"); - System.exit(1); - } - - String FEhost = args[0]; - - ResponderClient client = null; - try { - client = new ResponderClient(FEhost); - } catch (MalformedURLException e) { - System.err.println(e.getMessage()); - System.exit(1); - } - - System.out.println("Adding resource..."); - String response = client.addResource("MTL1234", "AMBULANCE", 100); - System.out.println("Response: " + response); - } - public String addResource(String resourceID, String resourceName, int duration) { return server.addResource(resourceID, resourceName, duration); } diff --git a/src/main/java/derms/client/ResponderClientCLI.java b/src/main/java/derms/client/ResponderClientCLI.java new file mode 100644 index 0000000..3b41bf9 --- /dev/null +++ b/src/main/java/derms/client/ResponderClientCLI.java @@ -0,0 +1,53 @@ +package derms.client; + +import java.net.MalformedURLException; + +public class ResponderClientCLI extends CLI { + public static final String usage = "Usage: java derms.client.ResponderClientCLI <FE host>"; + + private final ResponderClient client; + + private ResponderClientCLI(String FEhost) throws MalformedURLException { + client = new ResponderClient(FEhost); + + commands.put("add", new Add()); + cmdDescriptions.add(new Description( + "add <resource ID> <resource type> <duration>", + "Add ad resource to the server")); + } + + public static void main(String[] args) { + if (args.length < 1) { + System.err.println("Missing argument 'FE host'"); + System.exit(1); + } + + String FEhost = args[0]; + + try { + (new ResponderClientCLI(FEhost)).run(); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + + private class Add implements Command { + @Override + public void exec(String[] args) { + if (args.length < 3) { + System.out.println("invalid arguments for 'add'"); + } else { + add(args[0], args[1], args[2]); + } + } + + private void add(String resourceID, String resourceName, String durationStr) { + int duration = Integer.parseInt(durationStr); + if (duration < 0) { + throw new NumberFormatException("duration less than 0"); + } + String response = client.addResource(resourceID, resourceName, duration); + System.out.println(response); + } + } +} |