summaryrefslogtreecommitdiff
path: root/buildscripts/phing/classes/phing/contrib/DocBlox/Parallel/Worker.php
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/phing/classes/phing/contrib/DocBlox/Parallel/Worker.php')
-rw-r--r--buildscripts/phing/classes/phing/contrib/DocBlox/Parallel/Worker.php203
1 files changed, 203 insertions, 0 deletions
diff --git a/buildscripts/phing/classes/phing/contrib/DocBlox/Parallel/Worker.php b/buildscripts/phing/classes/phing/contrib/DocBlox/Parallel/Worker.php
new file mode 100644
index 00000000..338f4b25
--- /dev/null
+++ b/buildscripts/phing/classes/phing/contrib/DocBlox/Parallel/Worker.php
@@ -0,0 +1,203 @@
+<?php
+/**
+ * DocBlox
+ *
+ * PHP Version 5
+ *
+ * @category DocBlox
+ * @package Parallel
+ * @author Mike van Riel <mike.vanriel@naenius.com>
+ * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com)
+ * @license http://www.opensource.org/licenses/mit-license.php MIT
+ * @link http://docblox-project.org
+ */
+
+/**
+ * Class that represents the execution of a single task within a parallelized
+ * frame.
+ *
+ * @category DocBlox
+ * @package Parallel
+ * @author Mike van Riel <mike.vanriel@naenius.com>
+ * @license http://www.opensource.org/licenses/mit-license.php MIT
+ * @link http://docblox-project.org
+ */
+class DocBlox_Parallel_Worker
+{
+ /** @var callback the task to execute for this worker */
+ protected $task = null;
+
+ /** @var mixed[] A list of argument to pass to the task */
+ protected $arguments = array();
+
+ /** @var int The return code to tell the parent process how it went */
+ protected $return_code = -1;
+
+ /** @var mixed The result of the given task */
+ protected $result = '';
+
+ /** @var string The error message, if an error occurred */
+ protected $error = '';
+
+ /**
+ * Creates the worker and sets the task to execute optionally including
+ * the arguments that need to be passed to the task.
+ *
+ * @param callback $task The task to invoke upon execution.
+ * @param mixed[] $arguments The arguments to provide to the task.
+ */
+ function __construct($task, array $arguments = array())
+ {
+ $this->setTask($task);
+ $this->arguments = $arguments;
+ }
+
+ /**
+ * Returns the list of arguments as provided int he constructor.
+ *
+ * @see DocBlox_Parallel_Worker::__construct()
+ *
+ * @return mixed[]
+ */
+ public function getArguments()
+ {
+ return $this->arguments;
+ }
+
+ /**
+ * Returns the task as provided in the constructor.
+ *
+ * @see DocBlox_Parallel_Worker::__construct()
+ *
+ * @return callback
+ */
+ public function getTask()
+ {
+ return $this->task;
+ }
+
+ /**
+ * Returns the available return code.
+ *
+ * This method may return -1 if no return code is available yet.
+ *
+ * @return int
+ */
+ public function getReturnCode()
+ {
+ return $this->return_code;
+ }
+
+ /**
+ * Sets the return code for this worker.
+ *
+ * Recommended is to use the same codes as are used with
+ * {@link http://www.gnu.org/software/bash/manual/html_node/Exit-Status.html
+ * exit codes}.
+ *
+ * In short: 0 means that the task succeeded and a any other positive value
+ * indicates an error condition.
+ *
+ * @param int $return_code Recommended to be a positive number
+ *
+ * @throw InvalidArgumentException if the code is not a number or negative
+ *
+ * @return void
+ */
+ public function setReturnCode($return_code)
+ {
+ if (!is_numeric($return_code) || ($return_code < 0)) {
+ throw new InvalidArgumentException(
+ 'Expected the return code to be a positive number'
+ );
+ }
+
+ $this->return_code = $return_code;
+ }
+
+ /**
+ * Returns the error message associated with the return code.
+ *
+ * @return string
+ */
+ public function getError()
+ {
+ return $this->error;
+ }
+
+ /**
+ * Sets the error message.
+ *
+ * @param string $error The error message.
+ *
+ * @return void
+ */
+ public function setError($error)
+ {
+ $this->error = $error;
+ }
+
+ /**
+ * Returns the result for this task run.
+ *
+ * @return null|mixed
+ */
+ public function getResult()
+ {
+ return $this->result;
+ }
+
+ /**
+ * Sets the result for this task run.
+ *
+ * @param mixed $result The value that is returned by the task; can be anything.
+ *
+ * @return void
+ */
+ public function setResult($result)
+ {
+ $this->result = $result;
+ }
+
+ /**
+ * Invokes the task with the given arguments and processes the output.
+ *
+ * @return void.
+ */
+ public function execute()
+ {
+ $this->setReturnCode(0);
+ try {
+ $this->setResult(
+ call_user_func_array($this->getTask(), $this->getArguments())
+ );
+ } catch (Exception $e) {
+ $this->setError($e->getMessage());
+ $this->setReturnCode($e->getCode());
+ }
+ }
+
+ /**
+ * Sets the task for this worker and validates whether it is callable.
+ *
+ * @param callback $task The task to execute when the execute method
+ * is invoked.
+ *
+ * @throws InvalidArgumentException if the given argument is not a callback.
+ *
+ * @see DocBlox_Parallel_Worker::__construct()
+ * @see DocBlox_Parallel_Worker::execute()
+ *
+ * @return void
+ */
+ protected function setTask($task)
+ {
+ if (!is_callable($task)) {
+ throw new InvalidArgumentException(
+ 'Worker task is not a callable object'
+ );
+ }
+
+ $this->task = $task;
+ }
+}