From 6ca112528d2dc5cd24a38638f185fcabc5e14f98 Mon Sep 17 00:00:00 2001 From: Gunnar Wrobel Date: Tue, 4 Jan 2011 07:29:52 +0100 Subject: [PATCH] Register queries on the list handlers and also retrieve them from there. --- .../Kolab_Storage/lib/Horde/Kolab/Storage/Base.php | 4 +++- .../lib/Horde/Kolab/Storage/Decorator/Cache.php | 25 +++++++++++++++++----- .../lib/Horde/Kolab/Storage/Factory.php | 20 +++++++++-------- .../lib/Horde/Kolab/Storage/List/Base.php | 23 +++++++++++++++++--- .../Horde/Kolab/Storage/List/Decorator/Cache.php | 17 +++++++++++++-- .../lib/Horde/Kolab/Storage/List/Decorator/Log.php | 17 +++++++++++++-- .../lib/Horde/Kolab/Storage/List/Query/Base.php | 22 ++++++------------- .../lib/Horde/Kolab/Storage/List/Query/Cache.php | 12 +++++------ .../lib/Horde/Kolab/Storage/Queriable.php | 12 ++++++++++- .../test/Horde/Kolab/Storage/Stub/FactoryQuery.php | 12 ----------- .../test/Horde/Kolab/Storage/TestCase.php | 8 ++++--- .../Kolab/Storage/Unit/Decorator/CacheTest.php | 8 ++++--- .../test/Horde/Kolab/Storage/Unit/FactoryTest.php | 15 ------------- .../Horde/Kolab/Storage/Unit/List/BaseTest.php | 19 +++++++++++++++- 14 files changed, 135 insertions(+), 79 deletions(-) diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Base.php index 217e8e51e..98529c7fc 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Base.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Base.php @@ -65,10 +65,12 @@ implements Horde_Kolab_Storage */ public function getList() { - return new Horde_Kolab_Storage_List_Base( + $list = new Horde_Kolab_Storage_List_Base( $this->_master, $this->_factory ); + $this->_factory->createListQuery('Base', $list); + return $list; } /** diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Decorator/Cache.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Decorator/Cache.php index 8be9402fb..d9327a0bf 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Decorator/Cache.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Decorator/Cache.php @@ -43,17 +43,27 @@ implements Horde_Kolab_Storage private $_cache; /** + * The factory for generating additional resources. + * + * @var Horde_Kolab_Storage_Factory + */ + private $_factory; + + /** * Constructor. * * @param Horde_Kolab_Storage $storage The storage handler. * @param Horde_Kolab_Storage_Cache $cache The cache. + * @param Horde_Kolab_Storage_Factory $factory The factory. */ public function __construct( Horde_Kolab_Storage $storage, - Horde_Kolab_Storage_Cache $cache + Horde_Kolab_Storage_Cache $cache, + Horde_Kolab_Storage_Factory $factory ) { $this->_storage = $storage; $this->_cache = $cache; + $this->_factory = $factory; } /** @@ -64,12 +74,17 @@ implements Horde_Kolab_Storage */ public function getList() { - return new Horde_Kolab_Storage_List_Decorator_Cache( + $list_cache = new Horde_Kolab_Storage_Cache_List( + $this->_cache + ); + $list = new Horde_Kolab_Storage_List_Decorator_Cache( $this->_storage->getList(), - new Horde_Kolab_Storage_Cache_List( - $this->_cache - ) + $list_cache + ); + $this->_factory->createListQuery( + 'Cache', $list, array('cache' => $list_cache) ); + return $list; } /** diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php index 533993dd6..23d521997 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php @@ -197,28 +197,30 @@ class Horde_Kolab_Storage_Factory /** * Create the specified list query type. * - * @param string $name The query name. - * @param Horde_Kolab_Storage_List $list The list that should be queried. + * @param string $name The query name. + * @param Horde_Kolab_Storage_List $list The list that should be queried. + * @param array $params Additional parameters provided + * to the query constructor. * * @return Horde_Kolab_Storage_Query A query handler. * * @throws Horde_Kolab_Storage_Exception In case the requested query is not supported. */ - public function createListQuery($name, Horde_Kolab_Storage_List $list) + public function createListQuery($name, Horde_Kolab_Storage_List $list, $params = array()) { if (class_exists($name)) { - $query = new $name($list); + $constructor_params = array_merge( + array('factory' => $this), $params + ); + $query = new $name($list, $constructor_params); } else if (strpos($name, 'Horde_Kolab_Storage_List_Query_') === false) { $query = $this->createListQuery( - 'Horde_Kolab_Storage_List_Query_' . $name, $list + 'Horde_Kolab_Storage_List_Query_' . $name, $list, $params ); } else { throw new Horde_Kolab_Storage_Exception(sprintf('No such query "%s"!', $name)); } - if (method_exists($query, 'setFactory')) { - $query->setFactory($this); - } - $list->registerQuery($query); + $list->registerQuery($name, $query); return $query; } diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php index 5bae4b305..6bcae18ad 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php @@ -94,7 +94,7 @@ implements Horde_Kolab_Storage_List */ public function synchronize() { - foreach ($this->_queries as $query) { + foreach ($this->_queries as $name => $query) { $query->synchronize(); } } @@ -102,12 +102,29 @@ implements Horde_Kolab_Storage_List /** * Register a query to be updated if the underlying data changes. * + * @param string $name The query name. * @param Horde_Kolab_Storage_Query $query The query to register. * * @return NULL */ - public function registerQuery(Horde_Kolab_Storage_Query $query) + public function registerQuery($name, Horde_Kolab_Storage_Query $query) { - $this->_queries[] = $query; + $this->_queries[$name] = $query; + } + + /** + * Return a registered query. + * + * @param string $name The query name. + * + * @return NULL + */ + public function getQuery($name) + { + if (isset($this->_queries[$name])) { + return $this->_queries[$name]; + } else { + throw new Horde_Kolab_Storage_Exception('No such query!'); + } } } \ No newline at end of file diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Cache.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Cache.php index 8eba1b262..0a4b80467 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Cache.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Cache.php @@ -135,12 +135,25 @@ implements Horde_Kolab_Storage_List /** * Register a query to be updated if the underlying data changes. * + * @param string $name The query name. * @param Horde_Kolab_Storage_Query $query The query to register. * * @return NULL */ - public function registerQuery(Horde_Kolab_Storage_Query $query) + public function registerQuery($name, Horde_Kolab_Storage_Query $query) { - $this->_list->registerQuery($query); + $this->_list->registerQuery($name, $query); + } + + /** + * Return a registered query. + * + * @param string $name The query name. + * + * @return NULL + */ + public function getQuery($name) + { + $this->_list->getQuery($name); } } \ No newline at end of file diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php index 6e02167b3..b97374b60 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php @@ -135,12 +135,25 @@ implements Horde_Kolab_Storage_List /** * Register a query to be updated if the underlying data changes. * + * @param string $name The query name. * @param Horde_Kolab_Storage_Query $query The query to register. * * @return NULL */ - public function registerQuery(Horde_Kolab_Storage_Query $query) + public function registerQuery($name, Horde_Kolab_Storage_Query $query) { - $this->_list->registerQuery($query); + $this->_list->registerQuery($name, $query); + } + + /** + * Return a registered query. + * + * @param string $name The query name. + * + * @return NULL + */ + public function getQuery($name) + { + $this->_list->getQuery($name); } } \ No newline at end of file diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php index 4d34266a9..7aff0950e 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php @@ -45,23 +45,15 @@ implements Horde_Kolab_Storage_List_Query /** * Constructor. * - * @param Horde_Kolab_Storage_List $list The queriable list. + * @param Horde_Kolab_Storage_List $list The queriable list. + * @param array $params Additional parameters. */ - public function __construct(Horde_Kolab_Storage_List $list) - { + public function __construct( + Horde_Kolab_Storage_List $list, + $params + ) { $this->_list = $list; - } - - /** - * Inject the factory. - * - * @param Horde_Kolab_Storage_Factory $factory The factory. - * - * @return NULL - */ - public function setFactory(Horde_Kolab_Storage_Factory $factory) - { - $this->_factory = $factory; + $this->_factory = $params['factory']; } /** diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Cache.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Cache.php index 86c43c3e2..de3a29924 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Cache.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Cache.php @@ -58,18 +58,16 @@ implements Horde_Kolab_Storage_List_Query /** * Constructor. * - * @param Horde_Kolab_Storage_List $list The queriable list. - * @param Horde_Kolab_Storage_Factory $factory The factory. - * @param Horde_Kolab_Storage_Cache_List $list_cache The list cache. + * @param Horde_Kolab_Storage_List $list The queriable list. + * @param array $params Additional parameters. */ public function __construct( Horde_Kolab_Storage_List $list, - Horde_Kolab_Storage_Factory $factory, - Horde_Kolab_Storage_Cache_List $list_cache + $params ) { $this->_list = $list; - $this->_list_cache = $list_cache; - $this->_factory = $factory; + $this->_list_cache = $params['cache']; + $this->_factory = $params['factory']; } /** diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php index 9d110baeb..905242ce1 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php @@ -30,10 +30,20 @@ interface Horde_Kolab_Storage_Queriable /** * Register a query to be updated if the underlying data changes. * + * @param string $name The query name. * @param Horde_Kolab_Storage_Query $query The query to register. * * @return NULL */ - public function registerQuery(Horde_Kolab_Storage_Query $query); + public function registerQuery($name, Horde_Kolab_Storage_Query $query); + + /** + * Return a registered query. + * + * @param string $name The query name. + * + * @return NULL + */ + public function getQuery($name); } diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Stub/FactoryQuery.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Stub/FactoryQuery.php index cba9c5911..6fcc634cf 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Stub/FactoryQuery.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Stub/FactoryQuery.php @@ -15,18 +15,6 @@ implements Horde_Kolab_Storage_Query } /** - * Inject the factory. - * - * @param Horde_Kolab_Storage_Factory $factory The factory. - * - * @return NULL - */ - public function setFactory(Horde_Kolab_Storage_Factory $factory) - { - $this->called = true; - } - - /** * Synchronize the query data with the information from the backend. * * @return NULL diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/TestCase.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/TestCase.php index 835dd67e9..b303ac274 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/TestCase.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/TestCase.php @@ -197,10 +197,12 @@ extends PHPUnit_Framework_TestCase ); $query = new Horde_Kolab_Storage_List_Query_Cache( $list, - $factory, - $list_cache + array( + 'factory' => $factory, + 'cache' => $list_cache + ) ); - $list->registerQuery($query); + $list->registerQuery('test', $query); $list->synchronize(); return $query; } diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Decorator/CacheTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Decorator/CacheTest.php index 80e84dafd..2210be22c 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Decorator/CacheTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Decorator/CacheTest.php @@ -37,12 +37,14 @@ extends Horde_Kolab_Storage_TestCase { public function testDecoratedList() { + $factory = new Horde_Kolab_Storage_Factory(); $storage = new Horde_Kolab_Storage_Decorator_Cache( new Horde_Kolab_Storage_Base( - $this->getNullMock(), - new Horde_Kolab_Storage_Factory() + $this->getNullMock($factory), + $factory ), - new Horde_Kolab_Storage_Cache(null) + new Horde_Kolab_Storage_Cache(null), + $factory ); $this->assertInstanceOf( 'Horde_Kolab_Storage_List_Decorator_Cache', diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php index 2e10c8098..37e3f3e7d 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php @@ -217,19 +217,4 @@ extends Horde_Kolab_Storage_TestCase ) ); } - - public function testQueryFactoryInjection() - { - $list = new Horde_Kolab_Storage_List_Base( - $this->getNullMock(), - new Horde_Kolab_Storage_Factory() - ); - $factory = new Horde_Kolab_Storage_Factory(); - $query = $factory->createListQuery( - 'Horde_Kolab_Storage_Stub_FactoryQuery', - $list - ); - $this->assertTrue($query->called); - } - } diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php index a4a2b4793..4cac408a0 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php @@ -85,8 +85,25 @@ extends Horde_Kolab_Storage_TestCase 'Horde_Kolab_Storage_Stub_FactoryQuery', $list ); - $list->registerQuery($query); + $list->registerQuery('stub', $query); $list->synchronize(); $this->assertTrue($query->synchronized); } + + public function testGetQuery() + { + $factory = new Horde_Kolab_Storage_Factory(); + $list = new Horde_Kolab_Storage_List_Base( + $this->getNullMock(), + $factory + ); + $query = $factory->createListQuery( + 'Horde_Kolab_Storage_Stub_FactoryQuery', + $list + ); + $this->assertInstanceOf( + 'Horde_Kolab_Storage_Stub_FactoryQuery', + $list->getQuery('Horde_Kolab_Storage_Stub_FactoryQuery') + ); + } } -- 2.11.0