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