X-Git-Url: https://git.mxchange.org/?p=shipsimu.git;a=blobdiff_plain;f=application%2Fship-simu%2Fmain%2Fclass_WorksContract.php;h=bbe2f35aaad07e1fddf0156b640647d5057507bc;hp=0504fa59a5d470c94f3e63cef8adbc742ca63c5b;hb=4f70843ae8428f051d70ccff5bb43fc4c03dda8d;hpb=2a157996efd680b87b0a84cc95b91619ea6e81d9 diff --git a/application/ship-simu/main/class_WorksContract.php b/application/ship-simu/main/class_WorksContract.php index 0504fa5..bbe2f35 100644 --- a/application/ship-simu/main/class_WorksContract.php +++ b/application/ship-simu/main/class_WorksContract.php @@ -2,11 +2,11 @@ /** * The work constract class which can be used for contract parties * - * @author Roland Haeder + * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Ship-Simu Developer Team * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org + * @link http://www.shipsimu.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 @@ -19,7 +19,7 @@ * 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 . + * along with this program. If not, see . */ class WorksContract extends BaseFrameworkSystem implements SignableContract { // Zukuenftiger Schiffsname @@ -41,83 +41,35 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract { private $merchantInstance = null; // Konstruktor - private function __construct () { + protected function __construct () { // Call parent constructor - parent::constructor(__CLASS__); - - // Debug message - if (((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) && (defined('DEBUG_CONSTRUCT'))) { - $this->getDebugInstance()->output(sprintf("[%s:%d] Konstruktor erreicht.
\n", - __CLASS__, - __LINE__ - )); - } - - // Set description - $this->setPartDescr("Bauvertrag"); - - // Unique-ID generieren - $this->createUniqueID(); - - // Clean up a little - $this->removeSystemArray(); + parent::__construct(__CLASS__); } // Neuen Bauvertrag generieren - public static function createWorksContract ($shipType, $shipName, ContractPartner $partnerInstance) { + public static final function createWorksContract ($shipType, $shipName, ContractPartner $partnerInstance) { // Strings absichern $shipType = (string) $shipType; $shipName = (string) $shipName; - // Is the other one a contract partner? - if (is_null($partnerInstance)) { - // Opps! Empty partner instance? - throw new NullPointerException($partnerInstance, self::EXCEPTION_IS_NULL_POINTER); - } elseif (!is_object($partnerInstance)) { - // Not an object! ;-( - throw new NoObjectException($partnerInstance, self::EXCEPTION_IS_NO_OBJECT); - } elseif (!method_exists($partnerInstance, 'isContractPartner')) { - // Does not have the required feature (method) - throw new MissingMethodException(array($partnerInstance, 'isContractPartner'), self::EXCEPTION_MISSING_METHOD); - } - // Get new instance $contractInstance = new WorksContract(); - // Debug-Meldung ausgeben - if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $contractInstance->getDebugInstance()->output(sprintf("[%s:%d] Neuer Bauvertrag wird für das Schiff %s mit der %s %s erstellt.
\n", - __CLASS__, - __LINE__, - $shipName, - $partnerInstance->getPartDescr(), - $partnerInstance->getCompanyName() - )); - // Schiffsnamen setzen $contractInstance->setShipName($shipName); // Existiert die Klasse ueberhaupt? if (!class_exists($shipType)) { // Klasse nicht gefunden - throw new ClassNotFoundException ($shipType, 0); + throw new NoClassException ($shipType, self::EXCEPTION_CLASS_NOT_FOUND); } // Schiff-Instanz temporaer erzeugen und in den Bauvertrag einfuegen - $eval = sprintf("\$contractInstance->setShipInstance(%s::create%s(\"%s\"));", - $shipType, - $shipType, - $shipName - ); - - // Debug message - if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) $contractInstance->getDebugInstance()->output(sprintf("[%s:%d] Konstruierte PHP-Anweisung:
%s

\n", - __CLASS__, - __LINE__, - htmlentities($eval) - )); + $shipInstance = ObjectFactory::createObjectByName($shipType, array($shipName)); + $contractInstance->setShipInstance($shipInstance); - // Execute constructed command - @eval($eval); + // Remove the ship instance + unset($shipInstance); // Set itself as contract partner $contractInstance->setContractPartner($partnerInstance); @@ -127,41 +79,22 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract { } // Setter for ship instance - private function setShipInstance (ConstructableShip $shipInstance) { - if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiff %s wird in den Bauvertrag aufgenommen.
\n", - __CLASS__, - __LINE__, - $shipInstance->getShipName() - )); + private final function setShipInstance (ConstructableShip $shipInstance) { $this->shipInstance = $shipInstance; } // Setter for ship name - private function setShipName ($shipName) { - if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das neue Schiff wird %s heissen.
\n", - __CLASS__, - __LINE__, - $shipName - )); + private final function setShipName ($shipName) { $this->shipName = (string) $shipName; } // Getter for ship name public final function getShipName () { - if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Schiffsname %s angefordert.
\n", - __CLASS__, - __LINE__, - $this->shipName - )); return $this->shipName; } // Getter for ship instance public final function getShipInstance () { - if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Schiff-Instanz angefordert.
\n", - __CLASS__, - __LINE__ - )); return $this->shipInstance; } @@ -172,7 +105,7 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract { $parentPart = (string) $parentPart; // Debug message - if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiffsteil %s wird zusammen mit dem Konstruktionsteil %s in den Bauvertrag aufgenommen.
\n", + if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Das Schiffsteil %s wird zusammen mit dem Konstruktionsteil %s in den Bauvertrag aufgenommen.", __CLASS__, __LINE__, $shipPart, @@ -180,101 +113,43 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract { )); // Initialize the instance (shall not be done within dynamic part) - $instance = null; - - // Prepare the big command for everthing - $eval = "try { - \$instance = ".$shipPart."::create".$shipPart."("; - foreach ($dataArray as $pIdx => $parts) { - if (is_string($parts)) { - // String einbauen - $eval .= "\"".$parts."\", "; - } elseif (is_array($parts)) { - // Ist ein weiteres Array! - $eval .= "array("; - foreach ($parts as $idx2 => $sub) { - $eval .= "'".$idx2."' => "; - if (is_string($sub)) { - // Ist erneut ein String - $eval .= "\"".$sub."\""; - } elseif (is_array($sub)) { - // Wird nicht mehr unterstuetzt! - ApplicationEntryPoint::app_die("No more arrays!"); - } else { - // Direkt anhaengen - $eval .= $sub; - } - $eval .= ", "; - } - - // Letztes Komma entfernen - $eval = substr($eval, 0, -2); - $eval .= "), "; - } else { - // Etwas anderes direkt! - $eval .= $parts.", "; - } - } - - // Letztes Komma abhaengen - $eval = substr($eval, 0, -2); - $eval .= "); -} catch (DimNotFoundInArrayException \$e) { - \$this->getDebugInstance()->output(sprintf(\"[main:] Die %s konnte nicht vervollständigt werden. Grund: %s
\\n\", - \$this->getShipInstance()->getShipName(), - \$e->getMessage() - )); - \$instance = null; -}"; - - // Debug message - if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[Ship:] Konstruierte PHP-Anweisung:
%s

\n", - htmlentities($eval) - )); - - // Code ausfuhren - @eval($eval); + $partInstance = null; - // Try to add the ship part to the contract + // Try to get an instance for this ship part try { - if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Versuche ein Schiffsteil in den Bauvertrag aufzunehmen.
\n", + $partInstance = ObjectFactory::createObjectByName($shipPart, $dataArray); + } catch (DimNotFoundInArrayException $e) { + $this->debugOutput(sprintf("[main:] Die %s konnte nicht vervollständigt werden. Grund: %s
", + $this->getShipInstance()->getShipName(), + $e->getMessage() + )); + + // Debug message + if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Versuche ein Schiffsteil in den Bauvertrag aufzunehmen.", __CLASS__, __LINE__ )); - if (!$instance instanceof ConstructableShipPart) { + + // Is this ship part constructable? + if (!$partInstance instanceof ConstructableShipPart) { // Ship part not constructable! throw new ShipPartNotConstructableException(array($shipPart), self::EXCEPTION_NOT_CONSTRUCTABLE); - } elseif (!$this->getShipInstance()->createShipPart($instance, $parentPart)) { + } elseif ($this->getShipInstance()->createShipPart($partInstance, $parentPart) === false) { // Schiff konnte nicht gebaut werden! throw new ShipNotConstructedException(sprintf("Das Schiff %s konnte wegen eines Fehlers nicht gebaut werden. Siehe obere Meldungen.", $this->getShipInstance()->getShipName() )); } - } catch(ClassNotFoundException $e) { + } catch (NoClassException $e) { // Throw it again... - throw new ClassNotFoundException($e->getMessage(), $e->getCode()); + throw new NoClassException($e->getMessage(), $e->getCode()); } // Get price for this item - $price = $this->getMerchantInstance()->getPriceFromList($instance); - - // Final debug message - if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] %s kostet %s.
\n", - __CLASS__, - __LINE__, - $instance->getPartDescr(), - $this->getMerchantInstance()->formatCurrency($price) - )); + $price = $this->getMerchantInstance()->getPriceFromList($partInstance); // Add price - $instance->setPrice($price); - - // Final debug message - if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] %s wurde in den Bauvertrag aufgenommen.
\n", - __CLASS__, - __LINE__, - $instance->getPartDescr() - )); + $partInstance->setPrice($price); } // Setter for contract partner @@ -331,24 +206,24 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract { if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) { if ($partnerInstance->equals($partyInstance)) { // With itself - $this->getDebugInstance()->output(sprintf("[%s:%d] Die %s %s stimmt einem Bauvertrag über das %s %s zu.
\n", + $this->debugOutput(sprintf("[%s:%d] Die %s %s stimmt einem Bauvertrag über das %s %s zu.", __CLASS__, __LINE__, - $partnerInstance->getPartDescr(), + $partnerInstance->getObjectDescription(), $partnerInstance->getCompanyName(), - $this->getShipInstance()->getPartDescr(), + $this->getShipInstance()->getObjectDescription(), $this->getShipInstance()->getShipName() )); } else { // Other contract party - $this->getDebugInstance()->output(sprintf("[%s:%d] Die %s %s geht mit der %s %s einen Bauvertrag über das %s %s ein.
\n", + $this->debugOutput(sprintf("[%s:%d] Die %s %s geht mit der %s %s einen Bauvertrag über das %s %s ein.", __CLASS__, __LINE__, - $partnerInstance->getPartDescr(), + $partnerInstance->getObjectDescription(), $partnerInstance->getCompanyName(), - $partyInstance->getPartDescr(), + $partyInstance->getObjectDescription(), $partyInstance->getCompanyName(), - $this->getShipInstance()->getPartDescr(), + $this->getShipInstance()->getObjectDescription(), $this->getShipInstance()->getShipName() )); } @@ -376,7 +251,7 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract { throw new NullPointerException($shipInstance, self::EXCEPTION_IS_NULL_POINTER); } elseif (!is_object($shipInstance)) { // Not an object! ;-( - throw new NoObjectException($shipInstance, self::EXCEPTION_IS_NO_OBJECT); + throw new InvalidObjectException($shipInstance, self::EXCEPTION_IS_NO_OBJECT); } elseif (!$shipInstance instanceof ConstructableShip) { // Does not have the required feature (method) throw new ShipIsInvalidException(array($shipInstance), self::EXCEPTION_INVALID_SHIP_INSTANCE); @@ -405,8 +280,8 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract { throw new NullPointerException($item, self::EXCEPTION_IS_NULL_POINTER); } elseif (!is_object($item)) { // Not an object! ;-( - throw new NoObjectException($item, self::EXCEPTION_IS_NO_OBJECT); - } elseif (!method_exists($item, 'getPartInstance')) { + throw new InvalidObjectException($item, self::EXCEPTION_IS_NO_OBJECT); + } elseif (!$item instanceof BaseSimulator) { // Does not have the required feature (method) throw new MissingMethodException(array($item, 'getPartInstance'), self::EXCEPTION_MISSING_METHOD); } @@ -420,7 +295,7 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract { throw new NullPointerException($part, self::EXCEPTION_IS_NULL_POINTER); } elseif (!is_object($part)) { // Not an object! ;-( - throw new NoObjectException($part, self::EXCEPTION_IS_NO_OBJECT); + throw new InvalidObjectException($part, self::EXCEPTION_IS_NO_OBJECT); } elseif (!method_exists($part, 'getPrice')) { // Does not have the required feature (method) throw new MissingMethodException(array($part, 'getPrice'), self::EXCEPTION_MISSING_METHOD); @@ -448,16 +323,6 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract { // Return total price return $totalPrice; } - - /** - * Stub! - */ - public function saveObjectToDatabase () { - $this->getDebugInstance()->output(sprintf("[%s:] Stub %s erreicht.", - $this->__toString(), - __FUNCTION__ - )); - } } // [EOF]