You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by at...@apache.org on 2009/03/18 23:50:17 UTC

svn commit: r755767 - in /portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl: RenderResponseImpl.java ResourceResponseImpl.java

Author: ate
Date: Wed Mar 18 22:50:17 2009
New Revision: 755767

URL: http://svn.apache.org/viewvc?rev=755767&view=rev
Log:
Adding a few missing pieces on Render/Resourse Response characterEncoding handling

Modified:
    portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderResponseImpl.java
    portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceResponseImpl.java

Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderResponseImpl.java?rev=755767&r1=755766&r2=755767&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderResponseImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderResponseImpl.java Wed Mar 18 22:50:17 2009
@@ -89,7 +89,7 @@
         {
             contentType = contentType.substring(0, index);
         }
-        contentType.trim();
+        contentType = contentType.trim();
         if (!isValidContentType(contentType))
         {
             throw new IllegalArgumentException("Specified content type '" + contentType + "' is not supported.");

Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceResponseImpl.java?rev=755767&r1=755766&r2=755767&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceResponseImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceResponseImpl.java Wed Mar 18 22:50:17 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.pluto.container.impl;
 
+import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.Locale;
 
 import javax.portlet.PortletURL;
@@ -27,6 +29,10 @@
 
 public class ResourceResponseImpl extends MimeResponseImpl implements ResourceResponse
 {
+    private static final String DEFAULT_CONTAINER_CHARSET = "UTF-8";
+    
+    private boolean canSetLocaleEncoding = true;
+    private String charset;
     private String requestCacheLevel;
     private PortletResourceResponseContext responseContext;
     
@@ -37,6 +43,7 @@
         this.requestCacheLevel = requestCacheLevel == null ? ResourceURL.PAGE : requestCacheLevel;
     }
 	
+    @Override
     public PortletURL createActionURL()
     {
         if (ResourceURL.PAGE.equals(requestCacheLevel))
@@ -46,6 +53,7 @@
         throw new IllegalStateException("Not allowed to create an ActionURL with current request cacheability level "+requestCacheLevel);
     }
     
+    @Override
     public PortletURL createRenderURL()
     {
         if (ResourceURL.PAGE.equals(requestCacheLevel))
@@ -55,14 +63,56 @@
         throw new IllegalStateException("Not allowed to create a RenderURL with current request cacheability level "+requestCacheLevel);
     }
 
+    @Override
     public ResourceURL createResourceURL()
     {
         return new PortletURLImpl(responseContext, requestCacheLevel);
     }
     
-	public void setCharacterEncoding(String charset)
+    @Override
+    public PrintWriter getWriter()
+    throws IllegalStateException, IOException
+    {
+        if (charset == null)
+        {
+            // enforce the default Container encoding == UTF-8 if encoding hasn't been set yet.
+            setCharacterEncoding(DEFAULT_CONTAINER_CHARSET);
+        }
+        return super.getWriter();
+    }
+    
+    @Override
+    public String getCharacterEncoding()
+    {
+        return charset != null ? charset : DEFAULT_CONTAINER_CHARSET;
+    }
+    
+	public void setCharacterEncoding(String encoding)
+	{
+	    if (encoding != null)
+	    {
+	        responseContext.setCharacterEncoding(charset);
+	        canSetLocaleEncoding = false;
+	        this.charset = encoding;
+	    }
+	}
+	
+	@Override
+	public void setContentType(String contentType)
 	{
-	    responseContext.setCharacterEncoding(charset);
+	    if (contentType != null)
+	    {
+	        int index = contentType.indexOf(';');
+	        if (index != -1 && index < contentType.length()-1) 
+	        {
+	            String encoding = contentType.substring(index+1).trim();
+	            if (encoding.length() > 0)
+	            {
+	                setCharacterEncoding(encoding);
+	            }
+	        }
+	        super.setContentType(contentType);
+	    }
 	}
 
 	public void setContentLength(int len)
@@ -72,6 +122,19 @@
 
 	public void setLocale(Locale locale)
 	{
-	    responseContext.setLocale(locale);
+	    if (locale != null)
+	    {
+            responseContext.setLocale(locale);
+	        if (canSetLocaleEncoding)
+	        {
+	            String encoding = getPortletWindow().getPortletEntity().getPortletDefinition().getApplication().getLocaleEncodingMappings().get(locale);
+	            if (encoding != null)
+	            {
+	                setCharacterEncoding(encoding);
+	                // allow repeated setLocale usage for characterEncoding
+	                canSetLocaleEncoding = true;
+	            }
+	        }
+	    }
 	}
 }