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    public class ResponseUtils {
028    
029      private static final Log LOG = LogFactory.getLog(ResponseUtils.class);
030    
031      @Deprecated
032      public static void ensureNoCacheHeader(ExternalContext externalContext) {
033        FacesContext facesContext = FacesContext.getCurrentInstance();
034        if (facesContext.getExternalContext() != externalContext) {
035          throw new RuntimeException("Unexpected behaviour.");
036        }
037        ensureNoCacheHeader(facesContext);
038      }
039    
040      public static void ensureNoCacheHeader(FacesContext facesContext) {
041        // TODO PortletRequest
042        ExternalContext externalContext = facesContext.getExternalContext();
043        if (externalContext.getResponse() instanceof HttpServletResponse) {
044          HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
045          response.setHeader("Cache-Control", "no-cache,no-store,max-age=0,must-revalidate");
046          response.setHeader("Pragma", "no-cache");
047          response.setDateHeader("Expires", 0);
048          response.setDateHeader("max-age", 0);
049        }
050      }
051    
052      public static void ensureContentTypeHeader(FacesContext facesContext, String contentType) {
053        // TODO PortletRequest
054        if (facesContext.getExternalContext().getResponse() instanceof HttpServletResponse) {
055          HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
056          if (!response.containsHeader("Content-Type")) {
057            response.setContentType(contentType);
058          } else {
059            try {
060              String responseContentType = response.getContentType();
061              if (!responseContentType.equalsIgnoreCase(contentType)) {
062                response.setContentType(contentType);
063                if (LOG.isInfoEnabled()) {
064                  LOG.info("Reponse already contains Header Content-Type '" + responseContentType
065                      + "'. Setting Content-Type to '" + contentType + "'");
066                }
067              }
068            } catch (Error e) {
069              LOG.warn("The method ServletResponse.getContentType() is not available before Servlet 2.4");
070            }
071          }
072        }
073      }
074    }