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/06/14 19:17:44 UTC
svn commit: r547319 - in
/incubator/wicket/branches/wicket-1.3-portlet-support: ./ jdk-1.4/wicket/
jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/
Author: ate
Date: Thu Jun 14 10:17:42 2007
New Revision: 547319
URL: http://svn.apache.org/viewvc?view=rev&rev=547319
Log:
WICKET-656: New Wicket Portlet support: adding portlet support with a new WicketPortlet, WicketPortletFilter and support classes
See: https://issues.apache.org/jira/browse/WICKET-656
Added:
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/EmbeddedPortletHeaderResponse.java (with props)
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletActionServletResponseWrapper.java (with props)
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderContext.java (with props)
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderServletResponseWrapper.java (with props)
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletRequestWrapper.java (with props)
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletResponseWrapper.java (with props)
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortlet.java (with props)
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortletFilter.java (with props)
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketResponseState.java (with props)
Modified:
incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/pom.xml
incubator/wicket/branches/wicket-1.3-portlet-support/pom.xml
Modified: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/pom.xml
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/pom.xml?view=diff&rev=547319&r1=547318&r2=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/pom.xml (original)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/pom.xml Thu Jun 14 10:17:42 2007
@@ -39,6 +39,20 @@
component model backed by POJO data beans that can easily be
persisted using your favorite technology.
</description>
+ <dependencies>
+ <dependency>
+ <groupId>javax.portlet</groupId>
+ <artifactId>portlet-api</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.portals.bridges</groupId>
+ <artifactId>portals-bridges-common</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
<build>
<plugins>
<plugin>
Added: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/EmbeddedPortletHeaderResponse.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/EmbeddedPortletHeaderResponse.java?view=auto&rev=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/EmbeddedPortletHeaderResponse.java (added)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/EmbeddedPortletHeaderResponse.java Thu Jun 14 10:17:42 2007
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.protocol.http.portlet;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.wicket.RenderContext;
+import org.apache.wicket.Response;
+import org.apache.wicket.markup.html.internal.HeaderResponse;
+import org.apache.wicket.response.StringResponse;
+
+/**
+ * @author Ate Douma
+ */
+public class EmbeddedPortletHeaderResponse extends HeaderResponse
+{
+ private Response realResponse;
+ private StringResponse bufferedResponse;
+
+ public EmbeddedPortletHeaderResponse(Response realResponse)
+ {
+ this.realResponse = realResponse;
+ bufferedResponse = new StringResponse();
+ }
+
+ public void renderCSSReference(String url, String media)
+ {
+ if (!isClosed())
+ {
+ List token = Arrays.asList(new Object[] { "css", url, media });
+ if (wasRendered(token) == false)
+ {
+ getResponse().write("<script type=\"text/javascript\">");
+ getResponse().write("var elem=document.createElement(\"link\");");
+ getResponse().write("elem.setAttribute(\"rel\",\"stylesheet\");");
+ getResponse().write("elem.setAttribute(\"type\",\"text/css\");");
+ getResponse().write("elem.setAttribute(\"href\",\""+url+"\");");
+ if (media != null)
+ {
+ getResponse().write("elem.setAttribute(\"media\",\""+media+"\");");
+ }
+ getResponse().write("document.getElementsByTagName(\"head\")[0].appendChild(elem);");
+ getResponse().println("</script>");
+ markRendered(token);
+ }
+ }
+ }
+
+
+ /**
+ * @see org.apache.wicket.markup.html.internal.HeaderResponse#close()
+ */
+ public void close()
+ {
+ super.close();
+ // Automatically add <head> if necessary
+ CharSequence output = bufferedResponse.getBuffer();
+ if (output.length() > 0)
+ {
+ if (output.charAt(0) == '\r')
+ {
+ for (int i = 2; i < output.length(); i += 2)
+ {
+ char ch = output.charAt(i);
+ if (ch != '\r')
+ {
+ output = output.subSequence(i - 2, output.length());
+ break;
+ }
+ }
+ }
+ else if (output.charAt(0) == '\n')
+ {
+ for (int i = 1; i < output.length(); i++)
+ {
+ char ch = output.charAt(i);
+ if (ch != '\n')
+ {
+ output = output.subSequence(i - 1, output.length());
+ break;
+ }
+ }
+ }
+ }
+ if (output.length() > 0)
+ {
+ realResponse.write("<span id=\""+RenderContext.get().getNamespace()+"_embedded_head\">");
+ realResponse.write(output);
+ realResponse.write("</span>");
+ }
+ bufferedResponse.reset();
+ }
+
+ /**
+ * @see org.apache.wicket.markup.html.internal.HeaderResponse#getRealResponse()
+ */
+ protected Response getRealResponse()
+ {
+ return bufferedResponse;
+ }
+}
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/EmbeddedPortletHeaderResponse.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/EmbeddedPortletHeaderResponse.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletActionServletResponseWrapper.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletActionServletResponseWrapper.java?view=auto&rev=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletActionServletResponseWrapper.java (added)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletActionServletResponseWrapper.java Thu Jun 14 10:17:42 2007
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.protocol.http.portlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Locale;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+/**
+ * @author Ate Douma
+ */
+public class PortletActionServletResponseWrapper extends PortletServletResponseWrapper
+{
+
+ public PortletActionServletResponseWrapper(HttpServletResponse response, WicketResponseState responseState)
+ {
+ super(response, responseState);
+ }
+
+ public void addCookie(Cookie cookie)
+ {
+ }
+
+ public void addDateHeader(String s, long l)
+ {
+ }
+
+ public void addHeader(String s, String s1)
+ {
+ }
+
+ public void addIntHeader(String s, int i)
+ {
+ }
+
+ public String encodeRedirectUrl(String s)
+ {
+ return s;
+ }
+
+ public String encodeRedirectURL(String s)
+ {
+ return s;
+ }
+
+ public String encodeUrl(String s)
+ {
+ return s;
+ }
+
+ public String encodeURL(String s)
+ {
+ return s;
+ }
+
+ public void flushBuffer() throws IOException
+ {
+ }
+
+ public int getBufferSize()
+ {
+ return 0;
+ }
+
+ public ServletOutputStream getOutputStream() throws IOException
+ {
+ return null;
+ }
+
+ public PrintWriter getWriter() throws IOException
+ {
+ return null;
+ }
+
+ public boolean isCommitted()
+ {
+ return false;
+ }
+
+ public void reset()
+ {
+ }
+
+ public void resetBuffer()
+ {
+ }
+
+ public void setBufferSize(int i)
+ {
+ }
+
+ public void setCharacterEncoding(String charset)
+ {
+ }
+
+ public void setContentLength(int i)
+ {
+ }
+
+ public void setContentType(String s)
+ {
+ }
+
+ public void setDateHeader(String s, long l)
+ {
+ }
+
+ public void setHeader(String s, String s1)
+ {
+ }
+
+ public void setIntHeader(String s, int i)
+ {
+ }
+
+ public void setLocale(Locale locale)
+ {
+ }
+}
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletActionServletResponseWrapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletActionServletResponseWrapper.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderContext.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderContext.java?view=auto&rev=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderContext.java (added)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderContext.java Thu Jun 14 10:17:42 2007
@@ -0,0 +1,230 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.protocol.http.portlet;
+
+import java.util.HashMap;
+
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.PortletURL;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.portals.bridges.common.PortletResourceURLFactory;
+import org.apache.portals.bridges.util.PortletWindowUtils;
+import org.apache.portals.bridges.util.ServletPortletSessionProxy;
+import org.apache.wicket.RenderContext;
+import org.apache.wicket.RequestCycle;
+import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.protocol.http.WebRequest;
+
+/**
+ * @author Ate Douma
+ */
+public class PortletRenderContext extends RenderContext
+{
+ private final PortletConfig portletConfig;
+ private final RenderRequest renderRequest;
+ private final RenderResponse renderResponse;
+ private final PortletResourceURLFactory resourceURLFactory;
+ private final IHeaderResponse headerResponse;
+ private String portletWindowId;
+ private String[] lastEncodedUrl = new String[2];
+
+ private static final String SERVLET_RESOURCE_URL_PORTLET_WINDOW_ID_PREFIX = "/ps:";
+
+ public static HttpServletRequest getPortletServletRequest(ServletContext context, HttpServletRequest request, String filterPath)
+ {
+ String pathInfo = request.getRequestURI().substring(request.getContextPath().length()+filterPath.length());
+ if (pathInfo != null && pathInfo.startsWith(SERVLET_RESOURCE_URL_PORTLET_WINDOW_ID_PREFIX))
+ {
+ String portletWindowId = null;
+ int nextPath = pathInfo.indexOf('/',1);
+ if (nextPath > -1)
+ {
+ portletWindowId = pathInfo.substring(SERVLET_RESOURCE_URL_PORTLET_WINDOW_ID_PREFIX.length(),nextPath);
+ pathInfo = pathInfo.substring(nextPath);
+ }
+ else
+ {
+ portletWindowId = pathInfo.substring(SERVLET_RESOURCE_URL_PORTLET_WINDOW_ID_PREFIX.length());
+ pathInfo = null;
+ }
+ return new PortletServletRequestWrapper(context,request,ServletPortletSessionProxy.createProxy(request, portletWindowId), "/"+filterPath.substring(0,filterPath.length()-1), pathInfo);
+ }
+ return request;
+ }
+
+ public PortletRenderContext(final PortletConfig portletConfig, final RenderRequest renderRequest, final RenderResponse renderResponse, final PortletResourceURLFactory resourceURLFactory, final IHeaderResponse headerResponse)
+ {
+ super();
+ this.portletConfig = portletConfig;
+ this.renderRequest = renderRequest;
+ this.renderResponse = renderResponse;
+ this.resourceURLFactory = resourceURLFactory;
+ this.headerResponse = headerResponse;
+ }
+
+ public String getLastEncodedPath(String url)
+ {
+ if (url != null && lastEncodedUrl != null && url.equals(lastEncodedUrl[0]))
+ {
+ return lastEncodedUrl[1];
+ }
+ return null;
+ }
+
+ protected String saveLastEncodedUrl(String url, String path)
+ {
+ lastEncodedUrl[0] = url;
+ lastEncodedUrl[1] = path;
+ return url;
+ }
+
+ /**
+ * @see org.apache.wicket.RenderContext#encodeActionURL(java.lang.CharSequence)
+ */
+ public CharSequence encodeActionURL(CharSequence path)
+ {
+ if ( path != null )
+ {
+ path = getQualifiedPath(path);
+ if (renderResponse != null)
+ {
+ PortletURL url = renderResponse.createActionURL();
+ url.setParameter(WicketPortlet.WICKET_URL_PORTLET_PARAMETER, path.toString());
+ path = saveLastEncodedUrl(url.toString(), path.toString());
+ }
+ }
+ return path;
+ }
+
+ /**
+ * @see org.apache.wicket.RenderContext#encodeMarkupId(java.lang.String)
+ */
+ public String encodeMarkupId(String markupId)
+ {
+ if ( markupId != null )
+ {
+ markupId = getNamespace() + "_" + markupId;
+ }
+ return markupId;
+ }
+
+ /**
+ * @see org.apache.wicket.RenderContext#encodeRenderURL(java.lang.CharSequence)
+ */
+ public CharSequence encodeRenderURL(CharSequence path)
+ {
+ if ( path != null )
+ {
+ path = getQualifiedPath(path);
+ if (renderResponse != null)
+ {
+ PortletURL url = renderResponse.createRenderURL();
+ url.setParameter(WicketPortlet.WICKET_URL_PORTLET_PARAMETER, path.toString());
+ path = saveLastEncodedUrl(url.toString(), path.toString());
+ path = url.toString();
+ }
+ }
+ return path;
+ }
+
+ /**
+ * @see org.apache.wicket.RenderContext#encodeResourceURL(java.lang.CharSequence)
+ */
+ public CharSequence encodeResourceURL(CharSequence path)
+ {
+ if ( path != null )
+ {
+ path = getQualifiedPath(path);
+ if (renderResponse != null)
+ {
+ try
+ {
+ HashMap parameters = new HashMap(1);
+ parameters.put(WicketPortlet.WICKET_URL_PORTLET_PARAMETER, new String[]{path.toString()});
+ parameters.put(WicketPortlet.PORTLET_RESOURCE_URL_PARAMETER, new String[]{"true"});
+ path = saveLastEncodedUrl(resourceURLFactory.createResourceURL(portletConfig, renderRequest, renderResponse, parameters), path.toString());
+ }
+ catch (PortletException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ return path;
+ }
+
+ /**
+ * @see org.apache.wicket.RenderContext#encodeSharedResourceURL(java.lang.CharSequence)
+ */
+ public CharSequence encodeSharedResourceURL(CharSequence path)
+ {
+ if ( path != null )
+ {
+ String url = (SERVLET_RESOURCE_URL_PORTLET_WINDOW_ID_PREFIX.substring(1) + getPortletWindowId() + "/" + path);
+ return saveLastEncodedUrl(url,url);
+ }
+ return null;
+ }
+
+ /**
+ * @see org.apache.wicket.RenderContext#getHeaderResponse()
+ */
+ public IHeaderResponse getHeaderResponse()
+ {
+ return headerResponse;
+ }
+
+ /**
+ * @see org.apache.wicket.RenderContext#getNamespace()
+ */
+ public CharSequence getNamespace()
+ {
+ return renderResponse != null ? renderResponse.getNamespace() : "";
+ }
+
+ /**
+ * @see org.apache.wicket.RenderContext#isEmbedded()
+ */
+ public boolean isEmbedded()
+ {
+ return true;
+ }
+
+ protected String getQualifiedPath(CharSequence path)
+ {
+ HttpServletRequest request = ((WebRequest)RequestCycle.get().getRequest()).getHttpServletRequest();
+ if (renderRequest == null)
+ {
+ return request.getContextPath() + request.getServletPath() + path;
+ }
+ return request.getServletPath() + path;
+ }
+
+ protected String getPortletWindowId()
+ {
+ if (portletWindowId == null)
+ {
+ portletWindowId = PortletWindowUtils.getPortletWindowId(renderRequest.getPortletSession());
+ }
+ return portletWindowId;
+ }
+}
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderContext.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderServletResponseWrapper.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderServletResponseWrapper.java?view=auto&rev=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderServletResponseWrapper.java (added)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderServletResponseWrapper.java Thu Jun 14 10:17:42 2007
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.protocol.http.portlet;
+
+import java.io.IOException;
+
+import javax.portlet.RenderResponse;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.wicket.RenderContext;
+
+/**
+ * @author Ate Douma
+ */
+public class PortletRenderServletResponseWrapper extends PortletServletResponseWrapper
+{
+ RenderResponse renderResponse;
+
+ public PortletRenderServletResponseWrapper(HttpServletResponse response, RenderResponse renderResponse, WicketResponseState responseState)
+ {
+ super(response, responseState);
+ this.renderResponse = renderResponse;
+ }
+
+ /**
+ * @see javax.servlet.ServletResponseWrapper#setContentType(java.lang.String)
+ */
+ public void setContentType(String arg0)
+ {
+ renderResponse.setContentType(arg0);
+ }
+
+ public void sendRedirect(String redirectLocation) throws IOException
+ {
+ RenderContext rc = RenderContext.get();
+ if (rc instanceof PortletRenderContext)
+ {
+ String wicketUrl = ((PortletRenderContext)rc).getLastEncodedPath(redirectLocation);
+ if (wicketUrl != null)
+ {
+ redirectLocation = wicketUrl;
+ }
+ }
+ super.sendRedirect(redirectLocation);
+ }
+}
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderServletResponseWrapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletRenderServletResponseWrapper.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletRequestWrapper.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletRequestWrapper.java?view=auto&rev=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletRequestWrapper.java (added)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletRequestWrapper.java Thu Jun 14 10:17:42 2007
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.protocol.http.portlet;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpSession;
+
+/**
+ * @author Ate Douma
+ */
+public class PortletServletRequestWrapper extends HttpServletRequestWrapper
+{
+ private ServletContext context;
+ private boolean included;
+ private boolean pathOverride;
+ private String servletPath;
+ private String pathInfo;
+ private String requestURI;
+ private HttpSession session;
+
+ public PortletServletRequestWrapper(ServletContext context, HttpServletRequest request, HttpSession proxiedSession)
+ {
+ super(request);
+ this.context = context;
+ session = proxiedSession;
+ if ( proxiedSession == null )
+ {
+ session = request.getSession(false);
+ }
+ this.included = request.getAttribute("javax.servlet.include.context_path") != null;
+ }
+
+ public PortletServletRequestWrapper(ServletContext context, HttpServletRequest request, HttpSession proxiedSession, String servletPath, String pathInfo)
+ {
+ this(context, request, proxiedSession);
+ this.servletPath = servletPath;
+ this.pathInfo = pathInfo;
+ this.requestURI = request.getContextPath()+servletPath+(pathInfo!=null?pathInfo:"");
+ this.pathOverride = true;
+ }
+
+ public String getPathInfo()
+ {
+ return pathOverride ? pathInfo : included ? (String) super.getAttribute("javax.servlet.include.path_info") : super.getPathInfo();
+ }
+
+ public String getContextPath()
+ {
+ return included ? (String) super.getAttribute("javax.servlet.include.context_path") : super.getContextPath();
+ }
+
+ public String getRequestURI()
+ {
+ return pathOverride ? requestURI : included ? (String) super.getAttribute("javax.servlet.include.request_uri") : super.getRequestURI();
+ }
+
+ public String getServletPath()
+ {
+ return pathOverride ? servletPath : included ? (String) super.getAttribute("javax.servlet.include.servlet_path") : super.getServletPath();
+ }
+
+ public String getQueryString()
+ {
+ return included ? (String) super.getAttribute("javax.servlet.include.query_string") : super.getQueryString();
+ }
+
+ public HttpSession getSession()
+ {
+ return getSession(true);
+ }
+
+ public HttpSession getSession(boolean create)
+ {
+ return session != null ? session : super.getSession(create);
+ }
+
+ public Object getAttribute(String name)
+ {
+ // TODO: check if these can possibly be set/handled
+ // nullifying these for now to prevent Wicket ServletWebRequest.getRelativePathPrefixToWicketHandler() going the wrong route
+ if ("javax.servlet.error.request_uri".equals(name) || "javax.servlet.forward.servlet_path".equals(name))
+ {
+ return null;
+ }
+ return super.getAttribute(name);
+ }
+}
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletRequestWrapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletRequestWrapper.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletResponseWrapper.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletResponseWrapper.java?view=auto&rev=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletResponseWrapper.java (added)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletResponseWrapper.java Thu Jun 14 10:17:42 2007
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.protocol.http.portlet;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+/**
+ * @author Ate Douma
+ */
+public class PortletServletResponseWrapper extends HttpServletResponseWrapper
+{
+ private WicketResponseState responseState;
+
+ public PortletServletResponseWrapper(HttpServletResponse response, WicketResponseState responseState)
+ {
+ super(response);
+ this.responseState = responseState;
+ }
+
+ /**
+ * @see javax.servlet.http.HttpServletResponseWrapper#sendError(int, java.lang.String)
+ */
+ public void sendError(int errorCode, String errorMessage) throws IOException
+ {
+ responseState.setErrorCode(errorCode);
+ responseState.setErrorMessage(errorMessage);
+ }
+
+ /**
+ * @see javax.servlet.http.HttpServletResponseWrapper#sendError(int)
+ */
+ public void sendError(int errorCode) throws IOException
+ {
+ responseState.setErrorCode(errorCode);
+ responseState.setErrorMessage(null);
+ }
+
+ /**
+ * @see javax.servlet.http.HttpServletResponseWrapper#sendRedirect(java.lang.String)
+ */
+ public void sendRedirect(String redirectLocation) throws IOException
+ {
+ responseState.setRedirectLocation(redirectLocation);
+ }
+
+ /**
+ * @see javax.servlet.http.HttpServletResponseWrapper#setStatus(int)
+ */
+ public void setStatus(int statusCode)
+ {
+ responseState.setStatusCode(statusCode);
+ }
+}
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletResponseWrapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/PortletServletResponseWrapper.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortlet.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortlet.java?view=auto&rev=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortlet.java (added)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortlet.java Thu Jun 14 10:17:42 2007
@@ -0,0 +1,296 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.protocol.http.portlet;
+
+import java.io.IOException;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.GenericPortlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.PortletResponse;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.portals.bridges.common.PortletResourceURLFactory;
+import org.apache.portals.bridges.common.ServletContextProvider;
+
+/**
+ * @author Ate Douma
+ */
+public class WicketPortlet extends GenericPortlet
+{
+ public static final String WICKET_URL_PORTLET_PARAMETER = "wicketUrl";
+ public static final String PORTLET_RESOURCE_URL_PARAMETER = "resourceUrl";
+ public static final String WICKET_FILTER_PATH_PARAM = "wicketFilterPath";
+ public static final String PARAM_SERVLET_CONTEXT_PROVIDER = "ServletContextProvider";
+ public static final String PARAM_PORTLET_RESOURCE_URL_FACTORY = "PortletResourceURLFactory";
+ public static final String ACTION_REQUEST = "ACTION";
+ public static final String VIEW_REQUEST = "VIEW";
+ public static final String RESOURCE_REQUEST = "RESOURCE";
+ public static final String CUSTOM_REQUEST = "CUSTOM";
+ public static final String EDIT_REQUEST = "EDIT";
+ public static final String HELP_REQUEST = "HELP";
+ public static final String REQUEST_TYPE_ATTR = WicketPortlet.class.getName() + "REQUEST_TYPE";
+ public static final String RESPONSE_STATE_ATTR = WicketResponseState.class.getName();
+ public static final String RESOURCE_URL_FACTORY_ATTR = PortletResourceURLFactory.class.getName();
+ public static final String PORTLET_RESOURCE_URL_ATTR = "resourceUrl";
+
+ private ServletContextProvider servletContextProvider;
+ private PortletResourceURLFactory resourceURLFactory;
+ private String wicketFilterPath;
+
+ public void init(PortletConfig config) throws PortletException
+ {
+ super.init(config);
+ String contextProviderClassName = getContextProviderClassNameParameter(config);
+ if (contextProviderClassName == null)
+ {
+ contextProviderClassName = config.getPortletContext().getInitParameter(
+ ServletContextProvider.class.getName());
+ }
+ if (contextProviderClassName == null)
+ {
+ throw new PortletException("Portlet " + config.getPortletName()
+ + " is incorrectly configured. Init parameter "
+ + PARAM_SERVLET_CONTEXT_PROVIDER + " not specified, nor context parameter "
+ + ServletContextProvider.class.getName() + ".");
+ }
+ try
+ {
+ Class clazz = Class.forName(contextProviderClassName);
+ servletContextProvider = (ServletContextProvider)clazz.newInstance();
+ }
+ catch (Exception e)
+ {
+ if (e instanceof PortletException)
+ {
+ throw (PortletException)e;
+ }
+ throw new PortletException("Initialization failure", e);
+ }
+
+ String resourceURLFactoryClassName = getPortletResourceURLFactoryClassNameParameter(config);
+ if (resourceURLFactoryClassName == null)
+ {
+ resourceURLFactoryClassName = config.getPortletContext().getInitParameter(
+ PortletResourceURLFactory.class.getName());
+ }
+ if (resourceURLFactoryClassName == null)
+ {
+ throw new PortletException("Portlet " + config.getPortletName()
+ + " is incorrectly configured. Init parameter "
+ + PARAM_PORTLET_RESOURCE_URL_FACTORY + " not specified, nor context parameter "
+ + PortletResourceURLFactory.class.getName() + ".");
+ }
+ try
+ {
+ Class clazz = Class.forName(resourceURLFactoryClassName);
+ resourceURLFactory = (PortletResourceURLFactory)clazz.newInstance();
+ }
+ catch (Exception e)
+ {
+ if (e instanceof PortletException)
+ {
+ throw (PortletException)e;
+ }
+ throw new PortletException("Initialization failure", e);
+ }
+
+ wicketFilterPath = config.getInitParameter(WICKET_FILTER_PATH_PARAM);
+ if (wicketFilterPath == null || wicketFilterPath.length() == 0)
+ {
+ wicketFilterPath = "/";
+ }
+ else
+ {
+ if (!wicketFilterPath.startsWith("/"))
+ {
+ wicketFilterPath = "/" + wicketFilterPath;
+ }
+ if (wicketFilterPath.endsWith("*"))
+ {
+ wicketFilterPath = wicketFilterPath.substring(0, wicketFilterPath.length() - 1);
+ }
+ if (!wicketFilterPath.endsWith("/"))
+ {
+ wicketFilterPath += "/";
+ }
+ }
+ }
+
+ public void processAction(ActionRequest request, ActionResponse response)
+ throws PortletException, IOException
+ {
+ processRequest(request, response, ACTION_REQUEST);
+ }
+
+ protected void doView(RenderRequest request, RenderResponse response) throws PortletException,
+ IOException
+ {
+ processRequest(request, response, VIEW_REQUEST);
+ }
+
+ public void destroy()
+ {
+ resourceURLFactory = null;
+ servletContextProvider = null;
+ super.destroy();
+ }
+
+ protected String getContextProviderClassNameParameter(PortletConfig config)
+ {
+ return config.getInitParameter(PARAM_SERVLET_CONTEXT_PROVIDER);
+ }
+
+ protected String getPortletResourceURLFactoryClassNameParameter(PortletConfig config)
+ {
+ return config.getInitParameter(PARAM_PORTLET_RESOURCE_URL_FACTORY);
+ }
+
+ protected ServletContextProvider getServletContextProvider()
+ {
+ return servletContextProvider;
+ }
+
+ protected ServletContext getServletContext(GenericPortlet portlet, PortletRequest request,
+ PortletResponse response)
+ {
+ return getServletContextProvider().getServletContext(portlet);
+ }
+
+ protected HttpServletRequest getHttpServletRequest(GenericPortlet portlet,
+ PortletRequest request, PortletResponse response)
+ {
+ return getServletContextProvider().getHttpServletRequest(portlet, request);
+ }
+
+ protected HttpServletResponse getHttpServletResponse(GenericPortlet portlet,
+ PortletRequest request, PortletResponse response)
+ {
+ return getServletContextProvider().getHttpServletResponse(portlet, response);
+ }
+
+ protected void processRequest(PortletRequest request, PortletResponse response,
+ String requestType) throws PortletException, IOException
+ {
+ String wicketURL = request.getParameter(WICKET_URL_PORTLET_PARAMETER);
+
+ if (wicketURL == null)
+ {
+ wicketURL = wicketFilterPath;
+ }
+
+ boolean actionRequest = ACTION_REQUEST.equals(requestType);
+
+ WicketResponseState responseState = new WicketResponseState();
+
+ request.setAttribute(RESPONSE_STATE_ATTR, responseState);
+ request.setAttribute(RESOURCE_URL_FACTORY_ATTR, resourceURLFactory);
+ request.setAttribute(REQUEST_TYPE_ATTR, requestType);
+ String portletResourceURL = request.getParameter(PORTLET_RESOURCE_URL_PARAMETER);
+ if (portletResourceURL != null)
+ {
+ request.setAttribute(PORTLET_RESOURCE_URL_ATTR,portletResourceURL);
+ }
+
+ if (actionRequest)
+ {
+ ServletContext servletContext = getServletContext(this, request, response);
+ HttpServletRequest req = getHttpServletRequest(this, request, response);
+ HttpServletResponse res = getHttpServletResponse(this, request, response);
+ RequestDispatcher rd = servletContext.getRequestDispatcher(wicketURL);
+
+ if (rd != null)
+ {
+ // http://issues.apache.org/jira/browse/PB-2:
+ // provide servlet access to the Portlet components even from
+ // an actionRequest in extension to the JSR-168 requirement
+ // PLT.16.3.2 which (currently) only covers renderRequest
+ // servlet inclusion.
+ if (req.getAttribute("javax.portlet.config") == null)
+ {
+ req.setAttribute("javax.portlet.config", getPortletConfig());
+ }
+ if (req.getAttribute("javax.portlet.request") == null)
+ {
+ req.setAttribute("javax.portlet.request", request);
+ }
+ if (req.getAttribute("javax.portlet.response") == null)
+ {
+ req.setAttribute("javax.portlet.response", response);
+ }
+ try
+ {
+ rd.include(req, res);
+ processActionResponseState(wicketURL, (ActionRequest)request, (ActionResponse)response, responseState);
+ }
+ catch (ServletException e)
+ {
+ throw new PortletException(e);
+ }
+ }
+ }
+ else
+ {
+ PortletRequestDispatcher rd = null;
+ String previousURL = null;
+ while (true)
+ {
+ rd = getPortletContext().getRequestDispatcher(wicketURL);
+ if (rd != null)
+ {
+ rd.include((RenderRequest)request, (RenderResponse)response);
+ if (responseState.getRedirectLocation() != null && responseState.getRedirectLocation().startsWith(wicketFilterPath)
+ && ((previousURL == null || previousURL != responseState.getRedirectLocation())))
+ {
+ previousURL = wicketURL;
+ wicketURL = responseState.getRedirectLocation();
+ ((RenderResponse)response).reset();
+ responseState.reset();
+ continue;
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ protected void processActionResponseState(String wicketURL, ActionRequest request, ActionResponse response, WicketResponseState responseState) throws PortletException, IOException
+ {
+ if ( responseState.getRedirectLocation() != null )
+ {
+ wicketURL = responseState.getRedirectLocation();
+ if (wicketURL.startsWith(request.getContextPath()+wicketFilterPath))
+ {
+ response.setRenderParameter(WICKET_URL_PORTLET_PARAMETER, wicketURL.substring(request.getContextPath().length()));
+ }
+ else
+ {
+ response.sendRedirect(responseState.getRedirectLocation());
+ }
+ }
+ }
+}
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortlet.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortletFilter.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortletFilter.java?view=auto&rev=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortletFilter.java (added)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortletFilter.java Thu Jun 14 10:17:42 2007
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.protocol.http.portlet;
+
+import java.io.IOException;
+
+import javax.portlet.PortletConfig;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.portals.bridges.common.PortletResourceURLFactory;
+import org.apache.portals.bridges.util.ServletPortletSessionProxy;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.http.WebRequest;
+import org.apache.wicket.protocol.http.WebResponse;
+import org.apache.wicket.protocol.http.WicketFilter;
+import org.apache.wicket.settings.IRequestCycleSettings;
+
+/**
+ * @author Ate Douma
+ */
+public class WicketPortletFilter extends WicketFilter
+{
+ private int filterPathPrefixLength = -1;
+
+ public void init(FilterConfig filterConfig) throws ServletException
+ {
+ super.init(filterConfig);
+ // Get the instance of the application object from the servlet context
+ // make integration with outside world easier
+ String contextKey = "wicket:" + filterConfig.getFilterName();
+ WebApplication webApplication = (WebApplication)filterConfig.getServletContext().getAttribute(contextKey);
+ webApplication.getRequestCycleSettings().setRenderStrategy(IRequestCycleSettings.REDIRECT_TO_RENDER);
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
+ {
+ HttpServletRequest servletRequest = (HttpServletRequest)request;
+ PortletConfig portletConfig = (PortletConfig)request.getAttribute("javax.portlet.config");
+ if ( portletConfig != null )
+ {
+ WicketResponseState responseState = (WicketResponseState)request.getAttribute(WicketPortlet.RESPONSE_STATE_ATTR);
+ request = new PortletServletRequestWrapper(getFilterConfig().getServletContext(),servletRequest, ServletPortletSessionProxy.createProxy(servletRequest));
+ if ( WicketPortlet.ACTION_REQUEST.equals(request.getAttribute(WicketPortlet.REQUEST_TYPE_ATTR)))
+ {
+ response = new PortletActionServletResponseWrapper((HttpServletResponse)response, responseState);
+ }
+ else
+ {
+ response = new PortletRenderServletResponseWrapper( (HttpServletResponse)response, (RenderResponse)request.getAttribute("javax.portlet.response"),responseState);
+ }
+ }
+ else
+ {
+ request = PortletRenderContext.getPortletServletRequest(getFilterConfig().getServletContext(),servletRequest, getFilterPath(servletRequest));
+ }
+ super.doFilter(request, response, chain);
+ }
+
+ protected int getFilterPathPrefixLength(HttpServletRequest request)
+ {
+ if (filterPathPrefixLength == -1)
+ {
+ filterPathPrefixLength = request.getContextPath().length()+getFilterPath(request).length();
+ }
+ return filterPathPrefixLength;
+ }
+
+ protected void createRenderContext(WebRequest request, WebResponse response)
+ {
+ HttpServletRequest servletRequest = request.getHttpServletRequest();
+ PortletConfig portletConfig = (PortletConfig)servletRequest.getAttribute("javax.portlet.config");
+ if ( portletConfig != null )
+ {
+ if ( WicketPortlet.ACTION_REQUEST.equals(servletRequest.getAttribute(WicketPortlet.REQUEST_TYPE_ATTR)))
+ {
+ new PortletRenderContext(null, null, null, null, null);
+ }
+ else
+ {
+ PortletResourceURLFactory resourceURLFactory = (PortletResourceURLFactory)servletRequest.getAttribute(WicketPortlet.RESOURCE_URL_FACTORY_ATTR);
+ RenderRequest renderRequest = (RenderRequest)servletRequest.getAttribute("javax.portlet.request");
+ RenderResponse renderResponse = (RenderResponse)servletRequest.getAttribute("javax.portlet.response");
+ boolean isResourceRequest = "true".equals(servletRequest.getAttribute(WicketPortlet.PORTLET_RESOURCE_URL_ATTR));
+ new PortletRenderContext(portletConfig, renderRequest, renderResponse, resourceURLFactory, isResourceRequest ? null : new EmbeddedPortletHeaderResponse(response));
+ }
+ }
+ else
+ {
+ super.createRenderContext(request, response);
+ }
+ }
+}
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortletFilter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketPortletFilter.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketResponseState.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketResponseState.java?view=auto&rev=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketResponseState.java (added)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketResponseState.java Thu Jun 14 10:17:42 2007
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.protocol.http.portlet;
+
+/**
+ * @author Ate Douma
+ */
+public class WicketResponseState
+{
+ private int errorCode;
+ private String errorMessage;
+ private int statusCode;
+ private String redirectLocation;
+
+ /**
+ * Gets errorCode.
+ * @return errorCode
+ */
+ public int getErrorCode()
+ {
+ return errorCode;
+ }
+
+ /**
+ * Sets errorCode.
+ * @param errorCode errorCode
+ */
+ public void setErrorCode(int errorCode)
+ {
+ this.errorCode = errorCode;
+ }
+
+ /**
+ * Gets errorMessage.
+ * @return errorMessage
+ */
+ public String getErrorMessage()
+ {
+ return errorMessage;
+ }
+
+ /**
+ * Sets errorMessage.
+ * @param errorMessage errorMessage
+ */
+ public void setErrorMessage(String errorMessage)
+ {
+ this.errorMessage = errorMessage;
+ }
+
+ /**
+ * Gets redirectLocation.
+ * @return redirectLocation
+ */
+ public String getRedirectLocation()
+ {
+ return redirectLocation;
+ }
+
+ /**
+ * Sets redirectLocation.
+ * @param redirectLocation redirectLocation
+ */
+ public void setRedirectLocation(String redirectLocation)
+ {
+ this.redirectLocation = redirectLocation;
+ }
+
+ /**
+ * Gets statusCode.
+ * @return statusCode
+ */
+ public int getStatusCode()
+ {
+ return statusCode;
+ }
+
+ /**
+ * Sets statusCode.
+ * @param statusCode statusCode
+ */
+ public void setStatusCode(int statusCode)
+ {
+ this.statusCode = statusCode;
+ }
+
+ public void reset()
+ {
+ errorCode = 0;
+ errorMessage = null;
+ statusCode = 0;
+ redirectLocation = null;
+ }
+}
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketResponseState.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/portlet/WicketResponseState.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: incubator/wicket/branches/wicket-1.3-portlet-support/pom.xml
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/pom.xml?view=diff&rev=547319&r1=547318&r2=547319
==============================================================================
--- incubator/wicket/branches/wicket-1.3-portlet-support/pom.xml (original)
+++ incubator/wicket/branches/wicket-1.3-portlet-support/pom.xml Thu Jun 14 10:17:42 2007
@@ -197,6 +197,15 @@
</mailingList>
</mailingLists>
+ <repositories>
+ <repository>
+ <!-- for portals-bridges-common -->
+ <id>com.bluesunrise.m2</id>
+ <name>Maven2 BlueSunrise</name>
+ <url>http://www.bluesunrise.com/maven2</url>
+ </repository>
+ </repositories>
+
<dependencyManagement>
<dependencies>
<dependency>
@@ -387,6 +396,20 @@
<artifactId>jwebunit-htmlunit-plugin</artifactId>
<version>1.4-rc3</version>
<scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.portlet</groupId>
+ <artifactId>portlet-api</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.portals.bridges</groupId>
+ <artifactId>portals-bridges-common</artifactId>
+ <version>1.0.2-beta1</version>
+ <scope>provided</scope>
+ <optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>