5 * Contains \Drupal\Console\Command\Generate\PluginRestResourceCommand.
8 namespace Drupal\Console\Command\Generate;
10 use Symfony\Component\Console\Input\InputInterface;
11 use Symfony\Component\Console\Input\InputOption;
12 use Symfony\Component\Console\Output\OutputInterface;
13 use Drupal\Console\Command\Shared\ServicesTrait;
14 use Drupal\Console\Command\Shared\ModuleTrait;
15 use Drupal\Console\Command\Shared\FormTrait;
16 use Drupal\Console\Generator\PluginRestResourceGenerator;
17 use Drupal\Console\Command\Shared\ConfirmationTrait;
18 use Symfony\Component\Console\Command\Command;
19 use Drupal\Console\Core\Style\DrupalStyle;
20 use Drupal\Console\Extension\Manager;
21 use Drupal\Console\Core\Command\Shared\CommandTrait;
22 use Drupal\Console\Core\Utils\StringConverter;
23 use Drupal\Console\Core\Utils\ChainQueue;
26 * Class PluginRestResourceCommand
28 * @package Drupal\Console\Command\Generate
30 class PluginRestResourceCommand extends Command
35 use ConfirmationTrait;
41 protected $extensionManager;
44 * @var PluginRestResourceGenerator
49 * @var StringConverter
51 protected $stringConverter;
56 protected $chainQueue;
60 * PluginRestResourceCommand constructor.
62 * @param Manager $extensionManager
63 * @param PluginRestResourceGenerator $generator
64 * @param StringConverter $stringConverter
65 * @param ChainQueue $chainQueue
67 public function __construct(
68 Manager $extensionManager,
69 PluginRestResourceGenerator $generator,
70 StringConverter $stringConverter,
71 ChainQueue $chainQueue
73 $this->extensionManager = $extensionManager;
74 $this->generator = $generator;
75 $this->stringConverter = $stringConverter;
76 $this->chainQueue = $chainQueue;
77 parent::__construct();
80 protected function configure()
83 ->setName('generate:plugin:rest:resource')
84 ->setDescription($this->trans('commands.generate.plugin.rest.resource.description'))
85 ->setHelp($this->trans('commands.generate.plugin.rest.resource.help'))
86 ->addOption('module', '', InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
90 InputOption::VALUE_OPTIONAL,
91 $this->trans('commands.generate.plugin.rest.resource.options.class')
96 InputOption::VALUE_OPTIONAL,
97 $this->trans('commands.generate.service.options.name')
102 InputOption::VALUE_OPTIONAL,
103 $this->trans('commands.generate.plugin.rest.resource.options.plugin-id')
108 InputOption::VALUE_OPTIONAL,
109 $this->trans('commands.generate.plugin.rest.resource.options.plugin-label')
114 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
115 $this->trans('commands.generate.plugin.rest.resource.options.plugin-url')
120 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
121 $this->trans('commands.generate.plugin.rest.resource.options.plugin-states')
128 protected function execute(InputInterface $input, OutputInterface $output)
130 $io = new DrupalStyle($input, $output);
132 // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmGeneration
133 if (!$this->confirmGeneration($io)) {
137 $module = $input->getOption('module');
138 $class_name = $input->getOption('class');
139 $plugin_id = $input->getOption('plugin-id');
140 $plugin_label = $input->getOption('plugin-label');
141 $plugin_url = $input->getOption('plugin-url');
142 $plugin_states = $input->getOption('plugin-states');
144 $this->generator->generate($module, $class_name, $plugin_label, $plugin_id, $plugin_url, $plugin_states);
146 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
149 protected function interact(InputInterface $input, OutputInterface $output)
151 $io = new DrupalStyle($input, $output);
154 $module = $input->getOption('module');
156 // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
157 $module = $this->moduleQuestion($io);
158 $input->setOption('module', $module);
162 $class_name = $input->getOption('class');
164 $stringUtils = $this->stringConverter;
165 $class_name = $io->ask(
166 $this->trans('commands.generate.plugin.rest.resource.questions.class'),
167 'DefaultRestResource',
168 function ($class_name) use ($stringUtils) {
169 if (!strlen(trim($class_name))) {
170 throw new \Exception('The Class name can not be empty');
173 return $stringUtils->humanToCamelCase($class_name);
176 $input->setOption('class', $class_name);
179 // --plugin-id option
180 $plugin_id = $input->getOption('plugin-id');
182 $plugin_id = $io->ask(
183 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-id'),
184 $this->stringConverter->camelCaseToUnderscore($class_name)
186 $input->setOption('plugin-id', $plugin_id);
189 // --plugin-label option
190 $plugin_label = $input->getOption('plugin-label');
191 if (!$plugin_label) {
192 $plugin_label = $io->ask(
193 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-label'),
194 $this->stringConverter->camelCaseToHuman($class_name)
196 $input->setOption('plugin-label', $plugin_label);
199 // --plugin-url option
200 $plugin_url = $input->getOption('plugin-url');
202 $plugin_url = $io->ask(
203 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-url')
205 $input->setOption('plugin-url', $plugin_url);
208 // --plugin-states option
209 $plugin_states = $input->getOption('plugin-states');
210 if (!$plugin_states) {
211 $states = ['GET', 'PUT', 'POST', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'];
212 $plugin_states = $io->choice(
213 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-states'),
219 $input->setOption('plugin-states', $plugin_states);