X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=application%2Fship-simu%2Fmain%2Fclass_WorksContract.php;h=7f61096fc5a532879b97652195be0a38d939b722;hb=a771e8625d659bffda3dc7dd929b5fcc877e9328;hp=d2d4aecc705cc1e27cd22f209daba0ad0fe90fb5;hpb=a76d51b4096b47436e269156547f02713d95af5b;p=shipsimu.git
diff --git a/application/ship-simu/main/class_WorksContract.php b/application/ship-simu/main/class_WorksContract.php
index d2d4aec..7f61096 100644
--- a/application/ship-simu/main/class_WorksContract.php
+++ b/application/ship-simu/main/class_WorksContract.php
@@ -1,6 +1,26 @@
+ * @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 WorksContract extends BaseFrameworkSystem implements SignableContract {
// Zukuenftiger Schiffsname
private $shipName = "";
@@ -21,83 +41,39 @@ 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();
+ parent::__construct(__CLASS__);
// Clean up a little
$this->removeSystemArray();
+ $this->removeNumberFormaters();
}
// Neuen Bauvertrag generieren
- public static function createWorksContract ($shipType, $shipName, ContractPartner $partnerInstance) {
+ public final static 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 ClassNotFoundException ($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);
@@ -107,41 +83,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;
}
@@ -152,7 +109,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,
@@ -160,101 +117,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)) {
// 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 (ClassNotFoundException $e) {
// Throw it again...
throw new ClassNotFoundException($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
@@ -311,24 +210,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()
));
}
@@ -386,7 +285,7 @@ class WorksContract extends BaseFrameworkSystem implements SignableContract {
} elseif (!is_object($item)) {
// Not an object! ;-(
throw new NoObjectException($item, self::EXCEPTION_IS_NO_OBJECT);
- } elseif (!method_exists($item, 'getPartInstance')) {
+ } elseif (!$item instanceof BaseSimulator) {
// Does not have the required feature (method)
throw new MissingMethodException(array($item, 'getPartInstance'), self::EXCEPTION_MISSING_METHOD);
}
@@ -428,16 +327,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]