* @version 0.0.0 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Hub 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 CruncherTestUnitProducer extends BaseUnitProducer implements UnitProducer, Registerable { /** * Protected constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); } /** * Creates an instance of this class * * @return $producerInstance An instance of a Producer class */ public final static function createCruncherTestUnitProducer () { // Get new instance $producerInstance = new CruncherTestUnitProducer(); // Test units have a helper class that wraps the source $helperInstance = ObjectFactory::createObjectByConfiguredName('crypto_random_message_helper_class', array('test')); // So set it in the producer $producerInstance->setHelperInstance($helperInstance); // Return the prepared instance return $producerInstance; } /** * Initializes the producer. This method satisfies the abstract BaseProducer * class. * * @return void */ protected function initProducer () { // Get a XML template instance $templateInstance = XmlTemplateEngineFactory::createXmlTemplateEngineInstance('cruncher_test_unit_producer_template_class'); // Load the template $templateInstance->loadCruncherTestUnitTemplate('test_unit'); // Render the XML content $templateInstance->renderXmlContent(); // And set it in this cruncher $this->setTemplateInstance($templateInstance); } /** * Prepares the produces of some test units and pushes them onto the queue * * @param $stateInstance An instance of a Stateable instance * @return void * @todo ~60% done */ public function prepareUnitProduction (Stateable $stateInstance) { // First get a database wrapper because we want to permanently store test units $wrapperInstance = ObjectFactory::createObjectByConfiguredName('cruncher_unit_db_wrapper_class'); // Now get a search instance $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class'); // Add criteria for looking up already created and available test units $searchInstance->addCriteria(CruncherUnitDatabaseWrapper::DB_COLUMN_UNIT_TYPE , BaseUnitProducer::UNIT_TYPE_TEST_UNIT); $searchInstance->addCriteria(CruncherUnitDatabaseWrapper::DB_COLUMN_UNIT_STATUS, BaseUnitProducer::UNIT_STATUS_AVAILABLE); $searchInstance->setConfiguredLimit('cruncher_test_unit_max_count'); // Search for our units $resultInstance = $wrapperInstance->doSelectByCriteria($searchInstance); // Do we have some entries? if ($resultInstance->next()) { // Entries found // @TODO Unfinished work here $this->debugInstance(); // The state must be changed because ... $stateInstance->someFooStateChange(); } else { // Get an encrypted, random message from our source $encryptedMessage = $this->getHelperInstance()->generateRandomMessage(); // Debug message $this->debugOutput('PRODUCER: An encrypted, random message has been generated. Generating keys ...'); // Set the encrypted message in the template instance $this->getTemplateInstance()->assignVariable('encrypted_message', $encryptedMessage); // The state must be changed because we have a new message $stateInstance->encryptedMessageGenerated(); } } } // [EOF] ?>