5 * Contains \Drupal\Console\Command\Generate\PluginRestResourceCommand.
8 namespace Drupal\Console\Command\Generate;
10 use Drupal\Console\Utils\Validator;
11 use Symfony\Component\Console\Input\InputInterface;
12 use Symfony\Component\Console\Input\InputOption;
13 use Symfony\Component\Console\Output\OutputInterface;
14 use Drupal\Console\Command\Shared\ServicesTrait;
15 use Drupal\Console\Command\Shared\ModuleTrait;
16 use Drupal\Console\Generator\PluginRestResourceGenerator;
17 use Drupal\Console\Command\Shared\ConfirmationTrait;
18 use Drupal\Console\Core\Command\Command;
19 use Drupal\Console\Extension\Manager;
20 use Drupal\Console\Core\Utils\StringConverter;
21 use Drupal\Console\Core\Utils\ChainQueue;
24 * Class PluginRestResourceCommand
26 * @package Drupal\Console\Command\Generate
28 class PluginRestResourceCommand extends Command
32 use ConfirmationTrait;
37 protected $extensionManager;
40 * @var PluginRestResourceGenerator
45 * @var StringConverter
47 protected $stringConverter;
57 protected $chainQueue;
61 * PluginRestResourceCommand constructor.
63 * @param Manager $extensionManager
64 * @param PluginRestResourceGenerator $generator
65 * @param StringConverter $stringConverter
66 * @param Validator $validator
67 * @param ChainQueue $chainQueue
69 public function __construct(
70 Manager $extensionManager,
71 PluginRestResourceGenerator $generator,
72 StringConverter $stringConverter,
74 ChainQueue $chainQueue
76 $this->extensionManager = $extensionManager;
77 $this->generator = $generator;
78 $this->stringConverter = $stringConverter;
79 $this->validator = $validator;
80 $this->chainQueue = $chainQueue;
81 parent::__construct();
84 protected function configure()
87 ->setName('generate:plugin:rest:resource')
88 ->setDescription($this->trans('commands.generate.plugin.rest.resource.description'))
89 ->setHelp($this->trans('commands.generate.plugin.rest.resource.help'))
93 InputOption::VALUE_REQUIRED,
94 $this->trans('commands.common.options.module')
99 InputOption::VALUE_OPTIONAL,
100 $this->trans('commands.generate.plugin.rest.resource.options.class')
105 InputOption::VALUE_OPTIONAL,
106 $this->trans('commands.generate.plugin.rest.resource.options.plugin-id')
111 InputOption::VALUE_OPTIONAL,
112 $this->trans('commands.generate.plugin.rest.resource.options.plugin-label')
117 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
118 $this->trans('commands.generate.plugin.rest.resource.options.plugin-url')
123 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
124 $this->trans('commands.generate.plugin.rest.resource.options.plugin-states')
126 ->setAliases(['gprr']);
132 protected function execute(InputInterface $input, OutputInterface $output)
134 // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
135 if (!$this->confirmOperation()) {
139 $http_methods = $this->getHttpMethods();
140 $module = $input->getOption('module');
141 $class_name = $this->validator->validateClassName($input->getOption('class'));
142 $plugin_id = $input->getOption('plugin-id');
143 $plugin_label = $input->getOption('plugin-label');
144 $plugin_url = $input->getOption('plugin-url');
145 $plugin_states = $this->validator->validateHttpMethods($input->getOption('plugin-states'), $http_methods);
147 $prepared_plugin = [];
148 foreach ($plugin_states as $plugin_state) {
149 $prepared_plugin[$plugin_state] = $http_methods[$plugin_state];
152 $this->generator->generate([
153 'module_name' => $module,
154 'class_name' => $class_name,
155 'plugin_label' => $plugin_label,
156 'plugin_id' => $plugin_id,
157 'plugin_url' => $plugin_url,
158 'plugin_states' => $prepared_plugin,
161 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
166 protected function interact(InputInterface $input, OutputInterface $output)
169 $this->getModuleOption();
172 $class_name = $input->getOption('class');
174 $class_name = $this->getIo()->ask(
175 $this->trans('commands.generate.plugin.rest.resource.questions.class'),
176 'DefaultRestResource',
178 return $this->validator->validateClassName($class);
181 $input->setOption('class', $class_name);
184 // --plugin-id option
185 $plugin_id = $input->getOption('plugin-id');
187 $plugin_id = $this->getIo()->ask(
188 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-id'),
189 $this->stringConverter->camelCaseToUnderscore($class_name)
191 $input->setOption('plugin-id', $plugin_id);
194 // --plugin-label option
195 $plugin_label = $input->getOption('plugin-label');
196 if (!$plugin_label) {
197 $plugin_label = $this->getIo()->ask(
198 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-label'),
199 $this->stringConverter->camelCaseToHuman($class_name)
201 $input->setOption('plugin-label', $plugin_label);
204 // --plugin-url option
205 $plugin_url = $input->getOption('plugin-url');
207 $plugin_url = $this->getIo()->ask(
208 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-url')
210 $input->setOption('plugin-url', $plugin_url);
214 // --plugin-states option
215 $plugin_states = $input->getOption('plugin-states');
216 if (!$plugin_states) {
217 $states = array_keys($this->getHttpMethods());
218 $plugin_states = $this->getIo()->choice(
219 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-states'),
225 $input->setOption('plugin-states', $plugin_states);
230 * Returns available HTTP methods.
233 * Available HTTP methods.
235 protected function getHttpMethods()
240 'response_class' => 'ResourceResponse',
244 'response_class' => 'ModifiedResourceResponse',
248 'response_class' => 'ModifiedResourceResponse',
252 'response_class' => 'ModifiedResourceResponse',
256 'response_class' => 'ModifiedResourceResponse',
260 'response_class' => 'ResourceResponse',
264 'response_class' => 'ResourceResponse',