class OnlineBackupCommand implements AdminCommand {

    @Override
    public void execute( String[] args ) throws IncorrectUsage, CommandFailed
    {
        OnlineBackupContext onlineBackupContext = contextBuilder.createContext( args );
        protocolWarn( onlineBackupContext );
        try ( BackupSupportingClasses backupSupportingClasses = backupSupportingClassesFactory.createSupportingClasses( onlineBackupContext.getConfig() ) )
        {
            // Make sure destination exists
            checkDestination( onlineBackupContext.getRequiredArguments().getDirectory() );
            checkDestination( onlineBackupContext.getRequiredArguments().getReportDir() );

            BackupStrategyCoordinator backupStrategyCoordinator =
                    backupStrategyCoordinatorFactory.backupStrategyCoordinator( onlineBackupContext, backupSupportingClasses.getBackupProtocolService(),
                            backupSupportingClasses.getBackupDelegator(), backupSupportingClasses.getPageCache() );

            backupStrategyCoordinator.performBackup( onlineBackupContext );
            outsideWorld.stdOutLine( "Backup complete." );
        }
    }

      OnlineBackupCommand( OutsideWorld outsideWorld, OnlineBackupContextFactory contextBuilder,
                         BackupSupportingClassesFactory backupSupportingClassesFactory,
                         BackupStrategyCoordinatorFactory backupStrategyCoordinatorFactory );

}