From 552fc4dc6e8eb8208fbc83feec9d8acfc8362a1b Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Tue, 24 Mar 2015 21:27:47 +0100 Subject: [PATCH] Moved visitor stuff from 'hub'. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- inc/classes/interfaces/visitor/.htaccess | 1 + .../interfaces/visitor/class_Visitable.php | 35 ++++++ .../interfaces/visitor/class_Visitor.php | 28 +++++ .../interfaces/visitor/tasks/.htaccess | 1 + .../visitor/tasks/class_TaskVisitor.php | 35 ++++++ .../default/class_DefaultIterator.php | 2 +- inc/classes/main/visitor/.htaccess | 1 + inc/classes/main/visitor/class_ | 53 +++++++++ .../main/visitor/class_BaseVisitor.php | 62 +++++++++++ inc/classes/main/visitor/tasks/.htaccess | 1 + .../visitor/tasks/class_ActiveTaskVisitor.php | 104 ++++++++++++++++++ .../tasks/class_ShutdownTaskVisitor.php | 97 ++++++++++++++++ inc/config.php | 3 + 13 files changed, 422 insertions(+), 1 deletion(-) create mode 100644 inc/classes/interfaces/visitor/.htaccess create mode 100644 inc/classes/interfaces/visitor/class_Visitable.php create mode 100644 inc/classes/interfaces/visitor/class_Visitor.php create mode 100644 inc/classes/interfaces/visitor/tasks/.htaccess create mode 100644 inc/classes/interfaces/visitor/tasks/class_TaskVisitor.php create mode 100644 inc/classes/main/visitor/.htaccess create mode 100644 inc/classes/main/visitor/class_ create mode 100644 inc/classes/main/visitor/class_BaseVisitor.php create mode 100644 inc/classes/main/visitor/tasks/.htaccess create mode 100644 inc/classes/main/visitor/tasks/class_ActiveTaskVisitor.php create mode 100644 inc/classes/main/visitor/tasks/class_ShutdownTaskVisitor.php diff --git a/inc/classes/interfaces/visitor/.htaccess b/inc/classes/interfaces/visitor/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/interfaces/visitor/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/interfaces/visitor/class_Visitable.php b/inc/classes/interfaces/visitor/class_Visitable.php new file mode 100644 index 00000000..149b671e --- /dev/null +++ b/inc/classes/interfaces/visitor/class_Visitable.php @@ -0,0 +1,35 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +interface Visitable extends FrameworkInterface { + /** + * Accepts the visitor to process the visit "request" + * + * @param $visitorInstance An instance of a Visitor class + * @return void + */ + function accept (Visitor $visitorInstance); +} + +// [EOF] +?> diff --git a/inc/classes/interfaces/visitor/class_Visitor.php b/inc/classes/interfaces/visitor/class_Visitor.php new file mode 100644 index 00000000..96e9ceef --- /dev/null +++ b/inc/classes/interfaces/visitor/class_Visitor.php @@ -0,0 +1,28 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +interface Visitor extends FrameworkInterface { +} + +// [EOF] +?> diff --git a/inc/classes/interfaces/visitor/tasks/.htaccess b/inc/classes/interfaces/visitor/tasks/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/interfaces/visitor/tasks/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/interfaces/visitor/tasks/class_TaskVisitor.php b/inc/classes/interfaces/visitor/tasks/class_TaskVisitor.php new file mode 100644 index 00000000..b729a42f --- /dev/null +++ b/inc/classes/interfaces/visitor/tasks/class_TaskVisitor.php @@ -0,0 +1,35 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +interface TaskVisitor extends Visitor { + /** + * Visits the given task instance + * + * @param $taskInstance A Taskable instance + * @return void + */ + function visitTask (Taskable $taskInstance); +} + +// [EOF] +?> diff --git a/inc/classes/main/iterator/default/class_DefaultIterator.php b/inc/classes/main/iterator/default/class_DefaultIterator.php index eed63186..81050c5f 100644 --- a/inc/classes/main/iterator/default/class_DefaultIterator.php +++ b/inc/classes/main/iterator/default/class_DefaultIterator.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.shipsimu.org * diff --git a/inc/classes/main/visitor/.htaccess b/inc/classes/main/visitor/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/visitor/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/visitor/class_ b/inc/classes/main/visitor/class_ new file mode 100644 index 00000000..e1ccf277 --- /dev/null +++ b/inc/classes/main/visitor/class_ @@ -0,0 +1,53 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class ???Visitor extends BaseVisitor implements Visitor { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + + // Set visitor mode + $this->setVisitorMode('!!!'); + } + + /** + * Creates an instance of this class + * + * @return $visitorInstance An instance a Visitorable class + */ + public final static function create???Visitor () { + // Get new instance + $visitorInstance = new ???Visitor(); + + // Return the prepared instance + return $visitorInstance; + } +} + +// [EOF] +?> diff --git a/inc/classes/main/visitor/class_BaseVisitor.php b/inc/classes/main/visitor/class_BaseVisitor.php new file mode 100644 index 00000000..185588fd --- /dev/null +++ b/inc/classes/main/visitor/class_BaseVisitor.php @@ -0,0 +1,62 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class BaseVisitor extends BaseFrameworkSystem { + /** + * Mode of the visitor (the first word of the concrete class' name) + */ + private $visitorMode = 'invalid'; + + /** + * Protected constructor + * + * @param $className Name of the class + * @return void + */ + protected function __construct ($className) { + // Call parent constructor + parent::__construct($className); + } + + /** + * Setter for visitor mode + * + * @param $visitorMode New visitor mode to set + * @return void + */ + protected final function setVisitorMode ($visitorMode) { + $this->visitorMode = (string) $visitorMode; + } + + /** + * Getter for visitor mode + * + * @return $visitorMode New visitor mode to set + */ + public final function getVisitorMode () { + return $this->visitorMode; + } +} + +// [EOF] +?> diff --git a/inc/classes/main/visitor/tasks/.htaccess b/inc/classes/main/visitor/tasks/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/visitor/tasks/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/visitor/tasks/class_ActiveTaskVisitor.php b/inc/classes/main/visitor/tasks/class_ActiveTaskVisitor.php new file mode 100644 index 00000000..ec348674 --- /dev/null +++ b/inc/classes/main/visitor/tasks/class_ActiveTaskVisitor.php @@ -0,0 +1,104 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class ActiveTaskVisitor extends BaseVisitor implements TaskVisitor, PoolVisitor, ListenerVisitor, DecoratorVisitor { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + + // Set visitor mode + $this->setVisitorMode('task'); + } + + /** + * Creates an instance of this class + * + * @return $visitorInstance An instance a Visitorable class + */ + public static final function createActiveTaskVisitor () { + // Get new instance + $visitorInstance = new ActiveTaskVisitor(); + + // Return the prepared instance + return $visitorInstance; + } + + /** + * Visits the given task instance + * + * @param $taskInstance A Taskable instance + * @return void + */ + public function visitTask (Taskable $taskInstance) { + // Execute the task from this visitor + //* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ' ]: Visiting task ' . $taskInstance->__toString() . ' - CALLED!'); + $taskInstance->executeTask(); + //* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ' ]: Visiting task ' . $taskInstance->__toString() . ' - EXIT!'); + } + + /** + * Pool visitor method for active tasks + * + * @param $poolInstance A Poolable instance + * @return void + */ + public function visitPool (Poolable $poolInstance) { + /** + * We don't need to visit a pool as an active task because a pool can + * never become a task. Instead e.g. by a listener pool we should visit + * all listeners one by one + */ + } + + /** + * Visits the given listener instance + * + * @param $listenerInstance A Listenable instance + * @return void + */ + public function visitListener (Listenable $listenerInstance) { + // Do "listen" here + //* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ' ]: Visiting ' . $listenerInstance->__toString() . ' - CALLED!'); + $listenerInstance->doListen(); + //* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ' ]: Visiting ' . $listenerInstance->__toString() . ' - FINISH'); + } + + /** + * Visits the given decorator instance + * + * @param $decoratorInstance A decorator instance + * @return void + */ + public function visitDecorator (BaseDecorator $decoratorInstance) { + // A decorator itself can never become an active task so this method + // remains empty. + } +} + +// [EOF] +?> diff --git a/inc/classes/main/visitor/tasks/class_ShutdownTaskVisitor.php b/inc/classes/main/visitor/tasks/class_ShutdownTaskVisitor.php new file mode 100644 index 00000000..4fc037e3 --- /dev/null +++ b/inc/classes/main/visitor/tasks/class_ShutdownTaskVisitor.php @@ -0,0 +1,97 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class ShutdownTaskVisitor extends BaseVisitor implements TaskVisitor, PoolVisitor, ListenerVisitor, DecoratorVisitor { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + + // Set visitor mode + $this->setVisitorMode('task'); + } + + /** + * Creates an instance of this class + * + * @return $visitorInstance An instance a Visitorable class + */ + public static final function createShutdownTaskVisitor () { + // Get new instance + $visitorInstance = new ShutdownTaskVisitor(); + + // Return the prepared instance + return $visitorInstance; + } + + /** + * Visits the given task instance + * + * @param $taskInstance A Taskable instance + * @return void + */ + public function visitTask (Taskable $taskInstance) { + // Shutdown the task instance + $taskInstance->doShutdown(); + } + + /** + * Pool visitor method for active tasks + * + * @param $poolInstance A Poolable instance + * @return void + */ + public function visitPool (Poolable $poolInstance) { + // Shutdown the pool instance + $poolInstance->doShutdown(); + } + + /** + * Visits the given listener instance + * + * @param $listenerInstance A Listenable instance + * @return void + */ + public function visitListener (Listenable $listenerInstance) { + // Shutdown the listener instance + $listenerInstance->doShutdown(); + } + + /** + * Visits the given decorator instance + * + * @param $decoratorInstance A decorator instance + * @return void + */ + public function visitDecorator (BaseDecorator $decoratorInstance) { + // Shutdown the decorator instance + $decoratorInstance->doShutdown(); + } +} + +// [EOF] +?> diff --git a/inc/config.php b/inc/config.php index 1bfdc40e..6ad91b62 100644 --- a/inc/config.php +++ b/inc/config.php @@ -416,5 +416,8 @@ $cfg->setConfigEntry('list_group_class', 'ListGroupList'); // CFG: DEFAULT-ITERATOR-CLASS $cfg->setConfigEntry('default_iterator_class', 'DefaultIterator'); +// CFG: ACTIVE-TASK-VISITOR-CLASS +$cfg->setConfigEntry('active_task_visitor_class', 'ActiveTaskVisitor'); + // [EOF] ?> -- 2.39.2