/**
  * Gets the route container from a data source
  * @return \ride\library\router\RouteContainer
  */
 public function getRouteContainer()
 {
     $container = new RouteContainer();
     $nodeTypeManager = $this->nodeModel->getNodeTypeManager();
     $nodeTypes = $nodeTypeManager->getNodeTypes();
     $defaultRevision = $this->nodeModel->getDefaultRevision();
     $registeredPaths = array();
     $expiredCallback = array('ride\\web\\cms\\controller\\frontend\\ExpiredController', 'indexAction');
     $sites = $this->nodeModel->getSites();
     foreach ($sites as $siteId => $site) {
         $nodes = $this->nodeModel->getNodes($siteId, $defaultRevision);
         foreach ($this->locales as $locale) {
             $baseUrl = $site->getBaseUrl($locale);
             foreach ($nodes as $nodeId => $node) {
                 if (!$node->getParent()) {
                     continue;
                 }
                 $nodeType = $nodeTypes[$node->getType()];
                 $callback = $nodeType->getFrontendCallback();
                 if (!$callback) {
                     continue;
                 }
                 if (!$node->isAvailableInLocale($locale)) {
                     continue;
                 }
                 $path = $node->getRoute($locale);
                 $route = new Route($path, $callback, 'cms.front.' . $siteId . '.' . $nodeId . '.' . $locale);
                 $route->setIsDynamic(true);
                 $route->setPredefinedArguments(array('site' => $siteId, 'node' => $nodeId));
                 $route->setLocale($locale);
                 if ($baseUrl) {
                     $route->setBaseUrl($baseUrl);
                 }
                 $container->addRoute($route);
                 $registeredPaths[$path] = true;
             }
         }
         $expiredRoutes = $this->expiredRouteModel->getExpiredRoutes($siteId);
         foreach ($expiredRoutes as $expiredRoute) {
             $path = $expiredRoute->getPath();
             if (isset($registeredPaths[$path]) || $path == '/') {
                 continue;
             }
             $route = new Route($path, $expiredCallback);
             $route->setIsDynamic(true);
             $route->setPredefinedArguments(array('site' => $siteId, 'node' => $expiredRoute->getNode()));
             $route->setLocale($expiredRoute->getLocale());
             $baseUrl = $expiredRoute->getBaseUrl();
             if ($baseUrl) {
                 $route->setBaseUrl($baseUrl);
             }
             $container->addRoute($route);
         }
     }
     return $container;
 }