001    package org.apache.myfaces.tobago.util;
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 org.apache.commons.logging.Log;
021    import org.apache.commons.logging.LogFactory;
022    
023    import javax.faces.context.ExternalContext;
024    import javax.faces.context.FacesContext;
025    import javax.servlet.http.HttpServletResponse;
026    
027    /*
028     * Date: Oct 21, 2006
029     * Time: 10:39:25 AM
030     */
031    public class ResponseUtils {
032    
033      private static final Log LOG = LogFactory.getLog(ResponseUtils.class);
034    
035      @Deprecated
036      public static void ensureNoCacheHeader(ExternalContext externalContext) {
037        FacesContext facesContext = FacesContext.getCurrentInstance();
038        if (facesContext.getExternalContext() != externalContext) {
039          throw new RuntimeException("Unexpected behaviour.");
040        }
041        ensureNoCacheHeader(facesContext);
042      }
043    
044      public static void ensureNoCacheHeader(FacesContext facesContext) {
045        // TODO PortletRequest
046        ExternalContext externalContext = facesContext.getExternalContext();
047        if (externalContext.getResponse() instanceof HttpServletResponse) {
048          HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
049          response.setHeader("Cache-Control", "no-cache,no-store,max-age=0,must-revalidate");
050          response.setHeader("Pragma", "no-cache");
051          response.setDateHeader("Expires", 0);
052          response.setDateHeader("max-age", 0);
053        }
054      }
055    
056      public static void ensureContentTypeHeader(FacesContext facesContext, String contentType) {
057        // TODO PortletRequest
058        if (facesContext.getExternalContext().getResponse() instanceof HttpServletResponse) {
059          HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
060          if (!response.containsHeader("Content-Type")) {
061            response.setContentType(contentType);
062          } else {
063            try {
064              String responseContentType = response.getContentType();
065              if (!responseContentType.equalsIgnoreCase(contentType)) {
066                response.setContentType(contentType);
067                if (LOG.isInfoEnabled()) {
068                  LOG.info("Reponse already contains Header Content-Type '" + responseContentType
069                      + "'. Setting Content-Type to '" + contentType + "'");
070                }
071              }
072            } catch (AbstractMethodError e) {
073              LOG.warn("The method ServletResponse.getContentType() is not available before Servlet 2.4");
074            }
075          }
076        }
077      }
078    }