* @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]
?>