/**
  * @param string $question
  * @param \Closure $task
  * @return void
  */
 protected function askBeforeExecutingTask($question, \Closure $task)
 {
     $response = null;
     while (!in_array($response, array('y', 'n'))) {
         $response = strtolower($this->output->ask('<comment>' . $question . ' (y/n)</comment>'));
     }
     $this->output->outputLine();
     switch ($response) {
         case 'y':
             $task();
             break;
         case 'n':
             $this->output->outputLine('Skipping.');
             break;
     }
 }
 /**
  * Maps arguments delivered by the request object to the local controller arguments.
  *
  * @return void
  */
 protected function mapRequestArgumentsToControllerArguments()
 {
     /** @var Argument $argument */
     foreach ($this->arguments as $argument) {
         $argumentName = $argument->getName();
         if ($this->request->hasArgument($argumentName)) {
             $argument->setValue($this->request->getArgument($argumentName));
             continue;
         }
         if (!$argument->isRequired()) {
             continue;
         }
         $argumentValue = null;
         while ($argumentValue === null) {
             $argumentValue = $this->output->ask(sprintf('<comment>Please specify the required argument "%s":</comment> ', $argumentName));
         }
         if ($argumentValue === null) {
             $exception = new CommandException(sprintf('Required argument "%s" is not set.', $argumentName), 1306755520);
             $this->forward('error', \TYPO3\Flow\Command\HelpCommandController::class, array('exception' => $exception));
         }
         $argument->setValue($argumentValue);
     }
 }