/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.kernel.portlet;
import aQute.bnd.annotation.ProviderType;
import java.util.List;
import java.util.Map;
/**
* Contains a list of the available routes and handles conversion of URLs to
* parameter maps and vice versa.
*
* <p>
* The priority of a route is based on when it was added to the router. The
* first route has the highest priority and a URL path will always be matched
* against it first. If the first route does not match, the second will be
* tried, continuing until either a match is found or all the routes have been
* tested.
* </p>
*
* <p>
* When choosing the order in which to place a list of routes, the general rule
* is to sort the routes from least general to most general. The simplest way of
* determining the generality of a route is by counting the number of capturing
* fragments in it.
* </p>
*
* @author Connor McKay
* @author Brian Wing Shun Chan
* @see Route
* @see DefaultFriendlyURLMapper
*/
@ProviderType
public interface Router {
/**
* Generates a new route from its pattern string.
*
* @param pattern the route pattern string
* @return the generated route
*/
public Route addRoute(String pattern);
public List<Route> getRoutes();
/**
* Generates a URL from the parameter map using the available routes.
*
* @param parameters the parameter map
* @return the URL path, or <code>null</code> if an applicable route was not
* found
*/
public String parametersToUrl(Map<String, String> parameters);
/**
* Parses a URL into a parameter map using the available routes.
*
* @param url the URL to be parsed
* @param parameters the parameter map to be populated
* @return <code>true</code> if a match was found and
* <code>parameters</code> was populated; <code>false</code>
* otherwise
*/
public boolean urlToParameters(String url, Map<String, String> parameters);
}