/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.deltaspike.jsf.spi.scope.window; import java.util.Map; import javax.faces.context.FacesContext; /** * <p>API to interact with the window/browser tab handling. * This originally got implemented in Apache MyFaces CODI * which was the basis for the respective feature in JSF-2.2. * We now orientate us a bit on the JSF-2.2 API for making it * easier to provide this feature for JSF-2.0, JSF-2.1 and also * JSF-2.2 JSF implementations.</p> * * <p>Please not that in JSF-2.2 a <code>javax.faces.lifecycle.ClientWindow</code> * instance gets created for each and every request, but in DeltaSpike our * ClientWindow instances are most likely @ApplicationScoped. * </p> */ public interface ClientWindow { /** * Extract the windowId for the current request. * This method is intended to get executed at the start of the JSF lifecycle. * We also need to take care about JSF-2.2 ClientWindow in the future. * Depending on the {@link ClientWindowConfig.ClientWindowRenderMode} and * after consulting {@link ClientWindowConfig} we will first send an * intermediate page if the request is an initial GET request. * * @param facesContext for the request * @return the extracted WindowId of the Request, or <code>null</code> if there is no window assigned. */ String getWindowId(FacesContext facesContext); /** * Can be called to disable the window-id for an URL. * Don't forget to call {@link #enableClientWindowRenderMode(javax.faces.context.FacesContext)} * after rendering the markup for the current component, if {@link #isClientWindowRenderModeEnabled} * returned <code>true</code> before calling this method. */ void disableClientWindowRenderMode(FacesContext facesContext); /** * Can be used to reset window-id rendering for a specific component. */ void enableClientWindowRenderMode(FacesContext facesContext); /** * @return true if the window-id should be appended during the rendering-process, false otherwise */ boolean isClientWindowRenderModeEnabled(FacesContext facesContext); /** * @return meta-data for the current window which should get added to URLs, null otherwise */ Map<String, String> getQueryURLParameters(FacesContext facesContext); /** * @return true if the implementation possible sends an initial redirect. */ boolean isInitialRedirectSupported(FacesContext facesContext); /** * @return The new redirect url. */ String interceptRedirect(FacesContext facesContext, String url); }