From f44355dda4a0b1a323a0cd3411b67c0a3ac3d1ed Mon Sep 17 00:00:00 2001 From: "Michael J. Rubinsky" Date: Wed, 31 Mar 2010 17:43:53 -0400 Subject: [PATCH] Refactor the Exporter/Streamer/Importer/HierarchyCache mess.... Rename a bunch of classes and combine a few to better reflect what is happening here. As a bonus, cleans up the main directory of the package a bit. --- framework/ActiveSync/lib/Horde/ActiveSync.php | 1 + .../{Streamer.php => Connector/Exporter.php} | 38 +++++++++++++++-- .../Horde/ActiveSync/{ => Connector}/Importer.php | 5 ++- .../Horde/ActiveSync/Connector/NullImporter.php | 11 +++++ .../lib/Horde/ActiveSync/ContentsCache.php | 15 ------- .../lib/Horde/ActiveSync/Driver/Base.php | 5 +-- .../lib/Horde/ActiveSync/HierarchyCache.php | 47 ---------------------- .../lib/Horde/ActiveSync/Request/FolderSync.php | 18 ++++----- .../Horde/ActiveSync/Request/GetItemEstimate.php | 2 +- .../lib/Horde/ActiveSync/Request/Sync.php | 12 +++--- framework/ActiveSync/lib/Horde/ActiveSync/Sync.php | 20 ++++----- framework/ActiveSync/package.xml | 20 +++++---- .../test/Horde/ActiveSync/HordeDriverTest.php | 1 + 13 files changed, 87 insertions(+), 108 deletions(-) rename framework/ActiveSync/lib/Horde/ActiveSync/{Streamer.php => Connector/Exporter.php} (79%) rename framework/ActiveSync/lib/Horde/ActiveSync/{ => Connector}/Importer.php (99%) create mode 100644 framework/ActiveSync/lib/Horde/ActiveSync/Connector/NullImporter.php delete mode 100644 framework/ActiveSync/lib/Horde/ActiveSync/ContentsCache.php delete mode 100644 framework/ActiveSync/lib/Horde/ActiveSync/HierarchyCache.php diff --git a/framework/ActiveSync/lib/Horde/ActiveSync.php b/framework/ActiveSync/lib/Horde/ActiveSync.php index 3a919b95d..dd6599157 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync.php @@ -1549,6 +1549,7 @@ class Horde_ActiveSync $device->userAgent = $this->_request->getHeader('User-Agent'); $device->deviceType = !empty($get['DeviceType']) ? $get['DeviceType'] : ''; $device->policykey = 0; + $device->rwstatus = 0; $state->setDeviceInfo($devId, $device); } diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Streamer.php b/framework/ActiveSync/lib/Horde/ActiveSync/Connector/Exporter.php similarity index 79% rename from framework/ActiveSync/lib/Horde/ActiveSync/Streamer.php rename to framework/ActiveSync/lib/Horde/ActiveSync/Connector/Exporter.php index 19f3cca3e..89e77caba 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Streamer.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Connector/Exporter.php @@ -15,11 +15,15 @@ * * */ -class Horde_ActiveSync_Streamer +class Horde_ActiveSync_Connector_Exporter { protected $_encoder; protected $_type; protected $_seenObjects; + + public $changed = array(); + public $deleted = array(); + public $count = 0; /** * Const'r @@ -27,11 +31,11 @@ class Horde_ActiveSync_Streamer * @param Horde_ActiveSync_Wbxml_Encoder $encoder * @param string $class The collection class * - * @return Horde_ActiveSync_Streamer + * @return Horde_ActiveSync_Connector_Exporter */ - public function __construct(&$encoder, $class) + public function __construct($encoder = null, $class = null) { - $this->_encoder = &$encoder; + $this->_encoder = $encoder; $this->_type = $class; $this->_seenObjects = array(); } @@ -121,4 +125,30 @@ class Horde_ActiveSync_Streamer { return true; } + + /** + * + * @param $folder + * @return + */ + public function FolderChange($folder) + { + array_push($this->changed, $folder); + $this->count++; + + return true; + } + + /** + * + * @param $id + * @return + */ + public function FolderDeletion($id) + { + array_push($this->deleted, $id); + $this->count++; + + return true; + } } \ No newline at end of file diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Importer.php b/framework/ActiveSync/lib/Horde/ActiveSync/Connector/Importer.php similarity index 99% rename from framework/ActiveSync/lib/Horde/ActiveSync/Importer.php rename to framework/ActiveSync/lib/Horde/ActiveSync/Connector/Importer.php index 913c2ce46..15212e9ad 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Importer.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Connector/Importer.php @@ -3,7 +3,7 @@ * To change this template, choose Tools | Templates * and open the template in the editor. */ -class Horde_ActiveSync_Importer +class Horde_ActiveSync_Connector_Importer { /** * @@ -258,4 +258,5 @@ class Horde_ActiveSync_Importer return $this->_stateMachine->isConflict($stat, $type); } -} \ No newline at end of file + +} diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Connector/NullImporter.php b/framework/ActiveSync/lib/Horde/ActiveSync/Connector/NullImporter.php new file mode 100644 index 000000000..2d8f1d3e2 --- /dev/null +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Connector/NullImporter.php @@ -0,0 +1,11 @@ +setLogger($this->_logger); + $importer = new Horde_ActiveSync_Connector_Importer($this); return $importer; } diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/HierarchyCache.php b/framework/ActiveSync/lib/Horde/ActiveSync/HierarchyCache.php deleted file mode 100644 index 123b543bf..000000000 --- a/framework/ActiveSync/lib/Horde/ActiveSync/HierarchyCache.php +++ /dev/null @@ -1,47 +0,0 @@ -changed = array(); - $this->deleted = array(); - $this->count = 0; - - return true; - } - - public function FolderChange($folder) - { - array_push($this->changed, $folder); - $this->count++; - - return true; - } - - public function FolderDeletion($id) - { - array_push($this->deleted, $id); - $this->count++; - - return true; - } -} \ No newline at end of file diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Request/FolderSync.php b/framework/ActiveSync/lib/Horde/ActiveSync/Request/FolderSync.php index 3f08993e6..92ad9f845 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Request/FolderSync.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Request/FolderSync.php @@ -146,12 +146,12 @@ class Horde_ActiveSync_Request_FolderSync extends Horde_ActiveSync_Request_Base // this is not done when sync'ing messages - we let the exporter write // directly to WBXML. // TODO: Combine all these import caches into a single Class - $importer = new Horde_ActiveSync_HierarchyCache(); - $exporter = $this->_driver->GetSyncObject(); - $exporter->init($state, $importer, array('synckey' => $synckey)); + $connector = new Horde_ActiveSync_Connector_Exporter(); + $sync = $this->_driver->GetSyncObject(); + $sync->init($state, $connector, array('synckey' => $synckey)); /* Perform the actual sync operation */ - while(is_array($exporter->syncronize())); + while(is_array($sync->syncronize())); // Output our WBXML reply now $this->_encoder->StartWBXML(); @@ -169,11 +169,11 @@ class Horde_ActiveSync_Request_FolderSync extends Horde_ActiveSync_Request_Base $this->_encoder->startTag(SYNC_FOLDERHIERARCHY_CHANGES); $this->_encoder->startTag(SYNC_FOLDERHIERARCHY_COUNT); - $this->_encoder->content($importer->count); + $this->_encoder->content($connector->count); $this->_encoder->endTag(); - if (count($importer->changed) > 0) { - foreach ($importer->changed as $folder) { + if (count($connector->changed) > 0) { + foreach ($connector->changed as $folder) { if (isset($folder->serverid) && in_array($folder->serverid, $seenfolders)) { $this->_encoder->startTag(SYNC_FOLDERHIERARCHY_UPDATE); } else { @@ -184,8 +184,8 @@ class Horde_ActiveSync_Request_FolderSync extends Horde_ActiveSync_Request_Base } } - if (count($importer->deleted) > 0) { - foreach ($importer->deleted as $folder) { + if (count($connector->deleted) > 0) { + foreach ($connector->deleted as $folder) { $this->_encoder->startTag(SYNC_FOLDERHIERARCHY_REMOVE); $this->_encoder->startTag(SYNC_FOLDERHIERARCHY_SERVERENTRYID); $this->_encoder->content($folder); diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Request/GetItemEstimate.php b/framework/ActiveSync/lib/Horde/ActiveSync/Request/GetItemEstimate.php index e8bc880de..c407bbfb1 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Request/GetItemEstimate.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Request/GetItemEstimate.php @@ -130,7 +130,7 @@ class Horde_ActiveSync_Request_GetItemEstimate extends Horde_ActiveSync_Request_ $this->_encoder->endTag(); $this->_encoder->startTag(SYNC_GETITEMESTIMATE_ESTIMATE); - $importer = new Horde_ActiveSync_ContentsCache(); + $importer = new Horde_ActiveSync_Connector_NullImporter(); $state = $this->_driver->getStateObject($collection); $state->loadState($collection['synckey']); $exporter = $this->_driver->getSyncObject(); diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Request/Sync.php b/framework/ActiveSync/lib/Horde/ActiveSync/Request/Sync.php index f44357824..0e0883fc6 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Request/Sync.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Request/Sync.php @@ -435,10 +435,10 @@ class Horde_ActiveSync_Request_Sync extends Horde_ActiveSync_Request_Base /* Send server changes to PIM */ if (isset($collection['getchanges'])) { $filtertype = isset($collection['filtertype']) ? $collection['filtertype'] : false; - $streamer = new Horde_ActiveSync_Streamer($this->_encoder, $collection['class']); - $exporter = $this->_driver->getSyncObject(); - $exporter->init($state, $streamer, $collection); - $changecount = $exporter->getChangeCount(); + $exporter = new Horde_ActiveSync_Connector_Exporter($this->_encoder, $collection['class']); + $sync = $this->_driver->getSyncObject(); + $sync->init($state, $exporter, $collection); + $changecount = $sync->getChangeCount(); if (!empty($collection['windowsize']) && $changecount > $collection['windowsize']) { $this->_encoder->startTag(SYNC_MOREAVAILABLE, false, true); } @@ -449,7 +449,7 @@ class Horde_ActiveSync_Request_Sync extends Horde_ActiveSync_Request_Base // Stream the changes to the PDA $n = 0; while (1) { - $progress = $exporter->syncronize(); + $progress = $sync->syncronize(); if (!is_array($progress)) { break; } @@ -467,7 +467,7 @@ class Horde_ActiveSync_Request_Sync extends Horde_ActiveSync_Request_Base /* Save the sync state for the next time */ if (isset($collection['newsynckey'])) { - if (!empty($exporter) || !empty($importer) || !empty($streamer) || $collection['synckey'] == 0) { + if (!empty($sync) || !empty($importer) || !empty($exporter) || $collection['synckey'] == 0) { $state->setNewSyncKey($collection['newsynckey']); $state->save(); } else { diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Sync.php b/framework/ActiveSync/lib/Horde/ActiveSync/Sync.php index 8a77e2a28..78dab1b2e 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Sync.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Sync.php @@ -102,9 +102,9 @@ class Horde_ActiveSync_Sync /** * The change streamer * - * @var Horde_ActiveSync_Streamer + * @var Horde_ActiveSync_Connector_Exporter */ - protected $_streamer; + protected $_exporter; protected $_logger; @@ -119,11 +119,11 @@ class Horde_ActiveSync_Sync } public function init(Horde_ActiveSync_State_Base &$stateMachine, - $streamer, + $exporter, $collection = array()) { $this->_stateMachine = &$stateMachine; - $this->_streamer = $streamer; + $this->_exporter = $exporter; $this->_folderId = !empty($collection['id']) ? $collection['id'] : false; $this->_changes = $stateMachine->getChanges(); $this->_syncKey = $collection['synckey']; @@ -158,12 +158,12 @@ class Horde_ActiveSync_Sync return; } - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->FolderChange($folder)) { + if ($flags & BACKEND_DISCARD_DATA || $this->_exporter->FolderChange($folder)) { $this->_stateMachine->updateState('change', $stat); } break; case 'delete': - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->FolderDeletion($change['id'])) { + if ($flags & BACKEND_DISCARD_DATA || $this->_exporter->FolderDeletion($change['id'])) { $this->_stateMachine->updateState('delete', $change); } break; @@ -198,26 +198,26 @@ class Horde_ActiveSync_Sync $message->flags = (isset($change['flags'])) ? $change['flags'] : 0; if ($stat && $message) { - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageChange($change['id'], $message) == true) { + if ($flags & BACKEND_DISCARD_DATA || $this->_exporter->messageChange($change['id'], $message) == true) { $this->_stateMachine->updateState('change', $stat); } } break; case 'delete': - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageDeletion($change['id']) == true) { + if ($flags & BACKEND_DISCARD_DATA || $this->_exporter->messageDeletion($change['id']) == true) { $this->_stateMachine->updateState('delete', $change); } break; case 'flags': - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageReadFlag($change['id'], $change['flags']) == true) { + if ($flags & BACKEND_DISCARD_DATA || $this->_exporter->messageReadFlag($change['id'], $change['flags']) == true) { $this->_stateMachine->updateState('flags', $change); } break; case 'move': - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageMove($change['id'], $change['parent']) == true) { + if ($flags & BACKEND_DISCARD_DATA || $this->_exporter->messageMove($change['id'], $change['parent']) == true) { $this->_stateMachine->updateState('move', $change); } break; diff --git a/framework/ActiveSync/package.xml b/framework/ActiveSync/package.xml index 35841acda..3bd4fc150 100644 --- a/framework/ActiveSync/package.xml +++ b/framework/ActiveSync/package.xml @@ -31,6 +31,11 @@ http://pear.php.net/dtd/package-2.0.xsd"> + + + + + @@ -67,14 +72,9 @@ http://pear.php.net/dtd/package-2.0.xsd"> - - - - - @@ -97,6 +97,9 @@ http://pear.php.net/dtd/package-2.0.xsd"> + + + @@ -118,15 +121,10 @@ http://pear.php.net/dtd/package-2.0.xsd"> - - - - - - + diff --git a/framework/ActiveSync/test/Horde/ActiveSync/HordeDriverTest.php b/framework/ActiveSync/test/Horde/ActiveSync/HordeDriverTest.php index 49512c2b1..96ee5bd88 100644 --- a/framework/ActiveSync/test/Horde/ActiveSync/HordeDriverTest.php +++ b/framework/ActiveSync/test/Horde/ActiveSync/HordeDriverTest.php @@ -193,6 +193,7 @@ class Horde_ActiveSync_HordeDriverTest extends Horde_Test_Case } /** * Test ChangeMessage: + * * This tests converting the contact streamer object to a hash suitable for * passing to the contacts/import method. Because it only returns the UID * for the newly added/edited entry, we can't check the results here. The -- 2.11.0