summaryrefslogtreecommitdiffstats
path: root/source/Command/Channel.php
diff options
context:
space:
mode:
authorPhilip Nicolcev <frugen@gmail.com>2014-08-24 13:12:44 -0400
committerPhilip Nicolcev <frugen@gmail.com>2014-08-24 13:12:44 -0400
commitf5fe739314de24e3a9cb94b9c8c64e11ed9cc14c (patch)
treebe46c6120d6dc0d08a7112a8dc80840281cbad33 /source/Command/Channel.php
parent9ffeed7646620ae7de51b929a3b44f2cdffb677f (diff)
parent5d8755faf06fd2ff9d3977f103e641b0ba9f714e (diff)
downloadAJAX-Chat-origin/cli_testing.zip
AJAX-Chat-origin/cli_testing.tar.gz
AJAX-Chat-origin/cli_testing.tar.bz2
Merge pull request #178 from stevleibelt/masterorigin/cli_testing
Implemented Command Line Tools in cli_testing branch
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