com.vaadin.flow.router.internal.
Class AbstractRouteRegistry
- java.lang.Object
-
- com.vaadin.flow.router.internal.AbstractRouteRegistry
-
All Implemented Interfaces:
Direct Known Subclasses:
public abstract class AbstractRouteRegistry extends Object implements RouteRegistry
AbstractRouteRegistry with locking support and configuration.
See Also:
-
-
Nested Class Summary
Nested Classes Modifier and Type Class and Description static interface
AbstractRouteRegistry.Configuration
Configuration interface to use for updating the configuration entity.
-
Constructor Summary
Constructors Constructor and Description AbstractRouteRegistry()
-
Method Summary
All Methods Modifier and Type Method and Description protected void
addErrorTarget(Class<? extends Component> target, Map<Class<? extends Exception>,Class<? extends Component>> exceptionTargetsMap)
Add the given error target to the exceptionTargetMap.
Registration
addRoutesChangeListener(RoutesChangedListener listener)
Adds the given route change listener to the registry.
void
clean()
Clear all registered routes from the registry.
protected void
configure(AbstractRouteRegistry.Configuration command)
Thread-safe update of the RouteConfiguration.
protected void
fireEvent(RoutesChangedEvent routeChangedEvent)
Fire routes changed event to all registered listeners.
ConfiguredRoutes
getConfiguration()
Get the current valid configuration.
List<RouteData>
getRegisteredRoutes()
Get the
RouteData
for all registered navigation targets.List<Class<? extends RouterLayout>>
getRouteLayouts(String path, Class<? extends Component> navigationTarget)
Get the layout chain for given navigation target on the targeted path.
Optional<String>
getTargetUrl(Class<? extends Component> navigationTarget)
Get the url string for given navigation target.
protected boolean
hasLock()
void
removeRoute(Class<? extends Component> routeTarget)
Remove the given navigation target route registration.
void
removeRoute(String path)
Remove all registrations for given path.
void
removeRoute(String path, Class<? extends Component> navigationTarget)
Remove only the specified navigationTarget from the path and not the whole path if other targets exist for path.
protected Optional<ErrorTargetEntry>
searchByCause(Exception exception)
Get the exception handler for given exception or recurse by exception cause until possible exception with handler found.
protected Optional<ErrorTargetEntry>
searchBySuperType(Throwable exception)
Search given exception super classes to get exception handler for if any exist.
void
setRoute(String path, Class<? extends Component> navigationTarget, List<Class<? extends RouterLayout>> parentChain)
Register a navigation target with specified path and given parent layout chain.
void
update(Command command)
Block updates to the registry configuration from other threads until update command has completed.
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.vaadin.flow.server.RouteRegistry
getNavigationTarget, getNavigationTarget
-
-
-
-
Method Detail
-
configure
protected void configure(AbstractRouteRegistry.Configuration command)
Thread-safe update of the RouteConfiguration.
Parameters:
command
- command that will mutate the configuration copy.
-
update
public void update(Command command)
Description copied from interface:
RouteRegistry
Block updates to the registry configuration from other threads until update command has completed. This makes the command changes atomic for the registry as no one else can change the registry state during the command.
Any other thread trying to configure current registry will be blocked until the update has released all the locks.
Specified by:
update
in interfaceRouteRegistry
Parameters:
command
- command to execute for the update
-
fireEvent
protected void fireEvent(RoutesChangedEvent routeChangedEvent)
Fire routes changed event to all registered listeners.
Parameters:
routeChangedEvent
- event containing changes
-
addRoutesChangeListener
public Registration addRoutesChangeListener(RoutesChangedListener listener)
Description copied from interface:
RouteRegistry
Adds the given route change listener to the registry.
Specified by:
addRoutesChangeListener
in interfaceRouteRegistry
Parameters:
listener
- listener to be informed on route changesReturns:
registration to remove the listener
-
hasLock
protected boolean hasLock()
-
getConfiguration
public ConfiguredRoutes getConfiguration()
Get the current valid configuration.
Note! there may exist a possibility that someone updates this while it's being read, but the given configuration is valid at the given point in time.
Returns:
current state of the registry as a value object
-
getRegisteredRoutes
public List<RouteData> getRegisteredRoutes()
Description copied from interface:
RouteRegistry
Get the
RouteData
for all registered navigation targets.Specified by:
getRegisteredRoutes
in interfaceRouteRegistry
Returns:
list of routes available for this registry
-
getRouteLayouts
public List<Class<? extends RouterLayout>> getRouteLayouts(String path, Class<? extends Component> navigationTarget)
Description copied from interface:
RouteRegistry
Get the layout chain for given navigation target on the targeted path.
This chain may be pre-defined or generated from annotation data.
Specified by:
getRouteLayouts
in interfaceRouteRegistry
Parameters:
path
- path to use for resolving chainnavigationTarget
- navigation target to get layout chain forReturns:
layout chain of target
-
getTargetUrl
public Optional<String> getTargetUrl(Class<? extends Component> navigationTarget)
Description copied from interface:
RouteRegistry
Get the url string for given navigation target.
Will return Optional.empty is navigation target was not found.
Specified by:
getTargetUrl
in interfaceRouteRegistry
Parameters:
navigationTarget
- navigation target to get registered route for, notnull
Returns:
optional navigation target url string
-
setRoute
public void setRoute(String path, Class<? extends Component> navigationTarget, List<Class<? extends RouterLayout>> parentChain)
Description copied from interface:
RouteRegistry
Register a navigation target with specified path and given parent layout chain. Any
ParentLayout
,Route
orRouteAlias
will be ignored in route handling.Specified by:
setRoute
in interfaceRouteRegistry
Parameters:
path
- path to register navigation target tonavigationTarget
- navigation target to register into session scopeparentChain
- chain of parent layouts that should be used with this target
-
removeRoute
public void removeRoute(Class<? extends Component> routeTarget)
Description copied from interface:
RouteRegistry
Remove the given navigation target route registration. Path where the navigation target was may still be usable, e.g. we remove target with url param and there is left a non param target, but will not return the removed target.
Note! this will remove target route and if possible any
RouteAlias
route that can be found for the class.Specified by:
removeRoute
in interfaceRouteRegistry
Parameters:
routeTarget
- navigation target class to remove
-
removeRoute
public void removeRoute(String path)
Description copied from interface:
RouteRegistry
Remove all registrations for given path. This means that any navigation target registered on the given path will be removed. But if a removed navigationTarget for the path exists it is then stored with a new main path so it can still get a resolved url.
E.g. path "home" contains HomeView and DetailsView[String path param] both will be removed.
Note! The restored path will be the first found match for all paths that are registered.
Specified by:
removeRoute
in interfaceRouteRegistry
Parameters:
path
- path for which to remove all navigation targets
-
removeRoute
public void removeRoute(String path, Class<? extends Component> navigationTarget)
Description copied from interface:
RouteRegistry
Remove only the specified navigationTarget from the path and not the whole path if other targets exist for path. If no other targets exist whole route will be cleared.
This will leave any other targets for path e.g. removing the wildcard path will still leave the optional target.
Note! If another path exists for the removed navigation target it will get a new main path so it can still get a resolved url. The restored path will be the first found match for all paths that are registered.
Specified by:
removeRoute
in interfaceRouteRegistry
Parameters:
path
- path to remove from registrynavigationTarget
- path navigation target to remove
-
clean
public void clean()
Description copied from interface:
RouteRegistry
Clear all registered routes from the registry.
Specified by:
clean
in interfaceRouteRegistry
-
addErrorTarget
protected void addErrorTarget(Class<? extends Component> target, Map<Class<? extends Exception>,Class<? extends Component>> exceptionTargetsMap)
Add the given error target to the exceptionTargetMap. This will handle existing overlapping exception types by assigning the correct error target according to inheritance or throw if existing and new are not related.
Parameters:
target
- error handler targetexceptionTargetsMap
- map of existing error handlersThrows:
InvalidRouteConfigurationException
- if trying to add a non related exception handler for which a handler already exists
-
searchByCause
protected Optional<ErrorTargetEntry> searchByCause(Exception exception)
Get the exception handler for given exception or recurse by exception cause until possible exception with handler found.
Parameters:
exception
- exception to get handler forReturns:
Optional containing found handler or empty if none found
-
searchBySuperType
protected Optional<ErrorTargetEntry> searchBySuperType(Throwable exception)
Search given exception super classes to get exception handler for if any exist.
Parameters:
exception
- exception to get handler forReturns:
Optional containing found handler or empty if none found
-
-