Class CompoundRequestMapper

    • Constructor Detail

      • CompoundRequestMapper

        public CompoundRequestMapper()
    • Method Detail

      • mapRequest

        public IRequestHandler mapRequest​(Request request)
        Searches the registered IRequestMappers to find one that can map the Request. Each registered IRequestMapper is asked to provide its compatibility score. Then the mappers are asked to map the request in order depending on the provided compatibility score.

        The mapper with highest compatibility score which can map the request is returned.

        Specified by:
        mapRequest in interface IRequestMapper
        Parameters:
        request -
        Returns:
        RequestHandler for the request or null if no mapper for the request is found.
      • mapHandler

        public Url mapHandler​(IRequestHandler handler)
        Searches the registered IRequestMappers to find one that can map the IRequestHandler. Each registered IRequestMapper is asked to map the IRequestHandler until a mapper which can map the IRequestHandler is found or no more mappers are left.

        The mappers are searched in reverse order as they have been registered. More recently registered mappers have bigger priority.

        Specified by:
        mapHandler in interface IRequestMapper
        Parameters:
        handler -
        Returns:
        Url for the handler or null if no mapper for the handler is found.
      • getCompatibilityScore

        public int getCompatibilityScore​(Request request)
        The scope of the compound mapper is the highest score of the registered mappers. Returns the score representing how compatible this request mapper is to processing the given request. When a request comes in all mappers are scored and are tried in order from highest score to lowest.

        A good criteria for calculating the score is the number of matched url segments. For example when there are two mappers for a mounted page, one mapped to /foo another to /foo/bar and the incoming request URL is /foo/bar/baz, the mapping to /foo/bar should probably handle the request first as it has matching segments count of 2 while the first one has only matching segments count of 1.

        Note that the method can return value greater then zero even if the mapper does not recognize the request.

        Specified by:
        getCompatibilityScore in interface IRequestMapper
        Returns:
        the compatibility score, e.g. count of matching segments