*
* @author Roland Haeder <webmaster@ship-simu.org>
* @version 0.0.0
- * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software
+ * @copyright Copyright (c) 2007 - 2009 Roland Haeder, this is free software
* @license GNU GPL 3.0 or any newer version
* @link http://www.ship-simu.org
*
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
- /**
- * Instance to an application helper class
- */
- private static $applicationInstance = null;
-
- /**
- * The language instance for the template loader
- */
- private static $langInstance = null;
-
- /**
- * Debug instance
- */
- private static $debugInstance = null;
-
/**
* Instance of a request class
*/
*/
private $searchInstance = null;
+ /**
+ * Update criteria instance
+ */
+ private $updateInstance = null;
+
/**
* The file I/O instance for the template loader
*/
const EXCEPTION_ASSERTION_FAILED = 0x037;
const EXCEPTION_FILE_CANNOT_BE_READ = 0x038;
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
"GzipCompressor", // GZIP compressor
);
- /* No longer used:
- */
-
/**
- * Private super constructor
+ * Protected super constructor
*
* @param $className Name of the class
* @return void
* @todo This is old code. Do we still need this old lost code?
*/
public function __destruct() {
+ // Flush any updated entries to the database
+ $this->flushPendingUpdates();
+
// Is this object already destroyed?
if ($this->__toString() != 'DestructedObject') {
// Destroy all informations about this class but keep some text about it alive
return $this->searchInstance;
}
+ /**
+ * Setter for update instance
+ *
+ * @param $updateInstance Searchable criteria instance
+ * @return void
+ */
+ public final function setUpdateInstance (LocalUpdateCriteria $updateInstance) {
+ $this->updateInstance = $updateInstance;
+ }
+
+ /**
+ * Getter for update instance
+ *
+ * @return $updateInstance Updateable criteria instance
+ */
+ public final function getUpdateInstance () {
+ return $this->updateInstance;
+ }
+
/**
* Setter for resolver instance
*
* @return void
*/
public final function setDebugInstance (DebugMiddleware $debugInstance) {
- self::$debugInstance = $debugInstance;
+ Registry::getRegistry()->addInstance('debug', $debugInstance);
}
/**
* @return $debugInstance Instance to class DebugConsoleOutput or DebugWebOutput
*/
public final function getDebugInstance () {
- return self::$debugInstance;
+ $debugInstance = Registry::getRegistry()->getInstance('debug');
+ return $debugInstance;
}
/**
/**
* Getter for web output instance
*
- * @return $webOutput - Instance to class WebOutput
+ * @return $webOutputInstance - Instance to class WebOutput
*/
public final function getWebOutputInstance () {
- return Registry::getRegistry()->getInstance('web_output');
+ $webOutputInstance = Registry::getRegistry()->getInstance('web_output');
+ return $webOutputInstance;
}
/**
* @return void
*/
public final function setDatabaseInstance (DatabaseConnection $dbInstance) {
- Registry::getRegistry()->addInstance('dbInstance', $dbInstance);
+ Registry::getRegistry()->addInstance('db_instance', $dbInstance);
}
/**
// Is the registry there and initialized?
if ((class_exists('Registry')) && (Registry::isInitialized() === true)) {
- $dbInstance = Registry::getRegistry()->getInstance('dbInstance');
+ $dbInstance = Registry::getRegistry()->getInstance('db_instance');
} // END - if
// Return instance
/**
* Setter for compressor channel
*
- * @param $compressorChannel An instance of CompressorChannel
+ * @param $compressorInstance An instance of CompressorChannel
* @return void
*/
- public final function setCompressorChannel (CompressorChannel $compressorChannel) {
- Registry::getRegistry()->addInstance('compressor', $compressorChannel);
+ public final function setCompressorChannel (CompressorChannel $compressorInstance) {
+ Registry::getRegistry()->addInstance('compressor', $compressorInstance);
}
/**
* Getter for compressor channel
*
- * @return $compressor The compressor channel
+ * @return $compressorInstance The compressor channel
*/
public final function getCompressorChannel () {
- return Registry::getRegistry()->getInstance('compressor');
+ $compressorInstance = Registry::getRegistry()->getInstance('compressor');
+ return $compressorInstance;
}
/**
* @return $applicationInstance An instance of a manageable application helper class
*/
protected final function getApplicationInstance () {
- return self::$applicationInstance;
+ $applicationInstance = Registry::getRegistry()->getInstance('application');
+ return $applicationInstance;
}
/**
* @return void
*/
public final function setApplicationInstance (ManageableApplication $applicationInstance) {
- self::$applicationInstance = $applicationInstance;
+ Registry::getRegistry()->addInstance('application', $applicationInstance);
}
/**
* @return $langInstance An instance to the language sub-system
*/
protected final function getLanguageInstance () {
- return self::$langInstance;
+ $langInstance = Registry::getRegistry()->getInstance('language');
+ return $langInstance;
}
/**
* @see LanguageSystem
*/
public final function setLanguageInstance (ManageableLanguage $langInstance) {
- self::$langInstance = $langInstance;
+ Registry::getRegistry()->addInstance('language', $langInstance);
}
/**
public final function getControllerInstance () {
return $this->controllerInstance;
}
+
+ /**
+ * Flushs all pending updates to the database layer
+ *
+ * @return void
+ */
+ public function flushPendingUpdates () {
+ // Get result instance
+ $resultInstance = $this->getResultInstance();
+
+ // Do we have data to update?
+ if ((is_object($resultInstance)) && ($resultInstance->ifDataNeedsFlush())) {
+ // Get wrapper class name config entry
+ $configEntry = $resultInstance->getUpdateInstance()->getWrapperConfigEntry();
+
+ // Create object instance
+ $wrapperInstance = ObjectFactory::createObjectByConfiguredName($configEntry);
+
+ // Yes, then send the whole result to the database layer
+ $wrapperInstance->doUpdateByResult($this->getResultInstance());
+ } // END - if
+ }
}
// [EOF]