/**
* {@inheritdoc}
*/
public function save(ResourceSegmentBehavior $document)
{
$path = $document->getResourceSegment();
$webspaceKey = $this->documentInspector->getWebspace($document);
$locale = $this->documentInspector->getLocale($document);
$segmentKey = null;
$webspaceRouteRootPath = $this->getWebspaceRouteNodeBasePath($webspaceKey, $locale, $segmentKey);
try {
$routeNodePath = $this->loadByContent($this->documentInspector->getNode($document), $webspaceKey, $locale, $segmentKey);
$routeDocument = $this->documentManager->find($webspaceRouteRootPath . $routeNodePath, $locale, ['rehydrate' => false]);
$routeDocumentPath = $webspaceRouteRootPath . $routeNodePath;
} catch (ResourceLocatorNotFoundException $e) {
$routeDocument = $this->documentManager->create('route');
$routeDocumentPath = $webspaceRouteRootPath . $path;
}
$routeDocument->setTargetDocument($document);
try {
$this->documentManager->persist($routeDocument, $locale, ['path' => $routeDocumentPath, 'auto_create' => true, 'override' => true]);
$this->documentManager->publish($routeDocument, $locale);
} catch (ItemExistsException $e) {
throw new ResourceLocatorAlreadyExistsException($document->getResourceSegment(), $routeDocumentPath);
}
}