/* * Copyright 2011 SpringSource * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package grails.web.mapping; import grails.util.CollectionUtils; import java.util.Map; import java.util.Set; /** * Generates links for a Grails application based on URL mapping rules and/or base context settings. * * @author Graeme Rocher * @since 2.0 */ public interface LinkGenerator { String ATTRIBUTE_CONTROLLER = "controller"; String ATTRIBUTE_RESOURCE = "resource"; String ATTRIBUTE_ACTION = "action"; String ATTRIBUTE_METHOD = "method"; String ATTRIBUTE_URI = "uri"; String ATTRIBUTE_RELATIVE_URI = "relativeUri"; String ATTRIBUTE_INCLUDE_CONTEXT = "includeContext"; String ATTRIBUTE_CONTEXT_PATH = "contextPath"; String ATTRIBUTE_URL = "url"; String ATTRIBUTE_BASE = "base"; String ATTRIBUTE_ABSOLUTE = "absolute"; String ATTRIBUTE_ID = "id"; String ATTRIBUTE_FRAGMENT = "fragment"; String ATTRIBUTE_PARAMS = "params"; String ATTRIBUTE_MAPPING = "mapping"; String ATTRIBUTE_EVENT = "event"; String ATTRIBUTE_ELEMENT_ID = "elementId"; String ATTRIBUTE_PLUGIN = "plugin"; String ATTRIBUTE_NAMESPACE = "namespace"; Set<String> LINK_ATTRIBUTES = CollectionUtils.newSet( ATTRIBUTE_RESOURCE, ATTRIBUTE_METHOD, ATTRIBUTE_CONTROLLER, ATTRIBUTE_ACTION, ATTRIBUTE_URI, ATTRIBUTE_RELATIVE_URI, ATTRIBUTE_CONTEXT_PATH, ATTRIBUTE_URL, ATTRIBUTE_BASE, ATTRIBUTE_ABSOLUTE, ATTRIBUTE_ID, ATTRIBUTE_FRAGMENT, ATTRIBUTE_PARAMS, ATTRIBUTE_MAPPING, ATTRIBUTE_EVENT, ATTRIBUTE_ELEMENT_ID, ATTRIBUTE_PLUGIN, ATTRIBUTE_NAMESPACE ); Map<String, String> REST_RESOURCE_ACTION_TO_HTTP_METHOD_MAP = CollectionUtils.<String, String>newMap( "create", "GET", "save", "POST", "show", "GET", "index", "GET", "edit", "GET", "update", "PUT", "patch", "PATCH", "delete", "DELETE" ); Map<String, String> REST_RESOURCE_HTTP_METHOD_TO_ACTION_MAP = CollectionUtils.<String, String>newMap( "GET_ID", "show", "GET", "index", "POST", "save", "DELETE", "delete", "PUT", "update", "PATCH", "patch" ); /** * Generates a link to a static resource for the given named parameters. * * Possible named parameters include: * * <ul> * <li>base - The base path of the URL, typically an absolute server path</li> * <li>contextPath - The context path to link to, defaults to the servlet context path</li> * <li>dir - The directory to link to</li> * <li>file - The file to link to (relative to the directory if specified)</li> * <li>plugin - The plugin that provides the resource</li> * <li>absolute - Whether the link should be absolute or not</li> * </ul> * * @param params The named parameters * @return The link to the static resource */ String resource(@SuppressWarnings("rawtypes") Map params); /** * Generates a link to a controller, action or URI for the given named parameters. * * Possible named parameters include: * * <ul> * <li>resource - If linking to a REST resource, the name of the resource or resource path to link to. Either 'resource' or 'controller' should be specified, but not both</li> * <li>controller - The name of the controller to use in the link, if not specified the current controller will be linked</li> * <li>action - The name of the action to use in the link, if not specified the default action will be linked</li> * <li>uri - relative URI</li> * <li>url - A map containing the action,controller,id etc.</li> * <li>base - Sets the prefix to be added to the link target address, typically an absolute server URL. This overrides the behaviour of the absolute property, if both are specified.</li> * <li>absolute - If set to "true" will prefix the link target address with the value of the grails.serverURL property from Config, or http://localhost:<port> if no value in Config and not running in production.</li> * <li>contextPath - The context path to link to, defaults to the servlet context path</li> * <li>id - The id to use in the link</li> * <li>fragment - The link fragment (often called anchor tag) to use</li> * <li>params - A map containing URL query parameters</li> * <li>mapping - The named URL mapping to use to rewrite the link</li> * <li>event - Webflow _eventId parameter</li> * </ul> * @param params The named parameters * @return The generator link */ String link(@SuppressWarnings("rawtypes") Map params); /** * Generates a link to a controller, action or URI for the given named parameters. * * Possible named parameters include: * * <ul> * <li>resource - If linking to a REST resource, the name of the resource or resource path to link to. Either 'resource' or 'controller' should be specified, but not both</li> * <li>controller - The name of the controller to use in the link, if not specified the current controller will be linked</li> * <li>action - The name of the action to use in the link, if not specified the default action will be linked</li> * <li>uri - relative URI</li> * <li>url - A map containing the action,controller,id etc.</li> * <li>base - Sets the prefix to be added to the link target address, typically an absolute server URL. This overrides the behaviour of the absolute property, if both are specified.</li> * <li>absolute - If set to "true" will prefix the link target address with the value of the grails.serverURL property from Config, or http://localhost:<port> if no value in Config and not running in production.</li> * <li>id - The id to use in the link</li> * <li>fragment - The link fragment (often called anchor tag) to use</li> * <li>params - A map containing URL query parameters</li> * <li>mapping - The named URL mapping to use to rewrite the link</li> * <li>event - Webflow _eventId parameter</li> * </ul> * @param params The named parameters * @param encoding The character encoding to use * @return The generator link */ String link(@SuppressWarnings("rawtypes") Map params, String encoding); /** * Obtains the context path from which this link generator is operating. * * @return The base context path */ String getContextPath(); /** * The base URL of the server used for creating absolute links. * * @return The base URL of the server */ String getServerBaseURL(); }