Class SpincastRouter<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>

java.lang.Object
org.spincast.plugins.routing.SpincastRouter<R,W>
All Implemented Interfaces:
org.spincast.core.routing.Router<R,W>
Direct Known Subclasses:
DefaultRouterDefault

public class SpincastRouter<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>> extends Object implements org.spincast.core.routing.Router<R,W>
Spincast router
  • Field Details

    • logger

      protected static final org.slf4j.Logger logger
  • Constructor Details

  • Method Details

    • init

      @Inject protected void init()
    • validation

      protected void validation()
    • addDefaultFilters

      protected void addDefaultFilters()
    • getSpincastRouterConfig

      protected SpincastRouterConfig getSpincastRouterConfig()
    • getRouteFactory

      protected RouteFactory<R> getRouteFactory()
    • getSpincastConfig

      protected org.spincast.core.config.SpincastConfig getSpincastConfig()
    • getDictionary

      protected org.spincast.core.dictionary.Dictionary getDictionary()
    • getServer

      protected org.spincast.core.server.Server getServer()
    • getSpincastFilters

      protected org.spincast.core.filters.SpincastFilters<R> getSpincastFilters()
    • getRouteBuilderFactory

      protected org.spincast.core.routing.RouteBuilderFactory<R,W> getRouteBuilderFactory()
    • getRedirectRuleBuilderFactory

      protected org.spincast.core.routing.RedirectRuleBuilderFactory<R,W> getRedirectRuleBuilderFactory()
    • getWebsocketRouteBuilderFactory

      protected org.spincast.core.websocket.WebsocketRouteBuilderFactory<R,W> getWebsocketRouteBuilderFactory()
    • getWebsocketRouteHandlerFactory

      protected org.spincast.core.websocket.WebsocketRouteHandlerFactory<R,W> getWebsocketRouteHandlerFactory()
    • getStaticResourceBuilderFactory

      protected org.spincast.core.routing.StaticResourceBuilderFactory<R,W> getStaticResourceBuilderFactory()
    • getRouteHandlerMatchFactory

      protected RouteHandlerMatchFactory<R> getRouteHandlerMatchFactory()
    • getStaticResourceFactory

      protected org.spincast.core.routing.StaticResourceFactory<R> getStaticResourceFactory()
    • getSpincastRoutingUtils

      protected SpincastRoutingUtils getSpincastRoutingUtils()
    • getLocaleResolver

      protected org.spincast.core.locale.LocaleResolver getLocaleResolver()
    • getPattern

      protected Pattern getPattern(String patternStr)
    • getRouteParamPatternAliases

      public Map<String,String> getRouteParamPatternAliases()
      Specified by:
      getRouteParamPatternAliases in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • getRouteParamPatternFromDictionaryKeyCache

      protected Map<String,String> getRouteParamPatternFromDictionaryKeyCache()
    • getRoute

      public org.spincast.core.routing.Route<R> getRoute(String routeId)
      Specified by:
      getRoute in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • getGlobalBeforeFiltersPerPosition

      protected Map<Integer,List<org.spincast.core.routing.Route<R>>> getGlobalBeforeFiltersPerPosition()
    • getGlobalBeforeFiltersRoutes

      public List<org.spincast.core.routing.Route<R>> getGlobalBeforeFiltersRoutes()
      Specified by:
      getGlobalBeforeFiltersRoutes in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • getGlobalAfterFiltersPerPosition

      protected Map<Integer,List<org.spincast.core.routing.Route<R>>> getGlobalAfterFiltersPerPosition()
    • getGlobalAfterFiltersRoutes

      public List<org.spincast.core.routing.Route<R>> getGlobalAfterFiltersRoutes()
      Specified by:
      getGlobalAfterFiltersRoutes in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • getMainRoutes

      public List<org.spincast.core.routing.Route<R>> getMainRoutes()
      Specified by:
      getMainRoutes in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • addRoute

      public void addRoute(org.spincast.core.routing.Route<R> route)
      Specified by:
      addRoute in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • validateId

      protected void validateId(String id)
    • validatePath

      protected void validatePath(String path)
      Validate the path of a route. Throws an exception if not valide.
    • removeAllRoutes

      public void removeAllRoutes()
      Specified by:
      removeAllRoutes in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • removeAllRoutes

      public void removeAllRoutes(boolean removeSpincastAndPluginsRoutesToo)
      Specified by:
      removeAllRoutes in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • startsWithAnyOf

      protected boolean startsWithAnyOf(String id, Set<String> prefixes)
    • removeRoute

      public void removeRoute(String routeId)
      Specified by:
      removeRoute in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • route

      public org.spincast.core.routing.RoutingResult<R> route(R requestContext)
      Specified by:
      route in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • route

      public org.spincast.core.routing.RoutingResult<R> route(R requestContext, org.spincast.core.routing.RoutingType routingType)
      Specified by:
      route in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • route

      public org.spincast.core.routing.RoutingResult<R> route(R requestContext, String fullUrl, org.spincast.core.routing.RoutingType routingType)
    • isRoutingTypeMatch

      protected boolean isRoutingTypeMatch(org.spincast.core.routing.RoutingType routingType, org.spincast.core.routing.Route<R> route)
    • isMustSkipResourceRequest

      protected boolean isMustSkipResourceRequest(org.spincast.core.routing.Route<R> mainRoute, org.spincast.core.routing.Route<R> filterRoute)
    • createRoutingResult

      protected org.spincast.core.routing.RoutingResult<R> createRoutingResult(List<org.spincast.core.routing.RouteHandlerMatch<R>> routeHandlerMatches)
    • createRegularHandlerMatches

      protected List<org.spincast.core.routing.RouteHandlerMatch<R>> createRegularHandlerMatches(org.spincast.core.routing.RoutingType routingType, org.spincast.core.routing.Route<R> route, org.spincast.core.routing.HttpMethod httpMethod, List<String> acceptedContentTypes, URL url, int position)
      Get the matches (filters and main handle) if the route matches the URL and HTTP method, or returns NULL otherwise.
    • isRouteMatchAcceptedContentType

      protected boolean isRouteMatchAcceptedContentType(org.spincast.core.routing.Route<R> route, List<String> requestContentTypes)
    • createNoMatchingParamsHandlerMatch

      protected org.spincast.core.routing.RouteHandlerMatch<R> createNoMatchingParamsHandlerMatch(org.spincast.core.routing.Route<R> route, String id, org.spincast.core.routing.Handler<R> handler, int position)
      Creates an handler match with no matching params.
    • createHandlerMatchForBeforeOrAfterFilter

      protected org.spincast.core.routing.RouteHandlerMatch<R> createHandlerMatchForBeforeOrAfterFilter(org.spincast.core.routing.RouteHandlerMatch<R> mainRouteHandlerMatch, org.spincast.core.routing.Handler<R> beforeOrAfterMethod, int position)
      Creates a new match for a "before" or "after" handler specific to a route. THis measn keeping the same informations as the main handler.
    • isRouteMatchHttpMethod

      protected boolean isRouteMatchHttpMethod(org.spincast.core.routing.Route<R> route, org.spincast.core.routing.HttpMethod httpMethod)
      Validate if a route matches the given HTTP method.
    • validatePath

      protected Map<String,String> validatePath(String routePath, URL url)
      Validate if url matches the path of the route and if so, returns the parsed parameters, if any. Returns NULL if there is no match.
    • getPatternFromAlias

      protected String getPatternFromAlias(String alias)
      Get a path pattern from its alias.
      Returns:
      the pattern or NULL if not found.
    • getPatternFromDictionaryKey

      protected String getPatternFromDictionaryKey(String dictionaryKey)
      Get a path pattern from a dictionary key.
      Returns:
      the pattern or NULL if not found.
    • addRouteParamPatternAlias

      public void addRouteParamPatternAlias(String alias, String pattern)
      Specified by:
      addRouteParamPatternAlias in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • GET

      public org.spincast.core.routing.RouteBuilder<R> GET()
      Specified by:
      GET in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • GET

      public org.spincast.core.routing.RouteBuilder<R> GET(String path)
      Specified by:
      GET in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • POST

      public org.spincast.core.routing.RouteBuilder<R> POST()
      Specified by:
      POST in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • POST

      public org.spincast.core.routing.RouteBuilder<R> POST(String path)
      Specified by:
      POST in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • PUT

      public org.spincast.core.routing.RouteBuilder<R> PUT()
      Specified by:
      PUT in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • PUT

      public org.spincast.core.routing.RouteBuilder<R> PUT(String path)
      Specified by:
      PUT in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • DELETE

      public org.spincast.core.routing.RouteBuilder<R> DELETE()
      Specified by:
      DELETE in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • DELETE

      public org.spincast.core.routing.RouteBuilder<R> DELETE(String path)
      Specified by:
      DELETE in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • OPTIONS

      public org.spincast.core.routing.RouteBuilder<R> OPTIONS()
      Specified by:
      OPTIONS in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • OPTIONS

      public org.spincast.core.routing.RouteBuilder<R> OPTIONS(String path)
      Specified by:
      OPTIONS in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • TRACE

      public org.spincast.core.routing.RouteBuilder<R> TRACE()
      Specified by:
      TRACE in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • TRACE

      public org.spincast.core.routing.RouteBuilder<R> TRACE(String path)
      Specified by:
      TRACE in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • HEAD

      public org.spincast.core.routing.RouteBuilder<R> HEAD()
      Specified by:
      HEAD in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • HEAD

      public org.spincast.core.routing.RouteBuilder<R> HEAD(String path)
      Specified by:
      HEAD in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • PATCH

      public org.spincast.core.routing.RouteBuilder<R> PATCH()
      Specified by:
      PATCH in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • PATCH

      public org.spincast.core.routing.RouteBuilder<R> PATCH(String path)
      Specified by:
      PATCH in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • ALL

      public org.spincast.core.routing.RouteBuilder<R> ALL()
      Specified by:
      ALL in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • ALL

      public org.spincast.core.routing.RouteBuilder<R> ALL(String path)
      Specified by:
      ALL in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • methods

      public org.spincast.core.routing.RouteBuilder<R> methods(org.spincast.core.routing.HttpMethod... httpMethods)
      Specified by:
      methods in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • methods

      public org.spincast.core.routing.RouteBuilder<R> methods(String path, org.spincast.core.routing.HttpMethod... httpMethods)
      Specified by:
      methods in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • methods

      public org.spincast.core.routing.RouteBuilder<R> methods(Set<org.spincast.core.routing.HttpMethod> httpMethods)
      Specified by:
      methods in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • methods

      public org.spincast.core.routing.RouteBuilder<R> methods(String path, Set<org.spincast.core.routing.HttpMethod> httpMethods)
      Specified by:
      methods in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • exception

      public void exception(org.spincast.core.routing.Handler<R> handler)
      Specified by:
      exception in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • exception

      public void exception(String path, org.spincast.core.routing.Handler<R> handler)
      Specified by:
      exception in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • notFound

      public void notFound(org.spincast.core.routing.Handler<R> handler)
      Specified by:
      notFound in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • notFound

      public void notFound(String path, org.spincast.core.routing.Handler<R> handler)
      Specified by:
      notFound in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors()
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(Set<String> allowedOrigins)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead, Set<String> extraHeadersAllowedToBeSent)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead, Set<String> extraHeadersAllowedToBeSent, boolean allowCookies)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead, Set<String> extraHeadersAllowedToBeSent, boolean allowCookies, Set<org.spincast.core.routing.HttpMethod> allowedMethods)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead, Set<String> extraHeadersAllowedToBeSent, boolean allowCookies, Set<org.spincast.core.routing.HttpMethod> allowedMethods, int maxAgeInSeconds)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(String path)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(String path, Set<String> allowedOrigins)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(String path, Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(String path, Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead, Set<String> extraHeadersAllowedToBeSent)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(String path, Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead, Set<String> extraHeadersAllowedToBeSent, boolean allowCookies)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(String path, Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead, Set<String> extraHeadersAllowedToBeSent, boolean allowCookies, Set<org.spincast.core.routing.HttpMethod> allowedMethods)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • cors

      public void cors(String path, Set<String> allowedOrigins, Set<String> extraHeadersAllowedToBeRead, Set<String> extraHeadersAllowedToBeSent, boolean allowCookies, Set<org.spincast.core.routing.HttpMethod> allowedMethods, int maxAgeInSeconds)
      Specified by:
      cors in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • file

      public org.spincast.core.routing.StaticResourceBuilder<R> file(String url)
      Specified by:
      file in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • dir

      public org.spincast.core.routing.StaticResourceBuilder<R> dir(String url)
      Specified by:
      dir in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • addStaticResource

      public void addStaticResource(org.spincast.core.routing.StaticResource<R> staticResource)
      Specified by:
      addStaticResource in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • isCreateStaticResourceOnDisk

      protected boolean isCreateStaticResourceOnDisk()
    • httpAuth

      public void httpAuth(String pathPrefix, String realmName)
      Specified by:
      httpAuth in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • websocket

      public org.spincast.core.websocket.WebsocketRouteBuilder<R,W> websocket(String path)
      Specified by:
      websocket in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • addWebsocketRoute

      public void addWebsocketRoute(org.spincast.core.websocket.WebsocketRoute<R,W> websocketRoute)
      Specified by:
      addWebsocketRoute in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>
    • createHttpRouteFromWebsocketRoute

      protected org.spincast.core.routing.Route<R> createHttpRouteFromWebsocketRoute(org.spincast.core.websocket.WebsocketRoute<R,W> websocketRoute)
    • redirect

      public org.spincast.core.routing.RedirectRuleBuilder<R,W> redirect(String oldPath)
      Specified by:
      redirect in interface org.spincast.core.routing.Router<R extends org.spincast.core.exchange.RequestContext<?>,W extends org.spincast.core.websocket.WebsocketContext<?>>