class StoreInfoCommand implements AdminCommand {

    @Override
    public void execute( String[] args ) throws IncorrectUsage, CommandFailed
    {
        final Path databaseDirectory = arguments.parse( args ).getMandatoryPath( "store" );

        Validators.CONTAINS_EXISTING_DATABASE.validate( databaseDirectory.toFile() );

        DatabaseLayout databaseLayout = DatabaseLayout.of( databaseDirectory.toFile() );
        try ( Closeable ignored = StoreLockChecker.check( databaseLayout.getStoreLayout() );
                DefaultFileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction();
                JobScheduler jobScheduler = createInitialisedScheduler();
                PageCache pageCache = StandalonePageCacheFactory.createPageCache( fileSystem, jobScheduler ) )
        {
            final String storeVersion = new StoreVersionCheck( pageCache )
                    .getVersion( databaseLayout.metadataStore() )
                    .orElseThrow( () -> new CommandFailed( String.format( "Could not find version metadata in store '%s'", databaseDirectory ) ) );

            final String fmt = "%-30s%s";
            out.accept( String.format( fmt, "Store format version:", storeVersion ) );

            RecordFormats format = RecordFormatSelector.selectForVersion( storeVersion );
            out.accept( String.format( fmt, "Store format introduced in:", format.introductionVersion() ) );

            findSuccessor( format )
                    .map( next -> String.format( fmt, "Store format superseded in:", next.introductionVersion() ) )
                    .ifPresent( out );
        }
        catch ( StoreLockException e )
        {
            throw new CommandFailed( "the database is in use -- stop Neo4j and try again", e );
        }
        catch ( Exception e )
        {
            throw new CommandFailed( e.getMessage(), e );
        }
    }

    public  StoreInfoCommand( Consumer<String> out );

}