Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** TSqlMapConfig class file.** @author Wei Zhuo <weizhuo[at]gmail[dot]com>* @link http://www.pradosoft.com/* @copyright Copyright © 2005-2008 PradoSoft* @license http://www.pradosoft.com/license/* @version $Id: TSqlMapConfig.php 2541 2008-10-21 15:05:13Z qiang.xue $* @package System.Data.SqlMap*/Prado::using('System.Data.TDataSourceConfig');/*** TSqlMapConfig module configuration class.** Database connection and TSqlMapManager configuration.** @author Wei Zhuo <weizho[at]gmail[dot]com>* @version $Id: TSqlMapConfig.php 2541 2008-10-21 15:05:13Z qiang.xue $* @package System.Data.SqlMap* @since 3.1*/class TSqlMapConfig extends TDataSourceConfig{private $_configFile;private $_sqlmap;private $_enableCache=false;/*** File extension of external configuration file*/const CONFIG_FILE_EXT='.xml';/*** @return string module ID + configuration file path.*/private function getCacheKey(){return $this->getID().$this->getConfigFile();}/*** Deletes the configuration cache.*/public function clearCache(){$cache = $this->getApplication()->getCache();if($cache !== null) {$cache->delete($this->getCacheKey());}}/*** Saves the current SqlMap manager to cache.* @return boolean true if SqlMap manager was cached, false otherwise.*/protected function cacheSqlMapManager($manager){if($this->getEnableCache()){$cache = $this->getApplication()->getCache();if($cache !== null) {return $cache->set($this->getCacheKey(), $manager);}}return false;}/*** Loads SqlMap manager from cache.* @return TSqlMapManager SqlMap manager intance if load was successful, null otherwise.*/protected function loadCachedSqlMapManager(){if($this->getEnableCache()){$cache = $this->getApplication()->getCache();if($cache !== null){$manager = $cache->get($this->getCacheKey());if($manager instanceof TSqlMapManager)return $manager;}}}/*** @return string SqlMap configuration file.*/public function getConfigFile(){return $this->_configFile;}/*** @param string external configuration file in namespace format. The file* extension must be '.xml'.* @throws TConfigurationException if the file is invalid.*/public function setConfigFile($value){if(is_file($value))$this->_configFile=$value;else{$file = Prado::getPathOfNamespace($value,self::CONFIG_FILE_EXT);if($file === null || !is_file($file))throw new TConfigurationException('sqlmap_configfile_invalid',$value);else$this->_configFile = $file;}}/*** Set true to cache sqlmap instances.* @param boolean true to cache sqlmap instance.*/public function setEnableCache($value){$this->_enableCache = TPropertyValue::ensureBoolean($value);}/*** @return boolean true if configuration should be cached, false otherwise.*/public function getEnableCache(){return $this->_enableCache;}/*** Configure the data mapper using sqlmap configuration file.* If cache is enabled, the data mapper instance is cached.* @return TSqlMapGateway SqlMap gateway instance.*/protected function createSqlMapGateway(){Prado::using('System.Data.SqlMap.TSqlMapManager');if(($manager = $this->loadCachedSqlMapManager())===null){$manager = new TSqlMapManager($this->getDbConnection());if(strlen($file=$this->getConfigFile()) > 0){$manager->configureXml($file);$this->cacheSqlMapManager($manager);}}return $manager->getSqlmapGateway();}/*** Initialize the sqlmap if necessary, returns the TSqlMapGateway instance.* @return TSqlMapGateway SqlMap gateway instance.*/public function getClient(){if($this->_sqlmap===null )$this->_sqlmap=$this->createSqlMapGateway();return $this->_sqlmap;}}