diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2018-10-25 19:50:08 -0400 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2018-10-25 19:50:08 -0400 |
| commit | 3e5e991e8c7a6f30b224522efeb2dd177d598ffa (patch) | |
| tree | a46904a2dcc581c3c551a4849d58ceddb9c79499 /base/src/main/java/bjc/utils/cli/objects/BlockReaderCLI.java | |
| parent | 3db013fc7ec8b242f1a7456910484063fba7e938 (diff) | |
General work on commands
Diffstat (limited to 'base/src/main/java/bjc/utils/cli/objects/BlockReaderCLI.java')
| -rw-r--r-- | base/src/main/java/bjc/utils/cli/objects/BlockReaderCLI.java | 185 |
1 files changed, 105 insertions, 80 deletions
diff --git a/base/src/main/java/bjc/utils/cli/objects/BlockReaderCLI.java b/base/src/main/java/bjc/utils/cli/objects/BlockReaderCLI.java index 64b56fc..bf8fc11 100644 --- a/base/src/main/java/bjc/utils/cli/objects/BlockReaderCLI.java +++ b/base/src/main/java/bjc/utils/cli/objects/BlockReaderCLI.java @@ -23,6 +23,47 @@ import static bjc.utils.cli.objects.Command.CommandStatus.*; * @author Ben Culkin */ public class BlockReaderCLI { + /** + * The state of the block reader. + * + * @author Ben Culkin + */ + public static final class BlockReaderState { + /** + * All of the configured block readers. + */ + public final Map<String, BlockReader> readers; + /** + * All of the configured I/O sources. + */ + public final Map<String, Reader> sources; + + /** + * Create a new set of state for the block reader. + * + * @param readers + * The set of configured block readers. + * + * @param sources + * The set of configured I/O sources. + */ + public BlockReaderState(Map<String, BlockReader> readers, Map<String, Reader> sources) { + this.readers = readers; + this.sources = sources; + } + + /** + * Create a new set of state for the block reader. + * + * @param sources + * The set of configured I/O sources. + */ + public BlockReaderState(Map<String, Reader> sources) { + this.readers = new HashMap<>(); + this.sources = sources; + } + } + /* Logger. */ private final Logger LOGGER = Logger.getLogger(BlockReaderCLI.class.getName()); @@ -33,17 +74,17 @@ public class BlockReaderCLI { * Create a new CLI for configuring BlockReaders. * * @param srcs - * The container of initial I/O sources. + * The container of initial I/O sources. */ public BlockReaderCLI(Map<String, Reader> srcs) { - stat = new BlockReaderState(new HashMap<>(), srcs); + stat = new BlockReaderState(srcs); } /** * Create a new CLI for configuring BlockReaders. * * @param state - * The state object to use. + * The state object to use. */ public BlockReaderCLI(BlockReaderState state) { stat = state; @@ -54,7 +95,7 @@ public class BlockReaderCLI { * Run the command line interface * * @param args - * Ignored CLI args. + * Ignored CLI args. */ public static void main(String[] args) { /* Create/configure I/O sources. */ @@ -72,60 +113,53 @@ public class BlockReaderCLI { * Run the CLI on an input source. * * @param input - * The place to read input from. + * The place to read input from. * - * @param ioSource - * The name of the place to read input from. + * @param srcName + * The name of the place to read input from. * * @param interactive - * Whether or not the source is interactive + * Whether or not the source is interactive */ - public void run(Scanner input, String ioSource, boolean interactive) { + public void run(Scanner input, String srcName, boolean interactive) { int lno = 0; - /* Print a prompt. */ - if(interactive) { - System.out.printf("reader-conf(%d)>", lno); - } + do { + /* Print a prompt. */ + if (interactive) { + System.out.printf("reader-conf(%d)>", lno); + } - while(input.hasNextLine()) { /* Read a line. */ String ln = input.nextLine(); lno += 1; /* Parse the command. */ - Command com = Command.fromString(ln, lno, ioSource); + Command com = Command.fromString(ln, lno, srcName); /* Ignore blank commands. */ - if(com == null) continue; + if (com == null) continue; /* Handle a command. */ - CommandStatus stt = handleCommand(com, interactive); + CommandStatus sts = handleCommand(com, interactive); /* Exit if we finished or encountered a fatal error. */ - if(stt == FINISH || stt == ERROR) { - return; - } - - /* Print a prompt. */ - if(interactive) { - System.out.printf("reader-conf(%d)>", lno); - } - - } + if (sts == FINISH || sts == ERROR) { return; } + } while (input.hasNextLine()); } /** * Handle a command. * * @param com - * The command to handle + * The command to handle * * @param interactive - * Whether the current input source is interactive or not. + * Whether the current input source is interactive or + * not. * @return The status of the executed command. */ public CommandStatus handleCommand(Command com, boolean interactive) { /* Handle each command. */ - switch(com.nameCommand) { + switch (com.name) { case "def-filtered": return defFiltered(com); case "def-layered": @@ -142,57 +176,48 @@ public class BlockReaderCLI { case "end": case "exit": case "quit": - if(interactive) System.out.printf("Exiting reader-conf, %d readers configured in %d commands\n", - stat.readers.size(), com.lineNo); + if (interactive) + System.out.printf("Exiting reader-conf, %d readers configured in %d commands\n", + stat.readers.size(), com.lno); return FINISH; default: - LOGGER.severe(com.error("Unknown command '%s'\n", com.nameCommand)); + LOGGER.severe(com.error("Unknown command '%s'\n", com.name)); return FAIL; } } private CommandStatus defFiltered(Command com) { - String remn = com.remnCommand; - /* * Get the block name. */ - /* - * @TODO 02/17/18 Ben Culkin :StringHandling - * This slicing up strings by indexed characters should be abstracted into some - * sort of class. - */ - int idx = remn.indexOf(' '); - if(idx == -1) { + + String blockName = com.trimTo(' '); + if (blockName == null) { LOGGER.severe(com.error("No name argument for def-filtered.\n")); return FAIL; } - String blockName = remn.substring(0, idx).trim(); - remn = remn.substring(idx).trim(); /* * Check there isn't a reader already bound to this name. */ - if(stat.readers.containsKey(blockName)) { + if (stat.readers.containsKey(blockName)) { LOGGER.warning(com.warn("Shadowing existing reader named %s\n", blockName)); } /* * Get the reader name. */ - /* :StringHandling */ - idx = remn.indexOf(' '); - if(idx == -1) { + + String readerName = com.trimTo(' '); + if (readerName == null) { LOGGER.severe(com.error("No reader-name argument for def-filtered.\n")); return FAIL; } - String readerName = remn.substring(0, idx).trim(); - remn = remn.substring(idx).trim(); /* * Check there is a reader bound to that name. */ - if(!stat.readers.containsKey(readerName)) { + if (!stat.readers.containsKey(readerName)) { LOGGER.severe(com.error("No source named %s\n", readerName)); return FAIL; } @@ -200,12 +225,12 @@ public class BlockReaderCLI { /* * Get the pattern. */ - if(remn.equals("")) { + if (com.remn.equals("")) { LOGGER.severe(com.error("No filter argument for def-filtered\n")); return FAIL; } - String filter = remn; + String filter = com.remn; try { Pattern pat = Pattern.compile(filter); @@ -219,7 +244,7 @@ public class BlockReaderCLI { BlockReader reader = new FilteredBlockReader(stat.readers.get(readerName), pred); stat.readers.put(blockName, reader); - } catch(PatternSyntaxException psex) { + } catch (PatternSyntaxException psex) { LOGGER.severe(com.error("Invalid regular expression '%s' for filter. (%s)\n", filter, psex.getMessage())); return FAIL; @@ -229,22 +254,22 @@ public class BlockReaderCLI { } private CommandStatus defPushback(Command com) { - String[] parts = com.remnCommand.split(" "); + String[] parts = com.remn.split(" "); - if(parts.length != 2) { + if (parts.length != 2) { LOGGER.severe(com.error( "Incorrect number of arguments to def-pushback. Requires a block name and a reader name\n")); return FAIL; } String blockName = parts[0]; - if(stat.readers.containsKey(blockName)) { + if (stat.readers.containsKey(blockName)) { LOGGER.warning(com.warn("Shadowing existing reader %s\n", blockName)); return FAIL; } String readerName = parts[1]; - if(!stat.readers.containsKey(readerName)) { + if (!stat.readers.containsKey(readerName)) { LOGGER.severe(com.error("No reader named %s\n", readerName)); return FAIL; } @@ -256,9 +281,9 @@ public class BlockReaderCLI { } private CommandStatus defToggled(Command com) { - String[] parts = com.remnCommand.split(" "); + String[] parts = com.remn.split(" "); - if(parts.length != 3) { + if (parts.length != 3) { LOGGER.severe(com.error( "Incorrect number of arguments to def-toggled. Requires a block name and two reader names\n")); return FAIL; @@ -268,19 +293,19 @@ public class BlockReaderCLI { * Get the block name. */ String blockName = parts[0]; - if(stat.readers.containsKey(blockName)) { + if (stat.readers.containsKey(blockName)) { LOGGER.warning(com.warn("Shadowing existing reader named %s\n", blockName)); } /* * Make sure the component readers exist. */ - if(!stat.readers.containsKey(parts[1])) { + if (!stat.readers.containsKey(parts[1])) { LOGGER.severe(com.error("No reader named %s\n", parts[1])); return FAIL; } - if(!stat.readers.containsKey(parts[2])) { + if (!stat.readers.containsKey(parts[2])) { LOGGER.severe(com.error("No reader named %s\n", parts[2])); return FAIL; } @@ -292,9 +317,9 @@ public class BlockReaderCLI { } private CommandStatus defLayered(Command com) { - String[] parts = com.remnCommand.split(" "); + String[] parts = com.remn.split(" "); - if(parts.length != 3) { + if (parts.length != 3) { LOGGER.severe(com.error( "Incorrect number of arguments to def-layered. Requires a block name and two reader names\n")); return FAIL; @@ -304,19 +329,19 @@ public class BlockReaderCLI { * Get the block name. */ String blockName = parts[0]; - if(stat.readers.containsKey(blockName)) { + if (stat.readers.containsKey(blockName)) { LOGGER.warning(com.warn("Shadowing existing reader named %s\n", blockName)); } /* * Make sure the component readers exist. */ - if(!stat.readers.containsKey(parts[1])) { + if (!stat.readers.containsKey(parts[1])) { LOGGER.severe(com.error("No reader named %s\n", parts[1])); return FAIL; } - if(!stat.readers.containsKey(parts[2])) { + if (!stat.readers.containsKey(parts[2])) { LOGGER.severe(com.error("No reader named %s\n", parts[2])); return FAIL; } @@ -328,9 +353,9 @@ public class BlockReaderCLI { } private CommandStatus defSerial(Command com) { - String[] parts = com.remnCommand.split(" "); + String[] parts = com.remn.split(" "); - if(parts.length < 2) { + if (parts.length < 2) { LOGGER.severe(com.error( "Not enough arguments to def-serial. Requires at least a block name and at least one reader name\n")); return FAIL; @@ -343,7 +368,7 @@ public class BlockReaderCLI { /* * Check there isn't a reader already bound to this name. */ - if(stat.readers.containsKey(blockName)) { + if (stat.readers.containsKey(blockName)) { LOGGER.warning(com.warn("Shadowing existing reader named %s\n", blockName)); } @@ -351,13 +376,13 @@ public class BlockReaderCLI { * Get all of the component readers. */ BlockReader[] readerArr = new BlockReader[parts.length - 1]; - for(int i = 1; i < parts.length; i++) { + for (int i = 1; i < parts.length; i++) { String readerName = parts[i]; /* * Check there is a reader bound to that name. */ - if(!stat.readers.containsKey(readerName)) { + if (!stat.readers.containsKey(readerName)) { LOGGER.severe(com.error("No reader named %s\n", readerName)); return FAIL; } @@ -373,14 +398,14 @@ public class BlockReaderCLI { } private CommandStatus defSimple(Command com) { - String remn = com.remnCommand; + String remn = com.remn; /* * Get the block name. */ /* :StringHandling */ int idx = remn.indexOf(' '); - if(idx == -1) { + if (idx == -1) { LOGGER.severe(com.error("No name argument for def-simple.\n")); return FAIL; } @@ -390,7 +415,7 @@ public class BlockReaderCLI { /* * Check there isn't a reader already bound to this name. */ - if(stat.readers.containsKey(blockName)) { + if (stat.readers.containsKey(blockName)) { LOGGER.warning(com.warn("Shadowing existing reader named %s\n", blockName)); } @@ -399,7 +424,7 @@ public class BlockReaderCLI { */ /* :StringHandling */ idx = remn.indexOf(' '); - if(idx == -1) { + if (idx == -1) { LOGGER.severe(com.error("No source-name argument for def-simple.\n")); return FAIL; } @@ -409,7 +434,7 @@ public class BlockReaderCLI { /* * Check there is a source bound to that name. */ - if(!stat.sources.containsKey(sourceName)) { + if (!stat.sources.containsKey(sourceName)) { LOGGER.severe(com.error("No source named %s\n", sourceName)); return FAIL; } @@ -417,7 +442,7 @@ public class BlockReaderCLI { /* * Get the pattern. */ - if(remn.equals("")) { + if (remn.equals("")) { LOGGER.severe(com.error("No delimiter argument for def-simple\n")); return FAIL; } @@ -429,7 +454,7 @@ public class BlockReaderCLI { BlockReader reader = new SimpleBlockReader(delim, stat.sources.get(sourceName)); stat.readers.put(blockName, reader); - } catch(PatternSyntaxException psex) { + } catch (PatternSyntaxException psex) { LOGGER.severe(com.error("Invalid regular expression '%s' for delimiter. (%s)\n", delim, psex.getMessage())); return FAIL; |
