public static function adjustReferencePointColumn(MetaModelLoader $metamodelLoader, AbstractMetaModel $metamodel, DatasetReferencePointColumn $referencePointColumn)
 {
     if (!isset($referencePointColumn->columnName)) {
         $dataset = $metamodel->getDataset($referencePointColumn->datasetName);
         // FIXME eliminate this logic. Support configuration postprocessing
         $referencePointColumn->columnName = $dataset->getKeyColumn()->name;
     }
     if ($metamodelLoader instanceof ReferenceMetaModelLoader) {
         $metamodelLoader->adjustReferencePointColumn($metamodel, $referencePointColumn);
     }
 }
 public static function adjustReferencePointColumn(AbstractMetaModel $metamodel, DatasetReferencePointColumn $referencePointColumn)
 {
     $datasetName = $referencePointColumn->datasetName;
     $dataset = $metamodel->getDataset($datasetName);
     $column = $dataset->getColumn($referencePointColumn->columnName);
     $handler = DimensionLookupFactory::getInstance()->getHandler($column->type->getLogicalApplicationType());
     list($adjustedDatasetName, $adjustedColumnName, $shared) = $handler->adjustReferencePointColumn($metamodel, $dataset->name, $referencePointColumn->columnName);
     if ($adjustedDatasetName === $referencePointColumn->datasetName) {
         if ($adjustedColumnName === $referencePointColumn->columnName) {
             // we do not need to change anything
         } else {
             throw new UnsupportedOperationException();
         }
     } else {
         $referencePointColumn->datasetName = $adjustedDatasetName;
         $referencePointColumn->columnName = $adjustedColumnName;
     }
     $referencePointColumn->shared = $shared;
 }
    protected function generateLogicalDatasets(SystemTableMetaModelLoaderCallContext $callcontext, AbstractMetaModel $metamodel) {
        $datasetCount = 0;

        foreach ($callcontext->datasets as $tableAccessKey => $dataset) {
            $logicalDataset = new DatasetMetaData();
            $logicalDataset->name = $this->generateLogicalDatasetName($dataset->name);
            $logicalDataset->publicName = $dataset->publicName;
            $logicalDataset->description = $dataset->description;
            $logicalDataset->datasourceName = $dataset->datasourceName;
            $logicalDataset->sourceType = StarSchemaDatasetSourceTypeHandler::SOURCE_TYPE;

            $callcontext->logicalDatasetNameMappings[$logicalDataset->name] = $tableAccessKey;

            foreach ($dataset->columns as $column) {
                $logicalColumn = $logicalDataset->initiateColumn();
                $logicalColumn->name = $column->name;
                $logicalColumn->publicName = $column->publicName;
                $logicalColumn->description = $column->description;
                $logicalColumn->persistence = $column->persistence;
                $logicalColumn->columnIndex = $column->columnIndex;
                $logicalColumn->key = $column->key;
                $logicalColumn->visible = $column->visible;
                $logicalColumn->used = $column->used;

                if (isset($column->type->logicalApplicationType)) {
                    list($refDatasetName, $refColumnName) = ReferencePathHelper::splitReference($column->type->logicalApplicationType);

                    $refDataset = $metamodel->getDataset($refDatasetName);
                    $refColumn = $refDataset->getColumn($refColumnName);

                    $logicalColumn->type->databaseType = $refColumn->type->databaseType;
                    $logicalColumn->type->length = $refColumn->type->length;
                    $logicalColumn->type->precision = $refColumn->type->precision;
                    $logicalColumn->type->scale = $refColumn->type->scale;

                    $logicalColumn->type->applicationType = ReferencePathHelper::assembleReference(
                        $this->generateLogicalDatasetName($refDataset->name), $refColumnName);
                }
                else {
                    $logicalColumn->initializeTypeFrom($column->type);
                }

                $logicalDataset->registerColumnInstance($logicalColumn);
            }

            $callcontext->logicalDatasets[$tableAccessKey] = $logicalDataset;
            $datasetCount++;
        }

        LogHelper::log_info(t('Generated @datasetCount logical datasets', array('@datasetCount' => $datasetCount)));
    }
    public function adjustReferencePointColumn(AbstractMetaModel $metamodel, $datasetName, $columnName) {
        // FIXME we should work only with one way to find a cube
        $cube = $metamodel->findCubeByDatasetName($this->datasetName);
        if (!isset($cube)) {
            $cube = $metamodel->getCube($this->datasetName);
        }

        $adjustedDatasetName = $cube->factsDatasetName;
        $adjustedDataset = $metamodel->getDataset($adjustedDatasetName);

        $adjustedColumnName = $adjustedDataset->getKeyColumn()->name;

        $shared = TRUE;
        return array($adjustedDatasetName, $adjustedColumnName, $shared);
    }