*/
private $controllerInstance = null;
+ /**
+ * Instance of a RNG
+ */
+ private $rngInstance = null;
+
+ /**
+ * Instance of an Iterator class
+ */
+ private $iteratorInstance = null;
+
+ /**
+ * Instance of the list
+ */
+ private $listInstance = null;
+
/**
* The real class name
*/
- private $realClass = 'FrameworkSystem';
+ private $realClass = 'BaseFrameworkSystem';
/**
* Thousands seperator
/***********************
* Exception codes.... *
***********************/
-
+ // @todo Try to clean these constants up
const EXCEPTION_IS_NULL_POINTER = 0x001;
const EXCEPTION_IS_NO_OBJECT = 0x002;
const EXCEPTION_IS_NO_ARRAY = 0x003;
const EXCEPTION_WRITE_PROTECED_PATH = 0x018;
const EXCEPTION_DIR_POINTER_INVALID = 0x019;
const EXCEPTION_FILE_POINTER_INVALID = 0x01a;
- const EXCEPTION_INVALID_DIRECTORY_POINTER = 0x01b;
+ const EXCEPTION_INVALID_RESOURCE = 0x01b;
const EXCEPTION_UNEXPECTED_OBJECT = 0x01c;
const EXCEPTION_LIMIT_ELEMENT_IS_UNSUPPORTED = 0x01d;
const EXCEPTION_GETTER_IS_MISSING = 0x01e;
const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x039;
const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x040;
- /**
- * In the super constructor these system classes shall be ignored or else
- * we would get an endless calling loop.
- *
- *---------------------------------------------------------------------*
- * ATTENTION: IF YOU REMOVE ONE OF THEM YOU WILL RUN YOUR SERVER IN AN *
- * ENDLESS LOOP !!! *
- *---------------------------------------------------------------------*
- */
- private $systemClasses = array(
- 'DebugMiddleware', // Debug middleware output sub-system
- 'Registry', // Object registry
- 'ObjectFactory', // Object factory
- 'DebugWebOutput', // Debug web output sub-system
- 'WebOutput', // Web output sub-system
- 'CompressorChannel', // Compressor sub-system
- 'DebugConsoleOutput', // Debug console output sub-system
- 'DebugErrorLogOutput', // Debug error_log() output sub-system
- 'FrameworkDirectoryPointer', // Directory handler sub-system
- 'NullCompressor', // Null compressor
- 'Bzip2Compressor', // BZIP2 compressor
- 'GzipCompressor', // GZIP compressor
- );
/**
* Protected super constructor
*
// Set real class
$this->setRealClass($className);
- // Initialize the class if class Registry is there
- if ((class_exists('Registry')) && (Registry::isInitialized() === false)) {
- // Initialize the registry automatically
- $this->initInstance();
+ // Set configuration instance if no registry
+ if (!$this instanceof Register) {
+ // Because registries doesn't need to be configured
+ $this->setConfigInstance(FrameworkConfiguration::getInstance());
} // END - if
}
return null;
}
- /**
- * Private initializer for this class
- *
- * @return void
- */
- private final function initInstance () {
- // Is this a system class?
- if (!in_array($this->__toString(), $this->systemClasses)) {
- // Set configuration instance
- $this->setConfigInstance(FrameworkConfiguration::getInstance());
-
- // Add application helper to our class
- $this->systemclasses[] = $this->getConfigInstance()->readConfig('app_helper_class');
-
- // Set debug instance
- $this->setDebugInstance(DebugMiddleware::createDebugMiddleware($this->getConfigInstance()->readConfig('debug_class')));
-
- // Get output instance and set it
- $outputInstance = ObjectFactory::createObjectByConfiguredName('output_class', array($this->getConfigInstance()->readConfig('web_content_type')));
- $this->setWebOutputInstance($outputInstance);
-
- // Set the compressor channel
- $this->setCompressorChannel(CompressorChannel::createCompressorChannel(
- $this->getConfigInstance()->readConfig('base_path').
- $this->getConfigInstance()->readConfig('compressor_base_path')
- ));
-
- // Initialization done! :D
- Registry::isInitialized('OK');
- } elseif ($this->__toString() == 'DebugMiddleware') {
- // Set configuration instance
- $this->setConfigInstance(FrameworkConfiguration::getInstance());
- }
- }
-
/**
* Setter for database result instance
*
* @return $debugInstance Instance to class DebugConsoleOutput or DebugWebOutput
*/
public final function getDebugInstance () {
+ // Get debug instance
$debugInstance = Registry::getRegistry()->getInstance('debug');
+
+ // Return it
return $debugInstance;
}
* @return $dbInstance The database layer instance
*/
public final function getDatabaseInstance () {
- // Default is invalid db instance
- $dbInstance = null;
-
- // Is the registry there and initialized?
- if ((class_exists('Registry')) && (Registry::isInitialized() === true)) {
- $dbInstance = Registry::getRegistry()->getInstance('db_instance');
- } // END - if
+ // Get instance
+ $dbInstance = Registry::getRegistry()->getInstance('db_instance');
// Return instance
return $dbInstance;
}
/**
- * Compare class name of this and given class name
- *
- * @param $className The class name as string from the other class
- * @return boolean The result of comparing both class names
- */
- public final function isClass ($className) {
- return ($this->__toString() == $className);
- }
-
- /**
- * Stub method (only real cabins shall override it)
+ * Checks wether an object equals this object. You should overwrite this
+ * method to implement own equality checks
*
- * @return boolean false = is no cabin, true = is a cabin
- * @deprecated
- */
- public function isCabin () {
- return false;
- }
+ * @param $objectInstance An instance of a FrameworkInterface object
+ * @return $equals Wether both objects equals
+ */
+ public function equals (FrameworkInterface $objectInstance) {
+ // Now test it
+ $equals = ((
+ $this->__toString() == $objectInstance->__toString()
+ ) && (
+ $this->hashCode() == $objectInstance->hashCode()
+ ));
- /**
- * Stub method for tradeable objects
- *
- * @return boolean false = is not tradeable by the Merchant class,
- * true = is a tradeable object
- * @deprecated
- */
- public function isTradeable () {
- return false;
+ // Return the result
+ return $result;
}
/**
return $price;
}
- /**
- * Removes number formating characters
- *
- * @return void
- */
- public final function removeNumberFormaters () {
- unset($this->thousands);
- unset($this->decimals);
- }
-
/**
* Private getter for language instance
*
Registry::getRegistry()->addInstance('language', $langInstance);
}
- /**
- * Remove the $systemClasses array from memory
- *
- * @return void
- */
- public final function removeSystemArray () {
- unset($this->systemClasses);
- }
-
/**
* Appends a trailing slash to a string
*
* @throws NullPointerException If the discovered application
* instance is still null
*/
- protected function prepareTemplateInstance (BaseFrameworkSystem $appInstance=null) {
+ protected function prepareTemplateInstance (FrameworkInterface $appInstance=null) {
// Is the application instance set?
if (is_null($appInstance)) {
// Get the current instance
if ($doPrint === false) die(); // Die here if not printed
} else {
// Put directly out
- if ($doPrint) {
+ if ($doPrint === true) {
print($message);
} else {
// DO NOT REWRITE THIS TO app_die() !!!
$timeArray = explode(':', $dateTime[1]);
// Construct the timestamp
- $readable = sprintf($this->getConfigInstance()->readConfig('german_date_time'),
+ $readable = sprintf($this->getConfigInstance()->getConfigEntry('german_date_time'),
$dateArray[0],
$dateArray[1],
$dateArray[2],
$this->partialStub('Developer mode inactive. Message:' . $message);
}
}
+
+ /**
+ * Generates a generic hash code of this class. You should really overwrite
+ * this method with your own hash code generator code. But keep KISS in mind.
+ *
+ * @return $hashCode A generic hash code respresenting this whole class
+ */
+ public function hashCode () {
+ // Simple hash code
+ return crc32($this->__toString());
+ }
+
+ /**
+ * Checks wether the given PHP extension is loaded
+ *
+ * @param $phpExtension The PHP extension we shall check
+ * @return $isLoaded Wether the PHP extension is loaded
+ */
+ public final function isPhpExtensionLoaded ($phpExtension) {
+ // Is it loaded?
+ $isLoaded = in_array($phpExtension, get_loaded_extensions());
+
+ // Return result
+ return $isLoaded;
+ }
+
+ /**
+ * Setter for RNG instance
+ *
+ * @param $rngInstance An instance of a random number generator (RNG)
+ * @return void
+ */
+ protected final function setRngInstance (RandomNumberGenerator $rngInstance) {
+ $this->rngInstance = $rngInstance;
+ }
+
+ /**
+ * Getter for RNG instance
+ *
+ * @return $rngInstance An instance of a random number generator (RNG)
+ */
+ public final function getRngInstance () {
+ return $this->rngInstance;
+ }
+
+ /**
+ * Setter for Iterator instance
+ *
+ * @param $iteratorInstance An instance of an Iterator
+ * @return void
+ */
+ protected final function setIteratorInstance (Iterator $iteratorInstance) {
+ $this->iteratorInstance = $iteratorInstance;
+ }
+
+ /**
+ * Getter for Iterator instance
+ *
+ * @return $iteratorInstance An instance of an Iterator
+ */
+ public final function getIteratorInstance () {
+ return $this->iteratorInstance;
+ }
+
+ /**
+ * "Getter" as a time() replacement but with milliseconds. You should use this
+ * method instead of the encapsulated getimeofday() function.
+ *
+ * @return $milliTime Timestamp with milliseconds
+ */
+ public function getMilliTime () {
+ // Get the time of day as float
+ $milliTime = gettimeofday(true);
+
+ // Return it
+ return $milliTime;
+ }
+
+ /**
+ * Idles (sleeps) for given milliseconds
+ *
+ * @return $hasSlept Wether it goes fine
+ */
+ public function idle ($milliSeconds) {
+ // Sleep is fine by default
+ $hasSlept = true;
+
+ // Idle so long with found function
+ if (function_exists('time_sleep_until')) {
+ // Get current time and add idle time
+ $sleepUntil = $this->getMilliTime() + abs($milliSeconds) / 1000;
+
+ // New PHP 5.1.0 function found
+ $hasSlept = time_sleep_until($sleepUntil);
+ } else {
+ // My Sun Station doesn't have that function even with latest PHP
+ // package. :(
+ usleep($milliSeconds * 1000);
+ }
+
+ // Return result
+ return $hasSlept;
+ }
+
+ /**
+ * Setter for the list instance
+ *
+ * @param $listInstance A list of Listable
+ * @return void
+ */
+ protected final function setListInstance (Listable $listInstance) {
+ $this->listInstance = $listInstance;
+ }
+
+ /**
+ * Getter for the list instance
+ *
+ * @return $listInstance A list of Listable
+ */
+ protected final function getListInstance () {
+ return $this->listInstance;
+ }
}
// [EOF]