You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2013/10/22 22:13:09 UTC

svn commit: r1534764 - in /myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago: internal/util/ResponseUtils.java util/ApplyRequestValuesCallback.java

Author: lofwyr
Date: Tue Oct 22 20:13:09 2013
New Revision: 1534764

URL: http://svn.apache.org/r1534764
Log:
TOBAGO-633: Portlet support
 - working on portlet support

Modified:
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/ResponseUtils.java
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ApplyRequestValuesCallback.java

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/ResponseUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/ResponseUtils.java?rev=1534764&r1=1534763&r2=1534764&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/ResponseUtils.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/ResponseUtils.java Tue Oct 22 20:13:09 2013
@@ -22,11 +22,12 @@ package org.apache.myfaces.tobago.intern
 import org.apache.myfaces.tobago.context.ClientProperties;
 import org.apache.myfaces.tobago.context.UserAgent;
 import org.apache.myfaces.tobago.internal.config.ContentSecurityPolicy;
+import org.apache.myfaces.tobago.portlet.PortletUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
+import javax.portlet.MimeResponse;
 import javax.servlet.http.HttpServletResponse;
 
 public class ResponseUtils {
@@ -38,11 +39,11 @@ public class ResponseUtils {
   }
 
   public static void ensureNoCacheHeader(FacesContext facesContext) {
-    // TODO PortletRequest
-    ExternalContext externalContext = facesContext.getExternalContext();
-    if (externalContext.getResponse() instanceof HttpServletResponse) {
-      HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
-      ensureNoCacheHeader(response);
+    Object response = facesContext.getExternalContext().getResponse();
+    if (response instanceof HttpServletResponse) {
+      ensureNoCacheHeader((HttpServletResponse)response);
+    } else if (PortletUtils.isPortletApiAvailable() && response instanceof MimeResponse) {
+      ensureNoCacheHeader((MimeResponse)response);
     }
   }
 
@@ -53,11 +54,17 @@ public class ResponseUtils {
     response.setDateHeader("max-age", 0);
   }
 
+  public static void ensureNoCacheHeader(MimeResponse response) {
+    // TODO validate this
+    response.getCacheControl().setExpirationTime(0);
+  }
+
   public static void ensureContentTypeHeader(FacesContext facesContext, String contentType) {
-    // TODO PortletRequest
-    if (facesContext.getExternalContext().getResponse() instanceof HttpServletResponse) {
-      HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
-      ensureContentTypeHeader(response, contentType);
+    final Object response = facesContext.getExternalContext().getResponse();
+    if (response instanceof HttpServletResponse) {
+      ensureContentTypeHeader((HttpServletResponse) response, contentType);
+    } else if (PortletUtils.isPortletApiAvailable() && response instanceof MimeResponse) {
+      ensureContentTypeHeader((MimeResponse) response, contentType);
     }
   }
 
@@ -65,7 +72,7 @@ public class ResponseUtils {
     if (!response.containsHeader("Content-Type")) {
       response.setContentType(contentType);
     } else {
-      String responseContentType = response.getContentType();
+      final String responseContentType = response.getContentType();
       if (!StringUtils.equalsIgnoreCaseAndWhitespace(responseContentType, contentType)) {
         response.setContentType(contentType);
         if (LOG.isDebugEnabled()) {
@@ -76,10 +83,22 @@ public class ResponseUtils {
     }
   }
 
+  public static void ensureContentTypeHeader(MimeResponse response, String contentType) {
+    final String responseContentType = response.getContentType();
+    if (!StringUtils.equalsIgnoreCaseAndWhitespace(responseContentType, contentType)) {
+      response.setContentType(contentType);
+      if (LOG.isDebugEnabled()) {
+        LOG.debug("Response already contains Header Content-Type '" + responseContentType
+            + "'. Overwriting with '" + contentType + "'");
+      }
+    }
+  }
+
   public static void ensureContentSecurityPolicyHeader(
       FacesContext facesContext, ContentSecurityPolicy contentSecurityPolicy) {
-    // TODO PortletRequest
-    if (facesContext.getExternalContext().getResponse() instanceof HttpServletResponse) {
+    final Object response = facesContext.getExternalContext().getResponse();
+    if (response instanceof HttpServletResponse) {
+      final HttpServletResponse servletResponse = (HttpServletResponse) response;
       final UserAgent userAgent = ClientProperties.getInstance(facesContext).getUserAgent();
       final String[] cspHeaders;
       switch (contentSecurityPolicy.getMode()) {
@@ -102,9 +121,11 @@ public class ResponseUtils {
       }
       String value = builder.toString();
       for (String cspHeader : cspHeaders) {
-        final HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
-        response.setHeader(cspHeader, value);
+        servletResponse.setHeader(cspHeader, value);
       }
+    } else if (PortletUtils.isPortletApiAvailable() && response instanceof MimeResponse) {
+     // TODO Portlet
+      LOG.warn("CSP not implemented for Portlet!");
     }
   }
 }

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ApplyRequestValuesCallback.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ApplyRequestValuesCallback.java?rev=1534764&r1=1534763&r2=1534764&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ApplyRequestValuesCallback.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ApplyRequestValuesCallback.java Tue Oct 22 20:13:09 2013
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.event.PhaseId;
+import javax.portlet.PortletResponse;
 import javax.servlet.http.HttpServletResponse;
 
 public class ApplyRequestValuesCallback implements TobagoCallback {
@@ -46,9 +47,11 @@ public class ApplyRequestValuesCallback 
         if (immediate != null && immediate) {
           Boolean update = (Boolean) reload.getAttributes().get(Attributes.UPDATE);
           if (update != null && !update) {
-            if (context.getExternalContext().getResponse() instanceof HttpServletResponse) {
-              ((HttpServletResponse) context.getExternalContext().getResponse())
-                  .setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+            final Object response = context.getExternalContext().getResponse();
+            if (response instanceof HttpServletResponse) {
+              ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+            } else if (response instanceof PortletResponse) {
+              // TBD: Portlet: what is to do here?
             }
             context.responseComplete();
             return;