* @version 0.0 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2017 Core Developer Team * @license GNU GPL 3.0 or any newer version * * 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 ApplicationHelper extends BaseFrameworkSystem implements ManageableApplication, Registerable { /** * The version number of this application */ private $appVersion = ''; /** * The human-readable name for this application */ private $appName = ''; /** * The short uni*-like name for this application */ private $shortName = ''; /** * An instance of this class */ private static $selfInstance = NULL; /** * Private constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); } /** * Getter for an instance of this class * * @return $selfInstance An instance of this class */ public static final function getSelfInstance () { // Is the instance there? if (is_null(self::$selfInstance)) { self::$selfInstance = new ApplicationHelper(); } // END - if // Return the instance return self::$selfInstance; } /** * Getter for the version number * * @return $appVersion The application's version number */ public final function getAppVersion () { return $this->appVersion; } /** * Setter for the version number * * @param $appVersion The application's version number * @return void */ public final function setAppVersion ($appVersion) { // Cast and set it $this->appVersion = (string) $appVersion; } /** * Getter for human-readable name * * @return $appName The application's human-readable name */ public final function getAppName () { return $this->appName; } /** * Setter for human-readable name * * @param $appName The application's human-readable name * @return void */ public final function setAppName ($appName) { // Cast and set it $this->appName = (string) $appName;; } /** * Getter for short uni*-like name * * @return $shortName The application's short uni*-like name */ public final function getAppShortName () { return $this->shortName; } /** * Setter for short uni*-like name * * @param $shortName The application's short uni*-like name * @return void */ public final function setAppShortName ($shortName) { // Cast and set it $this->shortName = (string) $shortName; } /** * Launches the test suite * * @return void */ public final function entryPoint () { // Set this application in registry Registry::getRegistry()->addInstance('app', $this); // Default response is console $response = self::getResponseTypeFromSystem(); $responseType = self::getResponseTypeFromSystem(); // Create a new request object $requestInstance = ObjectFactory::createObjectByName(sprintf('CoreFramework\Request\%sRequest', self::convertToClassName($response))); // Remember request instance here $this->setRequestInstance($requestInstance); // Do we have another response? if ($requestInstance->isRequestElementSet('request')) { // Then use it $response = strtolower($requestInstance->getRequestElement('request')); $responseType = $response; } // END - if // ... and a new response object $responseClass = sprintf('CoreFramework\Response\%sResponse', self::convertToClassName($response)); $responseInstance = ObjectFactory::createObjectByName($responseClass, array($this)); // Remember response instance here $this->setResponseInstance($responseInstance); // Get the parameter from the request $commandName = $requestInstance->getRequestElement('command'); // If it is null then get default command if (is_null($commandName)) { // Get default command $commandName = $responseInstance->determineDefaultCommand(); // Set it in request $requestInstance->setRequestElement('command', $commandName); } // END - if // Get a controller resolver $resolverClass = sprintf( 'CoreFramework\Tests\Resolver\Controller\%s', self::convertToClassName(sprintf( '%s_%s_controller_resolver', $this->getAppShortName(), $responseType )) ); $resolverInstance = ObjectFactory::createObjectByName($resolverClass, array($commandName, $this)); // Get a controller instance as well $this->setControllerInstance($resolverInstance->resolveController()); // Launch the test suite here $this->getControllerInstance()->handleRequest($requestInstance, $responseInstance); // -------------------------- Shutdown phase -------------------------- // Shutting down the hub by saying "good bye" to all connected peers // and other hubs, flushing all queues and caches. self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('MAIN: Shutdown in progress, main loop exited.'); $this->getControllerInstance()->executeShutdownFilters($requestInstance, $responseInstance); self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('MAIN: Shutdown completed. (This is the last line.)'); } /** * Handle the indexed array of fatal messages and puts them out in an * acceptable fasion * * @param $messageList An array of fatal messages * @return void */ public function handleFatalMessages (array $messageList) { // Walk through all messages foreach ($messageList as $message) { exit(__METHOD__ . ':MSG:' . $message); } // END - foreach } /** * Builds the master template's name * * @return $masterTemplateName Name of the master template */ public function buildMasterTemplateName () { return 'node_main'; } /** * Assigns extra application-depending data * * @param $templateInstance An instance of a CompileableTemplate * @return void * @todo Nothing to add? */ public function assignExtraTemplateData (CompileableTemplate $templateInstance) { $this->partialStub('Unfinished method. templateInstance=' . $templateInstance->__toString()); } }