Synchronize queries as well.
authorGunnar Wrobel <p@rdus.de>
Mon, 3 Jan 2011 22:17:25 +0000 (23:17 +0100)
committerGunnar Wrobel <p@rdus.de>
Tue, 4 Jan 2011 07:54:27 +0000 (08:54 +0100)
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Cache.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php
framework/Kolab_Storage/test/Horde/Kolab/Storage/Stub/FactoryQuery.php
framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php

index 67e17ce..533993d 100644 (file)
@@ -218,6 +218,7 @@ class Horde_Kolab_Storage_Factory
         if (method_exists($query, 'setFactory')) {
             $query->setFactory($this);
         }
+        $list->registerQuery($query);
         return $query;
     }
 
index 187e1d6..5bae4b3 100644 (file)
@@ -36,6 +36,13 @@ implements Horde_Kolab_Storage_List
     private $_driver;
 
     /**
+     * The list of registered queries.
+     *
+     * @var array
+     */
+    private $_queries = array();
+
+    /**
      * Constructor.
      *
      * @param Horde_Kolab_Storage_Driver  $driver  The primary connection driver.
@@ -87,5 +94,20 @@ implements Horde_Kolab_Storage_List
      */
     public function synchronize()
     {
+        foreach ($this->_queries as $query) {
+            $query->synchronize();
+        }
+    }
+
+    /**
+     * Register a query to be updated if the underlying data changes.
+     *
+     * @param Horde_Kolab_Storage_Query $query The query to register.
+     *
+     * @return NULL
+     */
+    public function registerQuery(Horde_Kolab_Storage_Query $query)
+    {
+        $this->_queries[] = $query;
     }
 }
\ No newline at end of file
index 4f7946d..8eba1b2 100644 (file)
@@ -120,15 +120,27 @@ implements Horde_Kolab_Storage_List
      */
     public function synchronize()
     {
-        $this->_list->synchronize();
-
         $this->_list_cache->store(
             $this->_list->listFolders(),
             $this->_list->listFolderTypes()
         );
 
+        $this->_list->synchronize();
+
         $this->_list_cache->save();
 
         $this->_init = true;
     }
+
+    /**
+     * Register a query to be updated if the underlying data changes.
+     *
+     * @param Horde_Kolab_Storage_Query $query The query to register.
+     *
+     * @return NULL
+     */
+    public function registerQuery(Horde_Kolab_Storage_Query $query)
+    {
+        $this->_list->registerQuery($query);
+    }
 }
\ No newline at end of file
index 7bab527..6e02167 100644 (file)
@@ -131,4 +131,16 @@ implements Horde_Kolab_Storage_List
             )
         );
     }
+
+    /**
+     * Register a query to be updated if the underlying data changes.
+     *
+     * @param Horde_Kolab_Storage_Query $query The query to register.
+     *
+     * @return NULL
+     */
+    public function registerQuery(Horde_Kolab_Storage_Query $query)
+    {
+        $this->_list->registerQuery($query);
+    }
 }
\ No newline at end of file
index 239b56d..9d110ba 100644 (file)
  */
 interface Horde_Kolab_Storage_Queriable
 {
+    /**
+     * Register a query to be updated if the underlying data changes.
+     *
+     * @param Horde_Kolab_Storage_Query $query The query to register.
+     *
+     * @return NULL
+     */
+    public function registerQuery(Horde_Kolab_Storage_Query $query);
 }
 
index 17a93ca..cba9c59 100644 (file)
@@ -3,6 +3,7 @@ class Horde_Kolab_Storage_Stub_FactoryQuery
 implements Horde_Kolab_Storage_Query
 {
     public $called = false;
+    public $synchronized = false;
 
     /**
      * Constructor.
@@ -32,5 +33,6 @@ implements Horde_Kolab_Storage_Query
      */
     public function synchronize()
     {
+        $this->synchronized = true;
     }
 }
\ No newline at end of file
index 1980707..a4a2b47 100644 (file)
@@ -73,4 +73,20 @@ extends Horde_Kolab_Storage_TestCase
         );
         $this->assertTrue($list instanceOf Horde_Kolab_Storage_Queriable);
     }
+
+    public function testQuerySynchronization()
+    {
+        $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
+        );
+        $list->registerQuery($query);
+        $list->synchronize();
+        $this->assertTrue($query->synchronized);
+    }
 }