* @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 Merchant extends BaseFrameworkSystem { // Name des Haendlers private $merchantName = "Namenloser Händler"; // Preislite (Objekte wiedermal!) private $priceList = null; // Zugewiesener Hafen private $harborInstance = null; // Konstruktor protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); // Set description $this->setObjectDescription("Händler"); // Generate unique ID number $this->generateUniqueId(); // Clean up a little $this->removeSystemArray(); } // Haendler mit Namen erzeugen public final static function createMerchant ($merchantName, Harbor $harborInstance) { // String absichern $merchantName = (string) $merchantName; // Get new instance $merchantInstance = new Merchant(); // Debug message if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) { $merchantInstance->getDebugInstance()->output(sprintf("[%s:%d] Ein Händler %s wird angelegt und soll sich am %s niederlassen.
\n", __CLASS__, __LINE__, $merchantName, $harborInstance->getHarborName() )); } // Haendlernamen setzen $merchantInstance->setMerchantName($merchantName); // In dem angegebenen Hafen den Haendler ansiedeln $merchantInstance->setHarborInstance($harborInstance); // Preisliste initialisieren $merchantInstance->createPriceList(); // Instanz zurueckliefern return $merchantInstance; } // Initialize pricing list private function createPriceList () { if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Händler %s erhält eine leere Preisliste.
\n", __CLASS__, __LINE__, $this->getMerchantName() )); $this->priceList = new FrameworkArrayObject("FakedPriceList"); } // Setter for merchant name public final function setMerchantName ($merchantName) { // Secure string $merchantName = (string) $merchantName; // Debug message if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Händlername %s ist nun bekannt.
\n", __CLASS__, __LINE__, $merchantName )); $this->merchantName = $merchantName; } // Getter for merchant name public final function getMerchantName () { if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Händlername %s wird verlangt.
\n", __CLASS__, __LINE__, $this->merchantName )); return $this->merchantName; } // Setter for harbor instance public final function setHarborInstance (Harbor $harborInstance) { if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Händler %s lässt sich am %s nieder.
\n", __CLASS__, __LINE__, $this->getMerchantName(), $harborInstance->getHarborName() )); $this->harborInstance = $harborInstance; } // Getter for harbor instance public final function getHarborInstance () { if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Händler %s hat sich am %s niedergelassen.
\n", __CLASS__, __LINE__, $this->getMerchantName(), $harborInstance->getHarborName() )); return $this->harborInstance; } // Add new item to merchant's price list public function addItemToPriceList (TradeableItem $itemInstance, $price) { // Secure pricing $price = (float) $price; // Debug message if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Händler %s kann nun das Schiffsteil %s "%s" zu %s verkaufen.
\n", __CLASS__, __LINE__, $this->getMerchantName(), $itemInstance->__toString(), $itemInstance->getObjectDescription(), $this->formatCurrency($price) )); // Construct pricing item and add it to the list $this->priceList->append(array( 'item' => $itemInstance, 'price' => $price )); // Remove price attribute $itemInstance->removePrice(); } // Get a price from the merchant's list public final function getPriceFromList (TradeableItem $itemInstance) { $price = 0; // Iterate throw whole list for ($iter = $this->priceList->getIterator(); $iter->valid(); $iter->next()) { // Get current item $item = $iter->current(); // Does this item match? The unique ID may not work... if ($item['item']->itemMatches($itemInstance)) { // Extract price and stop searching $price = $item['price']; break; } } // Was the item found? if ($price === 0) { // Throw exception throw new ItemNotInPriceListException($itemInstance, self::EXCEPTION_ITEM_NOT_IN_PRICE_LIST); } // Return price return $price; } } // [EOF] ?>