You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by at...@apache.org on 2007/09/03 15:35:26 UTC

svn commit: r572333 - /wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java

Author: ate
Date: Mon Sep  3 06:35:25 2007
New Revision: 572333

URL: http://svn.apache.org/viewvc?rev=572333&view=rev
Log:
WICKET-650: New Wicket Portlet support: use a RequestContext for abstracted url generation,  writing header response and namespacing
See: https://issues.apache.org/jira/browse/WICKET-650 and https://issues.apache.org/jira/browse/WICKET-660 
- Bootstrapping the portlet-support in WicketFilter: for this only internal and transparent changes are needed.
- As the portlet-support needs to be optional, runtime dependency on portlet-support specific api's (portlet-api, portal-bridges-common) is not loaded
  unless a Portlet Context is dynamically discovered. 

Modified:
    wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java

Modified: wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java?rev=572333&r1=572332&r2=572333&view=diff
==============================================================================
--- wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java (original)
+++ wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java Mon Sep  3 06:35:25 2007
@@ -33,12 +33,15 @@
 
 import org.apache.wicket.AbortException;
 import org.apache.wicket.Application;
+import org.apache.wicket.RequestContext;
 import org.apache.wicket.RequestCycle;
 import org.apache.wicket.Resource;
 import org.apache.wicket.Session;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.parser.XmlPullParser;
 import org.apache.wicket.markup.parser.XmlTag;
+import org.apache.wicket.protocol.http.portlet.FilterRequestContext;
+import org.apache.wicket.protocol.http.portlet.WicketFilterPortletContext;
 import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy;
 import org.apache.wicket.session.ISessionStore;
 import org.apache.wicket.settings.IRequestCycleSettings;
@@ -94,6 +97,12 @@
 
 	private boolean servletMode = false;
 
+	/* init marker if running in a portlet container context */
+	private static Boolean portletContextAvailable;
+	
+	/* Delegate for handling Portlet specific filtering. Not instantiated if not running in a portlet container context */
+	private static WicketFilterPortletContext filterPortletContext;
+	
 	/**
 	 * Servlet cleanup.
 	 */
@@ -113,12 +122,26 @@
 	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
 			throws IOException, ServletException
 	{
-		HttpServletRequest httpServletRequest = (HttpServletRequest)request;
+		HttpServletRequest httpServletRequest;
+		HttpServletResponse httpServletResponse;
+		
+        if (filterPortletContext != null)
+        {
+        	FilterRequestContext filterRequestContext = new FilterRequestContext((HttpServletRequest)request,(HttpServletResponse)response);
+        	filterPortletContext.setupFilter(getFilterConfig(), filterRequestContext, getFilterPath((HttpServletRequest)request));
+        	httpServletRequest = filterRequestContext.getRequest();
+        	httpServletResponse = filterRequestContext.getResponse();
+        }
+        else
+        {
+    		httpServletRequest = (HttpServletRequest)request;
+			httpServletResponse = (HttpServletResponse)response;
+        }
+        
 		String relativePath = getRelativePath(httpServletRequest);
 
 		if (isWicketRequest(relativePath))
 		{
-			HttpServletResponse httpServletResponse = (HttpServletResponse)response;
 			long lastModified = getLastModified(httpServletRequest);
 			if (lastModified == -1)
 			{
@@ -250,6 +273,8 @@
 			response.setCharacterEncoding(webApplication.getRequestCycleSettings()
 					.getResponseRequestEncoding());
 
+            createRequestContext(request, response);
+            
 			try
 			{
 				// Create request cycle
@@ -424,6 +449,24 @@
 
 			// Give the application the option to log that it is started
 			this.webApplication.logStarted();
+			
+	        if ( portletContextAvailable == null )
+	        {
+	        	try
+				{
+					Class portletClass = Class.forName("javax.portlet.PortletContext");
+					portletContextAvailable = Boolean.TRUE;
+					filterPortletContext = new WicketFilterPortletContext();
+				}
+				catch (ClassNotFoundException e)
+				{
+					portletContextAvailable = Boolean.FALSE;
+				}
+	        }
+	        if (filterPortletContext != null)
+	        {
+	        	filterPortletContext.initFilter(filterConfig, this.webApplication);
+	        }
 		}
 		finally
 		{
@@ -435,6 +478,14 @@
 		}
 	}
 
+    protected void createRequestContext(WebRequest request, WebResponse response)
+    {
+        if (filterPortletContext == null || !filterPortletContext.createPortletRequestContext(request, response))
+        {
+        	new RequestContext();
+        }
+    }
+    
 	private String getFilterPath(String filterName, InputStream is) throws ServletException
 	{
 		String prefix = servletMode ? "servlet" : "filter";