001 package org.apache.myfaces.tobago.portlet;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one or more
005 * contributor license agreements. See the NOTICE file distributed with
006 * this work for additional information regarding copyright ownership.
007 * The ASF licenses this file to You under the Apache License, Version 2.0
008 * (the "License"); you may not use this file except in compliance with
009 * the License. You may obtain a copy of the License at
010 *
011 * http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020 import javax.faces.context.FacesContext;
021 import javax.portlet.ActionRequest;
022 import javax.portlet.PortletContext;
023 import javax.portlet.PortletRequest;
024 import javax.portlet.PortletURL;
025 import javax.portlet.RenderResponse;
026 import java.io.UnsupportedEncodingException;
027
028
029 /**
030 * Static utility class for portlet-related operations.
031 */
032 public final class PortletUtils {
033
034 private static final boolean PORTLET_API_AVAILABLE = portletApiAvailable();
035
036 /**
037 * This flag is imbedded in the request.
038 * It signifies that the request is coming from a portlet.
039 */
040 // public static final String PORTLET_REQUEST = PortletUtils.class.getName() + ".PORTLET_REQUEST";
041 private static final String VIEW_ID = PortletUtils.class.getName() + ".VIEW_ID";
042
043 private static boolean portletApiAvailable() {
044 try {
045 return PortletRequest.class != null; // never false
046 } catch (NoClassDefFoundError e) {
047 return false;
048 }
049 }
050
051 private PortletUtils() {
052 // avoid instantiation
053 }
054
055 /**
056 * Determine if we are processing a portlet RenderResponse.
057 *
058 * @param facesContext The current FacesContext.
059 * @return <code>true</code> if we are processing a RenderResponse,
060 * <code>false</code> otherwise.
061 */
062 public static boolean isRenderResponse(FacesContext facesContext) {
063 return PORTLET_API_AVAILABLE && facesContext.getExternalContext().getResponse() instanceof RenderResponse;
064 }
065
066 /**
067 * Determine if we are running as a portlet.
068 *
069 * @param facesContext The current FacesContext.
070 * @return <code>true</code> if we are running as a portlet,
071 * <code>false</code> otherwise.
072 */
073 // public static boolean isPortletRequest(FacesContext facesContext) {
074 // return facesContext.getExternalContext().getSessionMap().get(PORTLET_REQUEST) != null;
075 // }
076 public static boolean isPortletRequest(FacesContext facesContext) {
077 return PORTLET_API_AVAILABLE && facesContext.getExternalContext().getContext() instanceof PortletContext;
078 }
079
080 public static String getViewId(FacesContext facesContext) {
081 PortletRequest request = (PortletRequest) facesContext.getExternalContext().getRequest();
082 return request.getParameter(PortletUtils.VIEW_ID);
083 }
084
085 /**
086 * @return The action url.
087 */
088 public static String setViewIdForUrl(FacesContext facesContext, String viewId) {
089 RenderResponse response = (RenderResponse) facesContext.getExternalContext().getResponse();
090 PortletURL url = response.createActionURL();
091 url.setParameter(VIEW_ID, viewId);
092 return url.toString();
093 }
094
095 public static void ensureEncoding(FacesContext facesContext) throws UnsupportedEncodingException {
096 ActionRequest request = (ActionRequest) facesContext.getExternalContext().getRequest();
097 if (request.getCharacterEncoding() == null) {
098 request.setCharacterEncoding("UTF-8");
099 }
100 }
101 }