- private void interactive() throws IOException {\r
- LineNumberReader in = new LineNumberReader(new InputStreamReader(System.in));\r
- while (true) {\r
- System.out.print(PROMPT);\r
- String line = in.readLine();\r
- if (line == null)\r
- return;\r
- line = line.trim();\r
- if (line.equalsIgnoreCase("exit")) // "exit" may only be used in interactive mode\r
- return;\r
- if (line.equalsIgnoreCase("quit")) // "quit" may only be used in interactive mode\r
- return;\r
- String[] args = line.split("[ \t]+");\r
- if (args.length > 0)\r
- runCommand(args);\r
- }\r
- }\r
+ /**\r
+ * Run the command specified by the arguments.\r
+ *\r
+ * @param args The command line arguments.\r
+ * @return true if the command was valid and succeeded\r
+ */\r
+ public boolean runCommand(String[] args) {\r
+ String cmd = args[0].trim().toLowerCase();\r
+ if (cmd.equals("add")) {\r
+ if (args.length > 2) {\r
+ if (args[1].startsWith("in") && args.length >= 6) {\r
+ return addIngress(args);\r
+ }\r
+ if (args[1].startsWith("eg") && args.length == 4) {\r
+ return addEgress(args);\r
+ }\r
+ if (args[1].startsWith("ne") && args.length == 5) {\r
+ return addRoute(args);\r
+ }\r
+ }\r
+ System.err.println("Add command should be one of:");\r
+ System.err.println(" add in[gress] feedid user subnet nodepatt [ seq ]");\r
+ System.err.println(" add eg[ress] subid node");\r
+ System.err.println(" add ne[twork] fromnode tonode vianode");\r
+ } else if (cmd.startsWith("del")) {\r
+ if (args.length > 2) {\r
+ if (args[1].startsWith("in") && args.length == 5) {\r
+ return delIngress(args);\r
+ }\r
+ if (args[1].startsWith("in") && args.length == 3) {\r
+ return delIngress(args);\r
+ }\r
+ if (args[1].startsWith("eg") && args.length == 3) {\r
+ return delEgress(args);\r
+ }\r
+ if (args[1].startsWith("ne") && args.length == 4) {\r
+ return delRoute(args);\r
+ }\r
+ }\r
+ System.err.println("Delete command should be one of:");\r
+ System.err.println(" del in[gress] feedid user subnet");\r
+ System.err.println(" del in[gress] seq");\r
+ System.err.println(" del eg[ress] subid");\r
+ System.err.println(" del ne[twork] fromnode tonode");\r
+ } else if (cmd.startsWith("lis")) {\r
+ return list(args);\r
+ } else if (cmd.startsWith("wid") && args.length > 1) {\r
+ width = Integer.parseInt(args[1]);\r
+ return true;\r
+ } else if (cmd.startsWith("?") || cmd.startsWith("hel") || cmd.startsWith("usa")) {\r
+ usage();\r
+ } else if (cmd.startsWith("#")) {\r
+ // comment -- ignore\r
+ } else {\r
+ System.err.println("Command should be one of add, del, list, exit, quit");\r
+ }\r
+ return false;\r
+ }\r