/* * (C) Copyright 2006-2007 Nuxeo SAS (http://nuxeo.com/) and contributors. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser General Public License * (LGPL) version 2.1 which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl.html * * 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. * * Contributors: * Nuxeo - initial API and implementation * * $Id: URLPolicyService.java 28924 2008-01-10 14:04:05Z sfermigier $ */ package org.nuxeo.ecm.platform.ui.web.rest.api; import javax.faces.context.FacesContext; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.nuxeo.ecm.platform.ui.web.auth.NXAuthConstants; import org.nuxeo.ecm.platform.ui.web.rest.StaticNavigationHandler; import org.nuxeo.ecm.platform.ui.web.rest.descriptors.URLPatternDescriptor; import org.nuxeo.ecm.platform.url.api.DocumentView; import org.nuxeo.ecm.platform.url.api.DocumentViewCodecManager; /** * Service used on the web layer to handle navigation using meaningful URLs. * <p> * It handles a document context description, and also performs JSF model * related operations. * <p> * It holds pattern descriptors used to interact with the * {@link DocumentViewCodecManager}. * * @author <a href="mailto:at@nuxeo.com">Anahide Tchertchian</a> */ public interface URLPolicyService { String POST_OUTCOME_REQUEST_KEY = "PostOutcome"; String DOCUMENT_VIEW_REQUEST_KEY = "DocumentView"; String DISABLE_ACTION_BINDING_KEY = "DisableActionBinding"; /** * @deprecated: use {@link NXAuthConstants#DISABLE_REDIRECT_REQUEST_KEY} * instead */ @Deprecated String DISABLE_REDIRECT_REQUEST_KEY = "nuxeo.disable.redirect.wrapper"; String FORCE_URL_ENCODING_REQUEST_KEY = "nuxeo.force.url.encoding"; /** * Returns true if request is a GET request and filter preprocessing is * turned on. */ boolean isCandidateForDecoding(HttpServletRequest httpRequest); /** * Returns true if request is a POST request and filter redirection is * turned on. */ boolean isCandidateForEncoding(HttpServletRequest httpRequest); /** * Adds document view to the request for later retrieval. * * @param request the current request. * @param docView to save */ void setDocumentViewInRequest(HttpServletRequest request, DocumentView docView); /** * Builds the document view from request information. * <p> * Delegates call to a document view codec found thanks to the default URL * pattern descriptor. */ DocumentView getDocumentViewFromRequest(HttpServletRequest request); /** * Builds the document view from request information. * <p> * Delegates call to a document view codec found thanks given pattern name. */ DocumentView getDocumentViewFromRequest(String pattern, HttpServletRequest request); /** * Returns a URL given a document view. * <p> * Delegates call to a document view codec found thanks to the default URL * pattern descriptor. */ String getUrlFromDocumentView(DocumentView docView, String baseUrl); /** * Returns a URL given a document view. * <p> * Delegates call to a document view codec found thanks given pattern name. */ String getUrlFromDocumentView(String pattern, DocumentView docView, String baseUrl); /** * Extracts parameters from request attributes. * <p> * Apply them to the model using EL value bindings described on URL pattern * descriptors. * <p> * We look for binding values to set on the request attribute and on the * document view parameters. */ void applyRequestParameters(FacesContext facesContext); /** * Appends parameters to request so that the model can be restored after * request. * <p> * Extract them using EL value bindings described on URL pattern * descriptors. * <p> * If the document view is not null, values are set on its parameters. If * the document view is null, values are set on the request parameters. */ void appendParametersToRequest(FacesContext facesContext); /** * Performs redirection action. * <p> * Extract it using an EL action binding described on URL pattern * descriptors. * <p> * The action binding is called using given document view as parameter. If * a sub URI is found, do nothing (may be an invalid resource URL). */ String navigate(FacesContext context); // registry of pattern descriptors /** * Returns the default pattern descriptor name */ String getDefaultPatternName(); /** * Returns true if the service holds a pattern descriptor with given name * * @since 5.5 */ boolean hasPattern(String name); void addPatternDescriptor(URLPatternDescriptor pattern); void removePatternDescriptor(URLPatternDescriptor pattern); void clear(); /** * Initializes the view id manager {@link StaticNavigationHandler} using * the given servlet context. * * @since 5.5 * @since 6.0, passes the request and response too */ void initViewIdManager(ServletContext context, HttpServletRequest request, HttpServletResponse response); /** * Returns the view id given an outcome, to dispatch to the right view * given an outcome. * <p> * For instance, will return "/view_documents.xhtml" given * "view_documents". * * @since 5.5 */ String getViewIdFromOutcome(String outcome, HttpServletRequest httpRequest); /** * Returns an outcome given a view id, to fill a document view when parsing * a standard JSF URL. * <p> * For instance, will return "view_documents" given "/view_documents.xhtml" * or "/view_documents.faces". * * @since 5.5 */ String getOutcomeFromViewId(String viewId, HttpServletRequest httpRequest); /** * Returns an outcome given a url, to fill a document view when parsing a * standard JSF URL. * <p> * It parses the given url to extract the outcome, and then calls * {@link #getOutcomeFromViewId(String, HttpServletRequest)} * * @since 5.5 */ String getOutcomeFromUrl(String url, HttpServletRequest httpRequest); /** * Flushes the URLPolicyService cache, to be called when hot reload is * performed for instance. * * @since 5.5 */ void flushCache(); }