protected function mergeWithReference(AbstractMetaModel $metamodel, array $filters = NULL, $namespace, $sourceReferenceName, $sourceReference) { $referenceName = NameSpaceHelper::resolveNameSpace($namespace, $sourceReferenceName); $reference = $metamodel->findReference($referenceName); if (isset($reference)) { $metamodel->unregisterReference($referenceName); } else { $reference = new DatasetReference(); $reference->name = $referenceName; } // reference[]/dataset/name foreach ($sourceReference as $pointIndex => $sourcePoint) { if (!isset($sourcePoint->datasetName)) { throw new IllegalStateException(t("'@referenceName' reference point definition (index: @pointIndex) does not contain a reference to dataset", array('@referenceName' => $referenceName, '@pointIndex' => $pointIndex))); } $datasetName = NameSpaceHelper::resolveNameSpace($namespace, $sourcePoint->datasetName); $referencePoint = $reference->initiatePoint(); if (isset($sourcePoint->columnNames)) { foreach ($sourcePoint->columnNames as $columnName) { $referencePointColumn = $referencePoint->initiateColumn(); $referencePointColumn->datasetName = $datasetName; $referencePointColumn->columnName = $columnName; $referencePoint->registerColumnInstance($referencePointColumn); } } else { $referencePointColumn = $referencePoint->initiateColumn(); $referencePointColumn->datasetName = $datasetName; $referencePoint->registerColumnInstance($referencePointColumn); } $reference->registerPointInstance($referencePoint); } $metamodel->registerReference($reference); return $reference; }
protected function mergeWithReference(AbstractMetaModel $metamodel, array $filters = NULL, $namespace, $sourceReferenceName, $sourceReference) { $referenceName = NameSpaceHelper::resolveNameSpace($namespace, $sourceReferenceName); $reference = $metamodel->findReference($referenceName); if (isset($reference)) { $metamodel->unregisterReference($referenceName); } else { $reference = new DatasetReference(); $reference->name = $referenceName; } // reference[]/dataset/name foreach ($sourceReference as $pointIndex => $sourcePoint) { if (!isset($sourcePoint->datasetName)) { throw new IllegalStateException(t( '%referenceName reference point definition (index: %pointIndex) does not contain a reference to dataset', array('%referenceName' => $referenceName, '%pointIndex' => $pointIndex))); } $datasetName = NameSpaceHelper::resolveNameSpace($namespace, $sourcePoint->datasetName); // TODO eliminate the following check because we should allow reference definition in separate file which is processed before corresponding datasets are processed // at the same time we do not want to have references which point to 'missing' datasets // we can eliminate such references during final meta model validation if ($metamodel->findDataset($datasetName) == NULL) { continue; } $referencePoint = $reference->initiatePoint(); if (isset($sourcePoint->columnNames)) { foreach ($sourcePoint->columnNames as $columnName) { $referencePointColumn = $referencePoint->initiateColumn(); $referencePointColumn->datasetName = $datasetName; $referencePointColumn->columnName = $columnName; $referencePoint->registerColumnInstance($referencePointColumn); } } else { $referencePointColumn = $referencePoint->initiateColumn(); $referencePointColumn->datasetName = $datasetName; $referencePoint->registerColumnInstance($referencePointColumn); } $reference->registerPointInstance($referencePoint); } $metamodel->registerReference($reference); return $reference; }