public function load($datasetName, RecordMetaData $recordMetaData, IndexedRecordsHolder $recordsHolder) { // preparing columns for which we can lookup values $lookupableColumns = $this->selectLookupableColumns($recordMetaData); if (!isset($lookupableColumns)) { return; } // preparing required values for each lookup $columnsLookupValues = $this->prepareLookupValues($recordsHolder, $lookupableColumns); if (!isset($columnsLookupValues)) { return; } // loading identifier for each values foreach ($columnsLookupValues as $columnIndex => &$columnLookupValues) { $column = $lookupableColumns[$columnIndex]; $dimensionLookupHandler = DimensionLookupFactory::getInstance()->getHandler($column->type->getLogicalApplicationType()); $dimensionLookupHandler->prepareDatasetColumnLookupIds($datasetName, $column, $columnLookupValues); // checking if we loaded all values $this->checkMissingIdentifiers($column, $columnLookupValues); } unset($columnLookupValues); // replacing column values with corresponding ids foreach ($recordsHolder->records as $record) { foreach ($lookupableColumns as $columnIndex => $column) { $columnValue = $record->columnValues[$columnIndex]; if (!isset($columnValue)) { continue; } $lookupKey = AbstractDimensionLookupHandler::prepareLookupKey($columnValue); $record->columnValues[$columnIndex] = $columnsLookupValues[$columnIndex][$lookupKey]->identifier; } } }
public function __construct($datatype) { parent::__construct($datatype); list($this->datasetName, $this->columnName) = ReferencePathHelper::splitReference($datatype); }