Sync: reduce parameters, don't pass Rule around

This commit is contained in:
Thomas Gelf 2016-02-23 11:22:25 +01:00
parent 2185dffa62
commit 650ef67dc6

View File

@ -32,6 +32,7 @@ class Sync
protected function __construct(SyncRule $rule) protected function __construct(SyncRule $rule)
{ {
$this->rule = $rule; $this->rule = $rule;
$this->db = $rule->getConnection();
} }
/** /**
@ -45,7 +46,7 @@ class Sync
ini_set('memory_limit', '768M'); ini_set('memory_limit', '768M');
ini_set('max_execution_time', 0); ini_set('max_execution_time', 0);
return $sync->runWithRule($rule); return $sync->apply();
} }
/** /**
@ -71,7 +72,7 @@ class Sync
{ {
$modified = array(); $modified = array();
$sync = new static($rule); $sync = new static($rule);
$objects = $sync->prepareSyncForRule($rule); $objects = $sync->prepare();
foreach ($objects as $object) { foreach ($objects as $object) {
if ($object->hasBeenModified()) { if ($object->hasBeenModified()) {
$modified[] = $object; $modified[] = $object;
@ -263,9 +264,11 @@ class Sync
return $this->hasCombinedKey; return $this->hasCombinedKey;
} }
protected function fetchImportedData($sources, $properties, SyncRule $rule, $db) protected function fetchImportedData($sources, $properties)
{ {
$imported = array(); $imported = array();
$rule = $this->rule;
$db = $this->db;
$sourceColumns = $this->prepareSourceColumns($properties); $sourceColumns = $this->prepareSourceColumns($properties);
@ -429,13 +432,12 @@ class Sync
* *
* TODO: This needs to be splitted into smaller methods * TODO: This needs to be splitted into smaller methods
* *
* @param SyncRule $rule The synchronization rule that should be used
*
* @return array List of modified IcingaObjects * @return array List of modified IcingaObjects
*/ */
protected function prepareSyncForRule(SyncRule $rule) protected function prepare()
{ {
$db = $rule->getConnection(); $rule = $this->rule;
$db = $this->db;
$properties = $rule->fetchSyncProperties(); $properties = $rule->fetchSyncProperties();
$sources = $this->perpareImportSources($properties, $db); $sources = $this->perpareImportSources($properties, $db);
$imported = $this->fetchImportedData($sources, $properties, $rule, $db); $imported = $this->fetchImportedData($sources, $properties, $rule, $db);
@ -508,15 +510,15 @@ class Sync
* TODO: Should return the id of the related sync_history table entry. * TODO: Should return the id of the related sync_history table entry.
* Such a table does not yet exist, so 42 is the answer right now. * Such a table does not yet exist, so 42 is the answer right now.
* *
* @param SyncRule $rule The synchronization rule that should be applied
*
* @return int * @return int
*/ */
protected function runWithRule(SyncRule $rule) protected function apply()
{ {
$db = $rule->getConnection(); $rule = $this->rule;
$db = $this->db;
// TODO: Evaluate whether fetching data should happen within the same transaction // TODO: Evaluate whether fetching data should happen within the same transaction
$objects = $this->prepareSyncForRule($rule); $objects = $this->prepare($rule);
$dba = $db->getDbAdapter(); $dba = $db->getDbAdapter();
$dba->beginTransaction(); $dba->beginTransaction();