/**
  * {@inheritDoc}
  */
 public function handleDefunctRoutes(UriContextCollection $uriContextCollection)
 {
     $referringAutoRouteCollection = $this->adapter->getReferringAutoRoutes($uriContextCollection->getSubjectObject());
     foreach ($referringAutoRouteCollection as $referringAutoRoute) {
         if (false === $uriContextCollection->containsAutoRoute($referringAutoRoute)) {
             $newRoute = $uriContextCollection->getAutoRouteByTag($referringAutoRoute->getAutoRouteTag());
             $this->adapter->createRedirectRoute($referringAutoRoute, $newRoute);
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function handleDefunctRoutes(UriContextCollection $uriContextCollection)
 {
     $referringAutoRouteCollection = $this->adapter->getReferringAutoRoutes($uriContextCollection->getSubjectObject());
     foreach ($referringAutoRouteCollection as $referringAutoRoute) {
         if (false === $uriContextCollection->containsAutoRoute($referringAutoRoute)) {
             $newRoute = $uriContextCollection->getAutoRouteByTag($referringAutoRoute->getAutoRouteTag());
             if (null !== $newRoute) {
                 $this->adapter->migrateAutoRouteChildren($referringAutoRoute, $newRoute);
             }
             $this->adapter->removeAutoRoute($referringAutoRoute);
         }
     }
 }
 /**
  * Populates an empty UriContextCollection with UriContexts.
  *
  * @param $uriContextCollection UriContextCollection
  */
 public function build(UriContextCollection $uriContextCollection)
 {
     $subjectObject = $uriContextCollection->getSubjectObject();
     $realClassName = $this->adapter->getRealClassName(get_class($subjectObject));
     $metadata = $this->metadataFactory->getMetadataForClass($realClassName);
     // TODO: This is where we will call $metadata->getUriSchemas() which will return an
     //       array of URI schemas (inc. the "template", TP configs and CR configs).
     $definitions = $metadata->getAutoRouteDefinitions();
     foreach ($definitions as $definition) {
         $locales = $this->adapter->getLocales($subjectObject) ?: array(null);
         foreach ($locales as $locale) {
             // create and add uri context to stack
             $uriContext = $uriContextCollection->createUriContext($definition->getUriSchema(), $definition->getDefaults(), $metadata->getTokenProviders(), $metadata->getConflictResolver(), $locale);
             $uriContextCollection->addUriContext($uriContext);
         }
     }
 }
 /**
  * Handle the case where the generated path already exists.
  * Either if it does not reference the same content then we
  * have a conflict which needs to be resolved.
  *
  * @param Route      $route
  * @param UriContext $uriContext
  */
 private function handleExistingRoute($existingRoute, $uriContext)
 {
     $isSameContent = $this->adapter->compareAutoRouteContent($existingRoute, $uriContext->getSubjectObject());
     if ($isSameContent) {
         $autoRoute = $existingRoute;
         $autoRoute->setType(AutoRouteInterface::TYPE_PRIMARY);
         return $autoRoute;
     }
     $uri = $this->uriGenerator->resolveConflict($uriContext);
     $uriContext->setUri($uri);
 }
 /**
  * Populates an empty UriContextCollection with UriContexts.
  *
  * @param $uriContextCollection UriContextCollection
  */
 private function getUriContextsForDocument(UriContextCollection $uriContextCollection)
 {
     $locales = $this->adapter->getLocales($uriContextCollection->getSubjectObject()) ?: array(null);
     foreach ($locales as $locale) {
         if (null !== $locale) {
             $subjectObject = $this->adapter->translateObject($uriContextCollection->getSubjectObject(), $locale);
             if (null !== $subjectObject) {
                 $uriContextCollection->setSubjectObject($subjectObject);
             } else {
                 @trigger_error('AdapterInterface::translateObject() has to return the subjectObject as of version 1.1, support for by reference will be removed in 2.0.', E_USER_DEPRECATED);
             }
         }
         // create and add uri context to stack
         $uriContext = $uriContextCollection->createUriContext($locale);
         $uriContextCollection->addUriContext($uriContext);
         // generate the URL
         $uri = $this->uriGenerator->generateUri($uriContext);
         // update the context with the URL
         $uriContext->setUri($uri);
     }
 }