--- /dev/null
+<?php
+
+// Die Haendler-Klasse
+class Merchant extends BaseFrameworkSystem {
+ // Name des Haendlers
+ private $merchantName = "Namenloser Händler";
+
+ // Preislite (Objekte wiedermal!)
+ private $priceList = null;
+
+ // Zugewiesener Hafen
+ private $harborInstance = null;
+
+ // Konstruktor
+ private function __construct () {
+ // Eltern-Konstruktor aufrufen
+ parent::constructor(__CLASS__);
+
+ // Debug message
+ if (((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) && (defined('DEBUG_CONSTRUCT'))) {
+ $this->getDebugInstance()->output(sprintf("[%s:%d] Konstruktor erreicht.<br />\n",
+ __CLASS__,
+ __LINE__
+ ));
+ }
+
+ // Beschreibung setzen
+ $this->setPartDescr("Händler");
+
+ // Unique-ID erzeugen
+ $this->createUniqueID();
+
+ // Clean up a little
+ $this->removeSystemArray();
+ }
+
+ // Haendler mit Namen erzeugen
+ public static function createMerchant ($merchantName, Harbor $harborInstance) {
+ // String absichern
+ $merchantName = (string) $merchantName;
+
+ // Instanz holen
+ $merchantInstance = new Merchant();
+
+ // Debug message
+ if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) {
+ $merchantInstance->getDebugInstance()->output(sprintf("[%s:%d] Ein Händler <strong>%s</strong> wird angelegt und soll sich am <strong>%s</strong> niederlassen.<br />\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 <strong>%s</strong> erhält eine leere Preisliste.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $this->getMerchantName()
+ ));
+ $this->priceList = new FrameworkArrayObject();
+ }
+
+ // Setter for merchant name
+ public 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 <strong>%s</strong> ist nun bekannt.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $merchantName
+ ));
+ $this->merchantName = $merchantName;
+ }
+
+ // Getter for merchant name
+ public function getMerchantName () {
+ if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Händlername <strong>%s</strong> wird verlangt.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $this->merchantName
+ ));
+ return $this->merchantName;
+ }
+
+ // Setter for harbor instance
+ public function setHarborInstance (Harbor $harborInstance) {
+ if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Händler <strong>%s</strong> lässt sich am <strong>%s</strong> nieder.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $this->getMerchantName(),
+ $harborInstance->getHarborName()
+ ));
+ $this->harborInstance = $harborInstance;
+ }
+
+ // Getter for harbor instance
+ public function getHarborInstance () {
+ if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Händler <strong>%s</strong> hat sich am <strong>%s</strong> niedergelassen.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $this->getMerchantName(),
+ $harborInstance->getHarborName()
+ ));
+ return $this->harborInstance;
+ }
+
+ // Add new item to merchant's price list
+ public function addItemToPriceList (ItemIsTradeable $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 <strong>%s</strong> kann nun das Schiffsteil <strong>%s</strong> "<strong>%s</strong>" zu <strong>%s</strong> verkaufen.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $this->getMerchantName(),
+ $itemInstance->__toString(),
+ $itemInstance->getPartDescr(),
+ $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 function getPriceFromList (ItemIsTradeable $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;
+ }
+
+ /**
+ * Stub!
+ */
+ public function saveObjectToDatabase () {
+ $this->getDebugInstance()->output(sprintf("[%s:] Stub <strong>%s</strong> erreicht.",
+ $this->__toString(),
+ __FUNCTION__
+ ));
+ }
+}
+
+// [EOF]
+?>