From: Gunnar Wrobel Date: Thu, 16 Dec 2010 20:00:39 +0000 (+0100) Subject: Create namespace handlers in the factory. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=903a9c4bf8c38025957e1547d0aff6f3b478eaf3;p=horde.git Create namespace handlers in the factory. --- diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Base.php index 46a244ab3..1d5a2ba8b 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Base.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Base.php @@ -29,6 +29,13 @@ abstract class Horde_Kolab_Storage_Driver_Base implements Horde_Kolab_Storage_Driver { /** + * Factory for generating helper objects. + * + * @var Horde_Kolab_Storage_Factory + */ + private $_factory; + + /** * Additional connection parameters. * * @var array @@ -38,11 +45,15 @@ implements Horde_Kolab_Storage_Driver /** * Constructor. * - * @param array $params Connection parameters. + * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects. + * @param array $params Connection parameters. */ - public function __construct($params = array()) - { - $this->_params = $params; + public function __construct( + Horde_Kolab_Storage_Factory $factory, + $params = array() + ) { + $this->_factory = $factory; + $this->_params = $params; } /** @@ -59,6 +70,16 @@ implements Horde_Kolab_Storage_Driver } /** + * Return the factory. + * + * @return Horde_Kolab_Storage_Factory The factory. + */ + protected function getFactory() + { + return $this->_factory; + } + + /** * Retrieve the namespace information for this connection. * * @return Horde_Kolab_Storage_Folder_Namespace The initialized namespace handler. @@ -66,10 +87,10 @@ implements Horde_Kolab_Storage_Driver public function getNamespace() { if (isset($this->_params['namespaces'])) { - return new Horde_Kolab_Storage_Folder_Namespace_Config( - $this->_params['namespaces'] + return $factory->createNamespace( + 'config', $this->_params['namespaces'] ); } - return new Horde_Kolab_Storage_Folder_Namespace_Fixed(); + return $this->_factory->createNamespace('fixed'); } } \ No newline at end of file diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Imap.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Imap.php index eef647e5c..d070c5918 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Imap.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Imap.php @@ -38,15 +38,17 @@ extends Horde_Kolab_Storage_Driver_Base /** * Constructor. * - * @param Horde_Imap_Client_Base $imap The IMAP connection handler. - * @param array $params Connection parameters. + * @param Horde_Imap_Client_Base $imap The IMAP connection handler. + * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects. + * @param array $params Connection parameters. */ public function __construct( Horde_Imap_Client_Base $imap, + Horde_Kolab_Storage_Factory $factory, $params = array() ) { $this->_imap = $imap; - parent::__construct($params); + parent::__construct($factory, $params); } /** @@ -406,10 +408,15 @@ extends Horde_Kolab_Storage_Driver_Base public function getNamespace() { if ($this->_imap->queryCapability('NAMESPACE') === true) { - return new Horde_Kolab_Storage_Folder_Namespace_Imap( - $this->_imap->getNamespaces(), - $this->getParam('namespaces', array()) - ); + $c = array(); + $configuration = $this->getParam('namespaces', array()); + foreach ($this->_imap->getNamespaces() as $namespace) { + if (in_array($namespace['name'], array_keys($configuration))) { + $namespace = array_merge($namespace, $configuration[$namespace['name']]); + } + $c[] = $namespace; + } + return $this->getFactory()->createNamespace('imap', $c); } return parent::getNamespace(); } diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Mock.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Mock.php index be7332623..664f31750 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Mock.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Mock.php @@ -52,17 +52,20 @@ extends Horde_Kolab_Storage_Driver_Base /** * Constructor. * - * @param array $params Connection parameters. + * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects. + * @param array $params Connection parameters. */ - public function __construct($params = array()) - { + public function __construct( + Horde_Kolab_Storage_Factory $factory, + $params = array() + ) { if (isset($params['data'])) { $this->_data = $params['data']; unset($params['data']); } else { $this->_data = array(); } - parent::__construct($params); + parent::__construct($factory, $params); } /** diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Pear.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Pear.php index 121d32e85..d44714e71 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Pear.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Pear.php @@ -38,15 +38,17 @@ extends Horde_Kolab_Storage_Driver_Base /** * Constructor. * - * @param Net_IMAP $imap The IMAP connection handler. - * @param array $params Connection parameters. + * @param Net_IMAP $imap The IMAP connection handler. + * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects. + * @param array $params Connection parameters. */ public function __construct( Net_IMAP $imap, + Horde_Kolab_Storage_Factory $factory, $params = array() ) { $this->_imap = $imap; - parent::__construct($params); + parent::__construct($factory, $params); } /** diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Rcube.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Rcube.php index 5f15ced0a..d2064787b 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Rcube.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Rcube.php @@ -38,15 +38,17 @@ extends Horde_Kolab_Storage_Driver_Base /** * Constructor. * - * @param rcube_imap_generic $imap The IMAP connection handler. - * @param array $params Connection parameters. + * @param rcube_imap_generic $imap The IMAP connection handler. + * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects. + * @param array $params Connection parameters. */ public function __construct( rcube_imap_generic $imap, + Horde_Kolab_Storage_Factory $factory, $params = array() ) { $this->_imap = $imap; - parent::__construct($params); + parent::__construct($factory, $params); } /** diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php index a0319a0fd..cc2289a51 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php @@ -92,14 +92,15 @@ class Horde_Kolab_Storage_Factory switch ($params['driver']) { case 'mock': $config['data'] = array('user/test' => array()); - return new Horde_Kolab_Storage_Driver_Mock($config); + return new Horde_Kolab_Storage_Driver_Mock($this, $config); case 'horde': $config['hostspec'] = $config['host']; unset($config['host']); return new Horde_Kolab_Storage_Driver_Imap( new Horde_Imap_Client_Socket( $config - ) + ), + $this ); case 'horde-php': $config['hostspec'] = $config['host']; @@ -107,17 +108,18 @@ class Horde_Kolab_Storage_Factory return new Horde_Kolab_Storage_Driver_Imap( new Horde_Imap_Client_Cclient( $config - ) + ), + $this ); case 'php': - return new Horde_Kolab_Storage_Driver_Cclient($config); + return new Horde_Kolab_Storage_Driver_Cclient($this, $config); case 'pear': $client = new Net_IMAP($config['host']); Horde_Kolab_Storage_Exception_Pear::catchError( $client->login($config['username'], $config['password']) ); return new Horde_Kolab_Storage_Driver_Pear( - $client, $config + $client, $this, $config ); case 'roundcube': $client = new rcube_imap_generic(); @@ -132,7 +134,7 @@ class Horde_Kolab_Storage_Factory ) ); return new Horde_Kolab_Storage_Driver_Rcube( - $client, $config + $client, $this, $config ); default: throw new Horde_Kolab_Storage_Exception( @@ -146,4 +148,27 @@ class Horde_Kolab_Storage_Factory } } + /** + * Create a namespace handler. + * + * @param string $type The namespace type. + * @param array $params The parameters for the namespace. See + * + * @return Horde_Kolab_Storage_Folder_Namespace The namespace handler. + */ + public function createNamespace($type, array $params = array()) + { + $class = 'Horde_Kolab_Storage_Folder_Namespace_' . ucfirst($type); + if (!class_exists($class)) { + throw new Horde_Kolab_Storage_Exception( + sprintf( + Horde_Kolab_Storage_Translation::t( + 'Invalid "namespace" type "%s"!' + ), + $type + ) + ); + } + return new $class($params); + } } \ No newline at end of file diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder/Namespace/Imap.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder/Namespace/Imap.php index e1a456b03..c178b2049 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder/Namespace/Imap.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder/Namespace/Imap.php @@ -32,18 +32,4 @@ class Horde_Kolab_Storage_Folder_Namespace_Imap extends Horde_Kolab_Storage_Folder_Namespace_Config { - /** - * Constructor. - */ - public function __construct(array $namespaces, array $configuration = array()) - { - $c = array(); - foreach ($namespaces as $namespace) { - if (in_array($namespace['name'], array_keys($configuration))) { - $namespace = array_merge($namespace, $configuration[$namespace['name']]); - } - $c[] = $namespace; - } - parent::__construct($c); - } } \ No newline at end of file diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/AclTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/AclTest.php index 0cb0e4c63..0a9b8caec 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/AclTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/AclTest.php @@ -36,7 +36,10 @@ class Horde_Kolab_Storage_AclTest extends PHPUnit_Framework_TestCase { $this->_storage = $this->getMock('Horde_Kolab_Storage', array(), array(), '', false, false); $this->_imap = $this->getMock('Horde_Imap_Client_Socket', array(), array(), '', false, false); - $this->_connection = new Horde_Kolab_Storage_Driver_Imap($this->_imap); + $this->_connection = new Horde_Kolab_Storage_Driver_Imap( + $this->_imap, + new Horde_Kolab_Storage_Factory() + ); $this->_imap->expects($this->any()) ->method('getNamespaces') ->will( diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/BaseTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/BaseTest.php index 409577b3c..438e2a023 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/BaseTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/BaseTest.php @@ -37,6 +37,6 @@ extends Horde_Kolab_Storage_TestCase { public function testConstruction() { - new Horde_Kolab_Storage_Base(new Horde_Kolab_Storage_Driver_Mock()); + new Horde_Kolab_Storage_Base(new Horde_Kolab_Storage_Driver_Mock(new Horde_Kolab_Storage_Factory())); } } diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/CclientTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/CclientTest.php index 963b98bbe..1834061b8 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/CclientTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/CclientTest.php @@ -38,7 +38,7 @@ extends PHPUnit_Framework_TestCase public function testGetNamespaceReturnsNamespaceHandler() { $driver = new Horde_Kolab_Storage_Driver_Cclient( - array() + new Horde_Kolab_Storage_Factory(), array() ); $this->assertType( 'Horde_Kolab_Storage_Folder_Namespace', @@ -49,7 +49,7 @@ extends PHPUnit_Framework_TestCase public function testGetNamespaceReturnsExpectedNamespaces() { $driver = new Horde_Kolab_Storage_Driver_Cclient( - array() + new Horde_Kolab_Storage_Factory(), array() ); $namespaces = array(); foreach ($driver->getNamespace() as $namespace) { diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/ImapTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/ImapTest.php index dd69c85a7..8e06088e5 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/ImapTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/ImapTest.php @@ -39,6 +39,7 @@ extends PHPUnit_Framework_TestCase { $driver = new Horde_Kolab_Storage_Driver_Imap( $this->_getNamespaceMock(), + new Horde_Kolab_Storage_Factory(), array() ); $this->assertType( @@ -51,6 +52,7 @@ extends PHPUnit_Framework_TestCase { $driver = new Horde_Kolab_Storage_Driver_Imap( $this->_getNamespaceMock(), + new Horde_Kolab_Storage_Factory(), array() ); $namespaces = array(); diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/MockTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/MockTest.php index 5578895b6..0d76c6bac 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/MockTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/MockTest.php @@ -53,7 +53,7 @@ extends PHPUnit_Framework_TestCase public function testGetNamespaceReturnsNamespaceHandler() { $driver = new Horde_Kolab_Storage_Driver_Mock( - array() + new Horde_Kolab_Storage_Factory(), array() ); $this->assertType( 'Horde_Kolab_Storage_Folder_Namespace', @@ -64,7 +64,7 @@ extends PHPUnit_Framework_TestCase public function testGetNamespaceReturnsExpectedNamespaces() { $driver = new Horde_Kolab_Storage_Driver_Mock( - array() + new Horde_Kolab_Storage_Factory(), array() ); $namespaces = array(); foreach ($driver->getNamespace() as $namespace) { diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/PearTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/PearTest.php index 2248f8801..050881bfc 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/PearTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Driver/PearTest.php @@ -39,6 +39,7 @@ extends PHPUnit_Framework_TestCase { $driver = new Horde_Kolab_Storage_Driver_Pear( $this->_getNamespaceMock(), + new Horde_Kolab_Storage_Factory(), array() ); $this->assertType( @@ -51,6 +52,7 @@ extends PHPUnit_Framework_TestCase { $driver = new Horde_Kolab_Storage_Driver_Pear( $this->_getNamespaceMock(), + new Horde_Kolab_Storage_Factory(), array() ); $namespaces = array(); 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 9786c9803..72043912f 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php @@ -40,7 +40,11 @@ extends Horde_Kolab_Storage_TestCase $factory = new Horde_Kolab_Storage_Factory(); $this->assertType( 'Horde_Kolab_Storage_Base', - $factory->create(new Horde_Kolab_Storage_Driver_Mock()) + $factory->create( + new Horde_Kolab_Storage_Driver_Mock( + new Horde_Kolab_Storage_Factory() + ) + ) ); } @@ -81,4 +85,26 @@ extends Horde_Kolab_Storage_TestCase ) ); } + + /** + * @expectedException Horde_Kolab_Storage_Exception + */ + public function testInvalidNamespace() + { + $factory = new Horde_Kolab_Storage_Factory(); + $factory->createNamespace( + 'undefined' + ); + } + + public function testFixedNamespace() + { + $factory = new Horde_Kolab_Storage_Factory(); + $this->assertInstanceOf( + 'Horde_Kolab_Storage_Folder_Namespace_Fixed', + $factory->createNamespace( + 'fixed' + ) + ); + } }