protected function detectRoutes(ReferenceLink $rootLink, array $referencePaths) { $routeId = 0; foreach ($referencePaths as $referencePath => $required) { // preparing possible routes $referenceRoutes = $rootLink->prepareRoutes($referencePath); // selecting 'the best' route $selectedRoute = NULL; if (isset($referenceRoutes)) { foreach ($referenceRoutes as $directReferenceFlag => $routes) { foreach ($routes as $route) { if (!isset($selectedRoute) || ($selectedRoute->weight > $route->weight)) { $selectedRoute = $route; } } } } if (isset($selectedRoute)) { $rootLink->assignRouteId($selectedRoute, $routeId); $routeId++; } elseif ($required) { $metamodel = data_controller_get_metamodel(); LogHelper::log_error(t('Could not execute reference path: @referencePath', array('@referencePath' => $referencePath))); list($referencedDatasetName) = ReferencePathHelper::splitReference($referencePath); $referencedDataset = $metamodel->getDataset($referencedDatasetName); throw new IllegalArgumentException(t( '%datasetNameA and %datasetNameB datasets are not connected', array('%datasetNameA' => $rootLink->dataset->publicName, '%datasetNameB' => $referencedDataset->publicName))); } } }