* @version 0.0.0 * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software * @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 WebNewsFactory extends BaseFactory { /** * Instance of a request class */ private $requestInstance = null; /** * Protected constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); // Set part description $this->setObjectDescription("Factory for webpages with news"); } /** * Singleton getter for a special factory instance depending on the given * request * * @param $requestInstance An instance of a request class * @return $factoryInstance An instance of a WebNewsFactory class */ public final static function createFactoryByRequest (Requestable $requestInstance) { // Generate the new instance $factoryInstance = new WebNewsFactory(); // Get the element name from configuration $element = FrameworkConfiguration::getInstance()->readConfig('app_selector_get'); // Analyze the request, first get the Uni* application name (short one from URL) $appName = $requestInstance->getRequestElement($element); // Initialize some variables $className = ""; $className2 = $appName; // Then construct the class name foreach (array("_", "-") as $exp) { $array = explode($exp, $className2); foreach ($array as $el) { $className .= ucfirst(strtolower($el)); } // Copy it back and clear the class name $className2 = $className; $className = ""; } // After all is done, copy it back and add this class' name $className = $className2 . $factoryInstance->__toString(); // Once we have that name, try to load initialize it $realFactoryInstance = ObjectFactory::createObjectByName($className); // And assign it with the factory $factoryInstance->setRealFactoryInstance($realFactoryInstance); // Remember the request we have used for later usage $factoryInstance->setRequestInstance($requestInstance); // Return the prepared factory instance return $factoryInstance; } /** * Setter for the request instance * * @param $requestInstance An instance of a request object * @return void */ public final function setRequestInstance (Requestable $requestInstance) { $this->requestInstance = $requestInstance; } /** * Creates a new object instance and returns it * * @return $newsInstance An instance of a news object */ public function createNewsObject () { // Ask the real factory class for doing this $newsInstance = $this->getRealFactoryInstance()->createNewObject($this->requestInstance); // And return it return $newsInstance; } } // [EOF] ?>