protected static function prepareListColumnMappings(array $cubes = NULL, array $parsedUIMetaDataNames) { $columnMappings = NULL; foreach ($parsedUIMetaDataNames as $columnName => $parsedUIMetaDataName) { $datasetColumnName = NULL; if ($parsedUIMetaDataName instanceof AttributeParsedUIMetaDataName) { $cube = isset($cubes[$parsedUIMetaDataName->datasetName]) ? $cubes[$parsedUIMetaDataName->datasetName] : NULL; if (isset($cube)) { $dimension = $cube->getDimension($parsedUIMetaDataName->name); $references = NULL; if (isset($parsedUIMetaDataName->columnName)) { $column = $cube->factsDataset->getColumn($dimension->attributeColumnName); $branch = $column->findBranch($parsedUIMetaDataName->columnName); // the dimension column can be a branch, not a dimension dataset column if (!isset($branch) && isset($dimension->datasetName)) { list($adjustedDimensionDatasetName) = gd_data_controller_metamodel_adjust_dataset_name($dimension->datasetName); $references[] = ReferencePathHelper::assembleReference($adjustedDimensionDatasetName, $parsedUIMetaDataName->columnName); } } if (isset($references)) { $references[] = ReferencePathHelper::assembleReference($cube->factsDatasetName, $dimension->attributeColumnName); $datasetColumnName = ReferencePathHelper::assembleReferencePath($references); } else { $datasetColumnName = isset($parsedUIMetaDataName->columnName) ? $parsedUIMetaDataName->columnName : $dimension->attributeColumnName; } } else { $datasetColumnName = $parsedUIMetaDataName->name; } } elseif ($parsedUIMetaDataName instanceof FormulaAttributeParsedUIMetaDataName) { $datasetColumnName = $parsedUIMetaDataName->name; } elseif ($parsedUIMetaDataName instanceof FormulaMeasureParsedUIMetaDataName) { $datasetColumnName = $parsedUIMetaDataName->name; } if (isset($datasetColumnName)) { $columnMappings[$columnName] = $datasetColumnName; } } return $columnMappings; }
protected function prepareColumnUIMetaData4ExtensionDataset(array $datasetStack, AbstractAttributeUIMetaData $parentUIMetaData, $referencePath, CubeMetaData $cube, $dimensionName, $dimensionReferencePath, DatasetMetaData $dataset, ColumnMetaData $column) { $metamodel = data_controller_get_metamodel(); $reference = $metamodel->findReference($dataset->name); if (!isset($reference)) { return; } // preparing list of the dataset extensions $extensionDatasets = NULL; foreach ($reference->points as $referencePoint) { foreach ($referencePoint->columns as $referencePointColumn) { if ($referencePointColumn->datasetName == $dataset->name) { continue; } if (isset($extensionDatasets[$referencePointColumn->datasetName])) { continue; } $referencedDataset = $metamodel->getDataset($referencePointColumn->datasetName); // FIXME excluding logical dataset. We should not have mix of logical and physical datasets in one reference if ($referencedDataset->sourceType == StarSchemaDatasetSourceTypeHandler::SOURCE_TYPE) { continue; } // is it being processed? if (isset($datasetStack[$referencedDataset->name])) { continue; } $referencedKeyColumn = $referencedDataset->findKeyColumn(FALSE); if (isset($referencedKeyColumn) && (!isset($referencePointColumn->columnName) || ($referencePointColumn->columnName == $referencedKeyColumn->name))) { $extensionDatasets[$referencePointColumn->datasetName] = $referencedDataset; } } } if (!isset($extensionDatasets)) { return; } // processing the extensions $adjustedExtensionDatasetNames = NULL; foreach ($extensionDatasets as $extensionDataset) { list($adjustedExtensionDatasetName) = gd_data_controller_metamodel_adjust_dataset_name($extensionDataset->name); $adjustedExtensionDatasetNames[$extensionDataset->name] = $metamodel->getDataset($adjustedExtensionDatasetName)->name; } foreach ($extensionDatasets as $extensionDataset) { $datasetUIMetaData = new AttributeColumnUIMetaData(); $datasetUIMetaData->publicName = $extensionDataset->publicName; $datasetUIMetaData->description = $extensionDataset->description; $datasetUIMetaData->isSelectable = FALSE; $extensionReferencePath = isset($dimensionReferencePath) ? self::prepareReferencedElementName($dimensionReferencePath, $dataset->name, $column->name) : ReferencePathHelper::assembleReference($dataset->name, $column->name); $dimensionColumnName = self::prepareReferencedElementName($extensionReferencePath, $extensionDataset->name, $extensionDataset->getKeyColumn()->name); $datasetUIMetaData->name = self::prepareAttributeUIMetaDataName($referencePath, $cube->factsDatasetName, $dimensionName, $dimensionColumnName); $this->generateColumnUIMetaData4DimensionDataset($datasetStack, $datasetUIMetaData, $referencePath, $cube, $dimensionName, $extensionReferencePath, $extensionDataset->name); $parentUIMetaData->registerElement($datasetUIMetaData); } }
protected function adjustDatasetName($datasetName) { list($adjustedDatasetName) = gd_data_controller_metamodel_adjust_dataset_name($datasetName); return $adjustedDatasetName; }