summaryrefslogtreecommitdiffstats
path: root/source/Command/Channel.php
diff options
context:
space:
mode:
Diffstat (limited to 'source/Command/Channel.php')
-rw-r--r--source/Command/Channel.php127
1 files changed, 127 insertions, 0 deletions
diff --git a/source/Command/Channel.php b/source/Command/Channel.php
new file mode 100644
index 0000000..aa5c235
--- /dev/null
+++ b/source/Command/Channel.php
@@ -0,0 +1,127 @@
+<?php
+/**
+ * @author stev leibelt <artodeto@bazzline.net>
+ * @since 2014-08-16
+ */
+
+class Command_Channel extends Command_AbstractCommand
+{
+ /**
+ * @var AbstractApplication
+ */
+ private $application;
+
+ /**
+ * @var string
+ */
+ private $command;
+
+ /**
+ * @var array
+ */
+ private $commands = array(
+ 'add',
+ 'edit',
+ 'delete',
+ 'list'
+ );
+
+ /**
+ * @var Filesystem
+ */
+ private $filesystem;
+
+ /**
+ * @param AbstractApplication $application
+ */
+ public function setApplication(AbstractApplication $application)
+ {
+ $this->application = $application;
+ }
+
+ /**
+ * @param Filesystem $filesystem
+ */
+ public function setFilesystem(Filesystem $filesystem)
+ {
+ $this->filesystem = $filesystem;
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function execute()
+ {
+ switch ($this->command) {
+ case 'add':
+ $command = $this->application->getChannelAddCommand();
+ break;
+ case 'edit':
+ $command = $this->application->getChannelEditCommand();
+ break;
+ case 'delete':
+ $command = $this->application->getChannelDeleteCommand();
+ break;
+ case 'list':
+ $command = $this->application->getChannelListCommand();
+ break;
+ default:
+ throw new Exception(
+ 'unsupported command "' . $this->command . '"'
+ );
+ }
+
+ $command->setInput($this->input);
+ $command->setOutput($this->output);
+
+ try {
+ $command->verify();
+ } catch (Exception $exception) {
+ throw new Exception(
+ '--' . $this->command . ' ' . implode("\n", $command->getUsage()) . PHP_EOL .
+ PHP_EOL .
+ $exception->getMessage()
+ );
+ }
+ $command->execute();
+ }
+
+ /**
+ * @return array
+ */
+ public function getUsage()
+ {
+ return array(
+ '[--' . implode('|--', $this->commands) . ']'
+ );
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function verify()
+ {
+ $this->command = null;
+
+ if ($this->input->getNumberOfArguments() < 1) {
+ throw new Exception(
+ 'invalid number of arguments provided'
+ );
+ }
+
+ foreach ($this->commands as $command) {
+ if ($this->input->hasLongOption($command)) {
+ $this->command = $command;
+ break;
+ }
+ }
+
+ if (is_null($this->command)) {
+ throw new Exception(
+ 'invalid command provided'
+ );
+ }
+
+ $this->input->removeLongOption($this->command);
+ }
+} \ No newline at end of file