/**
* 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 java.util.Map;
/**
* Provides friendly URL mapping for a portlet by converting portlet URL
* parameters to friendly URL paths and back.
*
* <p>
* Never implement this interface directly, subclass {@link
* BaseFriendlyURLMapper} to ensure forward compatibility.
* </p>
*
* @author Brian Myunghun Kim
* @author Brian Wing Shun Chan
* @author Jorge Ferrer
* @see BaseFriendlyURLMapper
* @see DefaultFriendlyURLMapper
* @see com.liferay.portlet.PortletURLImpl
*/
public interface FriendlyURLMapper {
/**
* Generates a friendly URL path from the portlet URL object.
*
* @param liferayPortletURL the portlet URL object to generate a friendly
* URL for
* @return the generated friendly URL, or <code>null</code> if one cannot be
* built. Returning <code>null</code> will cause a normal portlet
* URL to be generated.
*/
public String buildPath(LiferayPortletURL liferayPortletURL);
/**
* Returns the friendly URL mapping for this portlet.
*
* <p>
* The friendly URL mapping is used by Liferay to identify the portlet a
* friendly URL refers to. It generally appears directly after the
* <code>/-/</code> in the URL.
* </p>
*
* <p>
* For instance, the blogs portlet mapping is "blogs". This
* produces friendly URLs similar to
* <code>http://www.liferay.com/web/guest/blog/-/blogs/example-post</code>
* </p>
*
* @return the friendly URL mapping for this portlet, not including any
* leading or trailing slashes
*/
public String getMapping();
/**
* Returns the ID of this portlet
*
* @return the ID of this portlet, not including the instance ID
*/
public String getPortletId();
/**
* Returns the router for this friendly URL mapper
*
* @return the router, or <code>null</code> if one has not been set
*/
public Router getRouter();
/**
* Returns <code>true</code> if the friendly URLs for this mapper should
* include the friendly URL separator.
*
* <p>
* Typically, friendly URLs will include the separator "/-/"
* before the friendly URL mapping. If this method returns
* <code>false</code>, a single slash will be used instead.
* </p>
*
* <p>
* This method is called by {@link com.liferay.portal.util.PortalImpl} when
* a friendly URL is processed.
* </p>
*
* <p>
* <b>It is strongly recommended that this method always return
* <code>true</code></b>.
* </p>
*
* @return <code>true</code> if the "/-/" separator should be
* included in friendly URLs, or <code>false</code> if only a
* "/" should be used
*/
public boolean isCheckMappingWithPrefix();
/**
* Returns <code>true</code> if this portlet is instanceable.
*
* <p>
* The value returned from this method has no effect on whether a portlet is
* instanceable, it is a helper method used to determine if the instance ID
* should be included in the URL.
* </p>
*
* @return <code>true</code> if the portlet is instanceable;
* <code>false</code> otherwise
*/
public boolean isPortletInstanceable();
/**
* Populates the parameter map with values parsed from the friendly URL
* path.
*
* <p>
* This method is called by {@link com.liferay.portal.util.PortalImpl} when
* a friendly URL is processed.
* </p>
*
* @param friendlyURLPath the friendly URL path, including a leading slash
* and the friendly URL mapping. For example:
* <code>/blogs/example-post</code>
* @param parameterMap the parameter map. Entries added to this map must be
* namespaced.
* @param requestContext the request context
* @see BaseFriendlyURLMapper#addParameter(Map, String, String)
* @see BaseFriendlyURLMapper#addParameter(String, Map, String, String)
*/
public void populateParams(
String friendlyURLPath, Map<String, String[]> parameterMap,
Map<String, Object> requestContext);
/**
* Sets the friendly URL mapping for this portlet.
*
* <p>
* This method is automatically called by {@link
* com.liferay.portlet.PortletBagFactory} with the friendly URL mapping
* defined in <code>liferay-portlet.xml</code>.
* </p>
*
* @param mapping the friendly URL mapping for this portlet
*/
public void setMapping(String mapping);
/**
* Sets the ID of this portlet.
*
* <p>
* This method is automatically called by {@link
* com.liferay.portlet.PortletBagFactory} with the portlet ID defined in
* <code>liferay-portlet.xml</code>.
* </p>
*
* @param portletId the ID of this portlet.
*/
public void setPortletId(String portletId);
/**
* Sets whether this portlet is instanceable.
*
* @param portletInstanceable whether this portlet is instanceable
*/
public void setPortletInstanceable(boolean portletInstanceable);
/**
* Sets the router for this friendly URL mapper.
*
* <p>
* This method is automatically called by {@link
* com.liferay.portlet.PortletBagFactory} with a router populated with the
* routes defined in this portlet's <a
* href="../definitions/liferay-friendly-url-routes_6_0_0.dtd.html"
* >friendly-url-routes.xml</a> file. The location of this file is defined
* in this portlet's <a
* href="../definitions/liferay-portlet-app_6_0_0.dtd.html"
* >liferay-portlet.xml</a> file.
* </p>
*
* @param router the router for this friendly URL mapper
*/
public void setRouter(Router router);
}