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;
+ }
+ }
+ }
}
}