private void displayError(String cmd, String message) { for (String line : message.split("\n")) { System.err.println(cmd + ": " + line); if (cmd.charAt(0) != '-') { Command instance = null; instance = commandFactory.getInstance("-" + cmd); if (instance != null) { System.err.println("Did you mean -" + cmd + "? This command " + "begins with a dash."); } } } }
protected void init() throws IOException { getConf().setQuietMode(true); UserGroupInformation.setConfiguration(getConf()); if (commandFactory == null) { commandFactory = new CommandFactory(getConf()); commandFactory.addObject(new Help(), "-help"); commandFactory.addObject(new Usage(), "-usage"); registerCommands(commandFactory); } }
/** * Returns an instance of the class implementing the given command. The * class must have been registered via * {@link #addClass(Class, String...)} * @param cmd name of the command * @return instance of the requested command */ public Command getInstance(String cmd) { return getInstance(cmd, getConf()); }
private void printInfo(PrintStream out, String cmd, boolean showHelp) { if (cmd != null) { Command instance = commandFactory.getInstance("-" + cmd); if (instance == null) { throw new UnknownCommandException(cmd); for (String name : commandFactory.getNames()) { Command instance = commandFactory.getInstance(name); if (!instance.isDeprecated()) { out.println("\t[" + instance.getUsage() + "]");
@Test public void testRegistration() { assertArrayEquals(new String []{}, factory.getNames()); factory.registerCommands(TestRegistrar.class); String [] names = factory.getNames(); assertArrayEquals(new String []{"tc1", "tc2", "tc2.1"}, names); factory.addClass(TestCommand3.class, "tc3"); names = factory.getNames(); assertArrayEquals(new String []{"tc1", "tc2", "tc2.1", "tc3"}, names); }
/** * Register the command classes used by the fs subcommand * @param factory where to register the class */ public static void registerCommands(CommandFactory factory) { factory.registerCommands(AclCommands.class); factory.registerCommands(CopyCommands.class); factory.registerCommands(Count.class); factory.registerCommands(Delete.class); factory.registerCommands(Display.class); factory.registerCommands(Find.class); factory.registerCommands(FsShellPermissions.class); factory.registerCommands(FsUsage.class); factory.registerCommands(Ls.class); factory.registerCommands(Mkdir.class); factory.registerCommands(MoveCommands.class); factory.registerCommands(SetReplication.class); factory.registerCommands(Stat.class); factory.registerCommands(Tail.class); factory.registerCommands(Head.class); factory.registerCommands(Test.class); factory.registerCommands(TouchCommands.class); factory.registerCommands(Truncate.class); factory.registerCommands(SnapshotCommands.class); factory.registerCommands(XAttrCommands.class); }
@Test public void testGetInstances() { factory.registerCommands(TestRegistrar.class); Command instance; instance = factory.getInstance("blarg"); assertNull(instance); instance = factory.getInstance("tc1"); assertNotNull(instance); assertEquals(TestCommand1.class, instance.getClass()); assertEquals("tc1", instance.getCommandName()); instance = factory.getInstance("tc2"); assertNotNull(instance); assertEquals(TestCommand2.class, instance.getClass()); assertEquals("tc2", instance.getCommandName()); instance = factory.getInstance("tc2.1"); assertNotNull(instance); assertEquals(TestCommand2.class, instance.getClass()); assertEquals("tc2.1", instance.getCommandName()); }
private static Command getCommandInstance(String cmdName, Configuration conf) { final CommandFactory commandFactory = new CommandFactory(conf); FsCommand.registerCommands(commandFactory); return commandFactory.getInstance(cmdName, conf); }
@Test @Ignore public void generateMethods() { final CommandFactory commandFactory = new CommandFactory(new Configuration()); FsCommand.registerCommands(commandFactory); final String[] names = commandFactory.getNames(); final String collect = Arrays.stream(names).map(item -> "\"" + item.replace("-", "") + "\"").collect(Collectors.joining(",")); System.out.println(collect); Arrays.stream(names).map(commandFactory::getInstance).forEach(item -> { String description = ""; final String[] sentences = item.getDescription().split("\\."); if (sentences.length == 0) { description = item.getDescription(); } else { description = sentences[0] + "."; } String cliCommand = String.format("@CliCommand(value = {\"%s\", \"hdfs dfs -%s\"}, help = \"%s\")", item.getCommandName(), item.getCommandName(), description); String content = String.format(" public String %s(\n" + " @CliOption(key = {\"\"}, help = \"%s\") String path\n" + " ) {\n" + " return runCommand(\"%s\", path);\n" + " }\n", item.getCommandName(), description, item.getCommandName()); System.out.println(cliCommand); System.out.println(content); System.out.println(); }); }
@Before public void testSetup() { factory = new CommandFactory(conf); assertNotNull(factory); }
@Override public String[] getNames() { return commandFactory.getNames(); }
@Override public void addObject(Command cmdObject, String... names) { commandFactory.addObject(cmdObject, names); }
private void printInfo(PrintStream out, String cmd, boolean showHelp) { if (cmd != null) { Command instance = commandFactory.getInstance("-" + cmd); if (instance == null) { throw new UnknownCommandException(cmd); for (String name : commandFactory.getNames()) { Command instance = commandFactory.getInstance(name); if (!instance.isDeprecated()) { out.println("\t[" + instance.getUsage() + "]");
@Test public void testRegistration() { assertArrayEquals(new String []{}, factory.getNames()); factory.registerCommands(TestRegistrar.class); String [] names = factory.getNames(); assertArrayEquals(new String []{"tc1", "tc2", "tc2.1"}, names); factory.addClass(TestCommand3.class, "tc3"); names = factory.getNames(); assertArrayEquals(new String []{"tc1", "tc2", "tc2.1", "tc3"}, names); }
/** * Returns an instance of the class implementing the given command. The * class must have been registered via * {@link #addClass(Class, String...)} * @param cmd name of the command * @return instance of the requested command */ public Command getInstance(String cmd) { return getInstance(cmd, getConf()); }
protected void registerCommands(CommandFactory factory) { // TODO: DFSAdmin subclasses FsShell so need to protect the command // registration. This class should morph into a base class for // commands, and then this method can be abstract if (this.getClass().equals(FsShell.class)) { factory.registerCommands(FsCommand.class); } }
@Test public void testGetInstances() { factory.registerCommands(TestRegistrar.class); Command instance; instance = factory.getInstance("blarg"); assertNull(instance); instance = factory.getInstance("tc1"); assertNotNull(instance); assertEquals(TestCommand1.class, instance.getClass()); assertEquals("tc1", instance.getCommandName()); instance = factory.getInstance("tc2"); assertNotNull(instance); assertEquals(TestCommand2.class, instance.getClass()); assertEquals("tc2", instance.getCommandName()); instance = factory.getInstance("tc2.1"); assertNotNull(instance); assertEquals(TestCommand2.class, instance.getClass()); assertEquals("tc2.1", instance.getCommandName()); }
@Before public void testSetup() { factory = new CommandFactory(conf); assertNotNull(factory); }