From 92c8eae71fd662c2b7e76b17309c1b2f91c38d41 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Mon, 2 Dec 2024 17:12:19 -0500 Subject: client cli --- src/main/java/derms/client/CLI.java | 86 ++++++++++++++++++++++ src/main/java/derms/client/ResponderClient.java | 27 +------ src/main/java/derms/client/ResponderClientCLI.java | 53 +++++++++++++ 3 files changed, 141 insertions(+), 25 deletions(-) create mode 100644 src/main/java/derms/client/CLI.java create mode 100644 src/main/java/derms/client/ResponderClientCLI.java 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 commands = new HashMap(); + protected List cmdDescriptions = new ArrayList(); + protected List argDescriptions = new ArrayList(); + + 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 "; - - 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 "; + + private final ResponderClient client; + + private ResponderClientCLI(String FEhost) throws MalformedURLException { + client = new ResponderClient(FEhost); + + commands.put("add", new Add()); + cmdDescriptions.add(new Description( + "add ", + "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); + } + } +} -- cgit v1.2.3