@Override public void execute( String... args ) throws IncorrectUsage { if ( args.length > 0 ) { try { AdminCommand.Provider commandProvider = this.locator.findProvider( args[0] ); usage.printUsageForCommand( commandProvider, output ); } catch ( NoSuchElementException e ) { StringBuilder validCommands = new StringBuilder(); locator.getAllProviders() .forEach( commandProvider -> validCommands.append( commandProvider.name() ).append( " " ) ); throw new IncorrectUsage( format( "Unknown command: %s. Available commands are: %s\n", args[0], validCommands ) ); } } else { usage.print( output ); } } }
@Override @Nonnull public AdminCommand create( Path homeDir, Path configDir, OutsideWorld outsideWorld ) { return new HelpCommand( usage, outsideWorld::stdOutLine, CommandLocator.fromServiceLocator() ); } }
public AdminTool( CommandLocator commandLocator, BlockerLocator blockerLocator, OutsideWorld outsideWorld, boolean debug ) { this.commandLocator = CommandLocator.withAdditionalCommand( help(), commandLocator ); this.blockerLocator = blockerLocator; this.outsideWorld = outsideWorld; this.debug = debug; this.usage = new Usage( scriptName, this.commandLocator ); }
private Map<AdminCommandSection,List<AdminCommand.Provider>> groupProvidersBySection() { List<AdminCommand.Provider> providers = new ArrayList<>(); commands.getAllProviders().forEach( providers::add ); return providers.stream().collect( Collectors.groupingBy( AdminCommand.Provider::commandSection ) ); } }
@Override public AdminCommand.Provider findProvider( String name ) { AdminCommand.Provider provider = command.get(); return Objects.equals( name, provider.name() ) ? provider : commands.findProvider( name ); }
@Override public Iterable<AdminCommand.Provider> getAllProviders() { return Iterables.append( command.get(), commands.getAllProviders() ); } };
when( commandProvider.possibleArguments() ).thenReturn( Collections.singletonList( arguments ) ); when( commandProvider.description() ).thenReturn( "This is a description of the foobar command." ); when( commandLocator.findProvider( "foobar" ) ).thenReturn( commandProvider );
@Test void printsUnknownCommandWhenUnknownCommandIsProvided() { CommandLocator commandLocator = mock( CommandLocator.class ); when( commandLocator.getAllProviders() ).thenReturn( Collections.emptyList() ); when( commandLocator.findProvider( "foobar" ) ).thenThrow( new NoSuchElementException( "foobar" ) ); HelpCommand helpCommand = new HelpCommand( mock( Usage.class ), out, commandLocator ); IncorrectUsage incorrectUsage = assertThrows( IncorrectUsage.class, () -> helpCommand.execute( "foobar" ) ); assertThat( incorrectUsage.getMessage(), containsString( "Unknown command: foobar" ) ); }
public static void main( String[] args ) throws IOException { Path homeDir = Paths.get( NEO4J_HOME ); Path configDir = Paths.get( NEO4J_CONF ); boolean debug = NEO4J_DEBUG != null; try ( RealOutsideWorld outsideWorld = new RealOutsideWorld() ) { new AdminTool( CommandLocator.fromServiceLocator(), BlockerLocator.fromServiceLocator(), outsideWorld, debug ).execute( homeDir, configDir, args ); } }
when( commandLocator.getAllProviders() ).thenReturn( mockCommands );
try provider = commandLocator.findProvider( name ); for ( AdminCommand.Blocker blocker : blockerLocator.findBlockers( name ) )
@Test void printsAvailableCommandsWhenUnknownCommandIsProvided() { CommandLocator commandLocator = mock( CommandLocator.class ); List<AdminCommand.Provider> mockCommands = asList( mockCommand( "foo" ), mockCommand( "bar" ), mockCommand( "baz" ) ); when( commandLocator.getAllProviders() ).thenReturn( mockCommands ); when( commandLocator.findProvider( "foobar" ) ).thenThrow( new NoSuchElementException( "foobar" ) ); HelpCommand helpCommand = new HelpCommand( mock( Usage.class ), out, commandLocator ); IncorrectUsage incorrectUsage = assertThrows( IncorrectUsage.class, () -> helpCommand.execute( "foobar" ) ); assertThat( incorrectUsage.getMessage(), containsString( "Available commands are: foo bar baz" ) ); }
@Before public void setup() { File graphDir = new File( GraphDatabaseSettings.DEFAULT_DATABASE_NAME ); confDir = new File( graphDir, "conf" ); homeDir = new File( graphDir, "home" ); out = mock( OutsideWorld.class ); resetOutsideWorldMock(); tool = new AdminTool( CommandLocator.fromServiceLocator(), BlockerLocator.fromServiceLocator(), out, true ); }
@Before public void setup() { File graphDir = new File( GraphDatabaseSettings.DEFAULT_DATABASE_NAME ); confDir = new File( graphDir, "conf" ); homeDir = new File( graphDir, "home" ); out = mock( OutsideWorld.class ); resetOutsideWorldMock(); tool = new AdminTool( CommandLocator.fromServiceLocator(), BlockerLocator.fromServiceLocator(), out, true ); }