* @version 0.0.0 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @todo Find an interface for: handleAllQueries() * * 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 LocalQueryConnector extends BaseQueryConnector implements Connectable, Visitable { /** * The query class instance */ private $queryInstance = NULL; /** * Protected constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); // Init query instance $this->queryInstance = ObjectFactory::createObjectByConfiguredName('local_query_class'); } /** * Creates an instance of this query connector class * * @param $nodeInstance An instance of a node * @return $connectorInstance An instance of this query connector class */ public static final function createLocalQueryConnector (NodeHelper $nodeInstance) { // Create the instance $connectorInstance = new LocalQueryConnector(); // Set the node instance $connectorInstance->setNodeInstance($nodeInstance); // Get a list instance $listInstance = ObjectFactory::createObjectByConfiguredName('local_query_list_class'); // Set it in the connector $connectorInstance->setListInstance($listInstance); // Prepare iterator instance $iteratorInstance = $listInstance->getListIterator(); // Set it, too $connectorInstance->setIteratorInstance($iteratorInstance); // Finally return the connector return $connectorInstance; } /** * Handles the in the list avaiable query (current) and hands it over to the * query processor instance * * @return void * @TODO 0% done: Unfinished work here */ private function handleCurrentQuery () { // Is there a query available? if (!$this->getIteratorInstance()->valid()) { // Simply abort here return; } // END - if // Get the current query $currentQuery = $this->getIteratorInstance()->current(); // Only while construction, else it would output to much! /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('CONNECTOR: Handling query ' . $currentQuery); } /** * Accepts the visitor to process the visit "request" * * @param $visitorInstance An instance of a Visitor class * @return void */ public function accept (Visitor $visitorInstance) { // Visit the query connector $visitorInstance->visitQueryConnector($this); // Visit the query as well $this->queryInstance->accept($visitorInstance); } /** * Handles all pending queries. This method should be called by the * ActiveTaskVisitor class and should use an iterator on all pending * queries. * * @return void */ public function handlePending () { // Should we rewind? if (!$this->getIteratorInstance()->valid()) { // Rewind to the beginning for next loop $this->getIteratorInstance()->rewind(); // Still not valid? if ($this->getIteratorInstance()->valid()) { /* * Then silently abort here because the queue is empty and to * save some calls. */ return; } // END - if } // END - if // Try to execute the task $this->handleCurrentQuery(); // Go to next entry $this->getIteratorInstance()->next(); } } // [EOF] ?>