Author: rgielen
Date: Sat Nov 7 15:58:33 2009
New Revision: 833701
URL:
http://svn.apache.org/viewvc?rev=833701&view=revLog:
SB-110:
Seperated pure JSR168 functionality from additional JSR286 stuff, using different Dispatcher portlet and automatic API level detection to support both Portlet 1.0 and 2.0 applications from the same plugin
Added:
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java
Modified:
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java
struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java Sat Nov 7 15:58:33 2009
@@ -22,10 +22,13 @@
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
import com.opensymphony.xwork2.inject.Inject;
import org.apache.struts2.StrutsException;
import org.apache.struts2.dispatcher.mapper.ActionMapper;
import org.apache.struts2.portlet.util.PortletUrlHelper;
+import org.apache.struts2.portlet.util.PortletUrlHelperJSR286;
import org.apache.struts2.portlet.context.PortletActionContext;
import org.apache.commons.lang.xwork.StringUtils;
@@ -40,13 +43,22 @@
*/
public class PortletUrlRenderer implements UrlRenderer {
+ private static final Logger LOG = LoggerFactory.getLogger(PortletUrlRenderer.class);
+
/**
* The servlet renderer used when not executing in a portlet context.
*/
private UrlRenderer servletRenderer = null;
+ private PortletUrlHelper portletUrlHelper = null;
public PortletUrlRenderer() {
this.servletRenderer = new ServletUrlRenderer();
+
+ if (PortletActionContext.isJSR268Supported()) {
+ this.portletUrlHelper = new PortletUrlHelperJSR286();
+ } else {
+ this.portletUrlHelper = new PortletUrlHelper();
+ }
}
@Inject
@@ -66,9 +78,9 @@
String result;
if (onlyActionSpecified(urlComponent)) {
- result = PortletUrlHelper.buildUrl(urlComponent.getAction(), urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(), urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState());
+ result = portletUrlHelper.buildUrl(urlComponent.getAction(), urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(), urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState());
} else if(onlyValueSpecified(urlComponent)){
- result = PortletUrlHelper.buildResourceUrl(urlComponent.getValue(), urlComponent.getParameters());
+ result = portletUrlHelper.buildResourceUrl(urlComponent.getValue(), urlComponent.getParameters());
}
else {
result = createDefaultUrl(urlComponent);
@@ -99,7 +111,7 @@
ActionInvocation ai = (ActionInvocation)urlComponent.getStack().getContext().get(
ActionContext.ACTION_INVOCATION);
String action = ai.getProxy().getActionName();
- result = PortletUrlHelper.buildUrl(action, urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(),
+ result = portletUrlHelper.buildUrl(action, urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(),
urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState());
return result;
}
@@ -138,7 +150,7 @@
}
}
if (action != null) {
- String result = PortletUrlHelper.buildUrl(action, namespace, null,
+ String result = portletUrlHelper.buildUrl(action, namespace, null,
formComponent.getParameters(), type, formComponent.portletMode, formComponent.windowState);
formComponent.addParameter("action", result);
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java Sat Nov 7 15:58:33 2009
@@ -216,4 +216,13 @@
return EVENT_PHASE.equals(getPhase());
}
+ /**
+ * Whether JSR286 features are supported.
+ *
+ * @return <code>true</code> if {@link javax.portlet.PortletContext#getMajorVersion()} returns a value greater than 1
+ */
+ public static boolean isJSR268Supported() {
+ return getPortletContext().getMajorVersion() > 1;
+ }
+
}
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java Sat Nov 7 15:58:33 2009
@@ -412,7 +412,7 @@
try {
ServletContext servletContext = new PortletServletContext(getPortletContext());
HttpServletRequest servletRequest = new PortletServletRequest(request, getPortletContext());
- HttpServletResponse servletResponse = new PortletServletResponse(response);
+ HttpServletResponse servletResponse = createPortletServletResponse(response);
if(EVENT_PHASE.equals(phase)) {
servletRequest = dispatcherUtils.wrapRequest(servletRequest, servletContext);
if(servletRequest instanceof MultiPartRequestWrapper) {
@@ -448,7 +448,7 @@
}
}
- /**
+ /**
* Returns a Map of all application attributes. Copies all attributes from
* the {@link PortletActionContext}into an {@link ApplicationMap}.
*
@@ -613,4 +613,15 @@
this.actionMapper = actionMapper;
}
+ /**
+ * Method to create a PortletServletResponse matching the used Portlet API, to be overridden for JSR286 Dispatcher.
+ *
+ * @param response The Response used for building the wrapper.
+ *
+ * @return The wrapper response for Servlet bound usage.
+ */
+ protected PortletServletResponse createPortletServletResponse( PortletResponse response ) {
+ return new PortletServletResponse(response);
+ }
+
}
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java Sat Nov 7 15:58:33 2009
@@ -4,6 +4,8 @@
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
import static org.apache.struts2.portlet.PortletContstants.SERVE_RESOURCE_PHASE;
+import org.apache.struts2.portlet.servlet.PortletServletResponse;
+import org.apache.struts2.portlet.servlet.PortletServletResponseJSR286;
import javax.portlet.*;
import java.io.IOException;
@@ -54,4 +56,8 @@
return super.getDefaultActionPath(portletRequest);
}
+ @Override
+ protected PortletServletResponse createPortletServletResponse( PortletResponse response ) {
+ return new PortletServletResponseJSR286(response);
+ }
}
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java Sat Nov 7 15:58:33 2009
@@ -24,14 +24,7 @@
import java.util.Map;
import java.util.StringTokenizer;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletException;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequestDispatcher;
-import javax.portlet.PortletRequest;
-import javax.portlet.MimeResponse;
-import javax.portlet.RenderResponse;
-import javax.portlet.StateAwareResponse;
+import javax.portlet.*;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -71,14 +64,26 @@
protected PortletMode portletMode;
+ PortletResultHelper resultHelper;
+
public PortletResult() {
super();
+ determineResultHelper();
}
public PortletResult(String location) {
super(location);
+ determineResultHelper();
}
+ private void determineResultHelper() {
+ if (PortletActionContext.isJSR268Supported()) {
+ this.resultHelper = new PortletResultHelperJSR286();
+ } else {
+ this.resultHelper = new PortletResultHelperJSR168();
+ }
+ }
+
/**
* Execute the result. Obtains the
* {@link javax.portlet.PortletRequestDispatcher}from the
@@ -128,28 +133,28 @@
protected void executeActionResult(String finalLocation, ActionInvocation invocation) throws Exception {
String phase = (PortletActionContext.isEvent()) ? "Event" : "Action";
if (LOG.isDebugEnabled()) LOG.debug("Executing result in "+phase+" phase");
- StateAwareResponse res = (StateAwareResponse)PortletActionContext.getResponse();
Map sessionMap = invocation.getInvocationContext().getSession();
if (LOG.isDebugEnabled()) LOG.debug("Setting event render parameter: " + finalLocation);
if (finalLocation.indexOf('?') != -1) {
- convertQueryParamsToRenderParams(res, finalLocation.substring(finalLocation.indexOf('?') + 1));
+ convertQueryParamsToRenderParams(finalLocation.substring(finalLocation.indexOf('?') + 1));
finalLocation = finalLocation.substring(0, finalLocation.indexOf('?'));
}
+ PortletResponse response = PortletActionContext.getResponse();
if (finalLocation.endsWith(".action")) {
// View is rendered with a view action...luckily...
finalLocation = finalLocation.substring(0, finalLocation.lastIndexOf("."));
- res.setRenderParameter(ACTION_PARAM, finalLocation);
+ resultHelper.setRenderParameter(response, ACTION_PARAM, finalLocation);
} else {
// View is rendered outside an action...uh oh...
- res.setRenderParameter(ACTION_PARAM, "renderDirect");
+ resultHelper.setRenderParameter(response, ACTION_PARAM, "renderDirect");
sessionMap.put(RENDER_DIRECT_LOCATION, finalLocation);
}
if(portletMode != null) {
- res.setPortletMode(portletMode);
- res.setRenderParameter(PortletActionConstants.MODE_PARAM, portletMode.toString());
+ resultHelper.setPortletMode(response, portletMode);
+ resultHelper.setRenderParameter(response, PortletActionConstants.MODE_PARAM, portletMode.toString());
}
else {
- res.setRenderParameter(PortletActionConstants.MODE_PARAM, PortletActionContext.getRequest().getPortletMode()
+ resultHelper.setRenderParameter(response, PortletActionConstants.MODE_PARAM, PortletActionContext.getRequest().getPortletMode()
.toString());
}
}
@@ -160,13 +165,13 @@
* @param response
* @param queryParams
*/
- protected static void convertQueryParamsToRenderParams(StateAwareResponse response, String queryParams) {
+ protected void convertQueryParamsToRenderParams(String queryParams) {
StringTokenizer tok = new StringTokenizer(queryParams, "&");
while (tok.hasMoreTokens()) {
String token = tok.nextToken();
String key = token.substring(0, token.indexOf('='));
String value = token.substring(token.indexOf('=') + 1);
- response.setRenderParameter(key, value);
+ resultHelper.setRenderParameter(PortletActionContext.getResponse(), key, value);
}
}
@@ -181,26 +186,26 @@
if (LOG.isDebugEnabled()) LOG.debug("Executing mime result");
PortletContext ctx = PortletActionContext.getPortletContext();
PortletRequest req = PortletActionContext.getRequest();
- MimeResponse res = (MimeResponse)PortletActionContext.getResponse();
- res.setContentType(contentType);
+ PortletResponse res = PortletActionContext.getResponse();
+
if (StringUtils.isNotEmpty(title) && res instanceof RenderResponse) {
((RenderResponse)res).setTitle(title);
}
if (LOG.isDebugEnabled()) LOG.debug("Location: " + finalLocation);
+ PortletRequestDispatcher dispatcher;
if (useDispatcherServlet) {
req.setAttribute(DISPATCH_TO, finalLocation);
- PortletRequestDispatcher dispatcher = ctx.getNamedDispatcher(dispatcherServletName);
+ dispatcher = ctx.getNamedDispatcher(dispatcherServletName);
if(dispatcher == null) {
throw new PortletException("Could not locate dispatcher servlet \"" + dispatcherServletName + "\". Please configure it in your web.xml file");
}
- dispatcher.include(req, res);
} else {
- PortletRequestDispatcher dispatcher = ctx.getRequestDispatcher(finalLocation);
+ dispatcher = ctx.getRequestDispatcher(finalLocation);
if (dispatcher == null) {
throw new PortletException("Could not locate dispatcher for '" + finalLocation + "'");
}
- dispatcher.include(req, res);
}
+ resultHelper.include( dispatcher, contentType, req, res );
}
/**
Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java?rev=833701&view=auto==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java (added)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java Sat Nov 7 15:58:33 2009
@@ -0,0 +1,41 @@
+package org.apache.struts2.portlet.result;
+
+import javax.portlet.*;
+import java.io.IOException;
+
+/**
+ * PortletResultHelper abstracts Portlet API result functions specific to the used API spec version.
+ *
+ * @author Rene Gielen
+ */
+
+public interface PortletResultHelper {
+
+ /**
+ * Set a render parameter, abstracted from the used Portlet API version
+ *
+ * @param response The response to set the parameter on.
+ * @param key The parameter key to set.
+ * @param value The parameter value to set.
+ */
+ void setRenderParameter( PortletResponse response, String key, String value );
+
+ /**
+ * Set a portlet mode, abstracted from the used Portlet API version
+ *
+ * @param response The response to set the portlet mode on.
+ * @param portletMode The portlet mode to set.
+ */
+ void setPortletMode( PortletResponse response, PortletMode portletMode ) throws PortletModeException;
+
+ /**
+ * Call a dispatcher's include method, abstracted from the used Portlet API version.
+ *
+ * @param dispatcher The dispatcher to call the include method on.
+ * @param contentType The content type to set for the response.
+ * @param request The request to use for including
+ * @param response The response to use for including
+ */
+ void include( PortletRequestDispatcher dispatcher, String contentType, PortletRequest request,
+ PortletResponse response ) throws IOException, PortletException;
+}
Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java?rev=833701&view=auto==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java (added)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java Sat Nov 7 15:58:33 2009
@@ -0,0 +1,54 @@
+package org.apache.struts2.portlet.result;
+
+import javax.portlet.*;
+import java.io.IOException;
+
+/**
+ * PortletResultHelperJSR168 implements PortletResultHelper for Portlet 1.0 API (JSR168).
+ *
+ * @author Rene Gielen
+ */
+public class PortletResultHelperJSR168 implements PortletResultHelper {
+
+ /**
+ * Set a render parameter, abstracted from the used Portlet API version. This implementation assumes that the given
+ * response must be a {@link javax.portlet.ActionResponse}, as JSR168 implies.
+ *
+ * @param response The response to set the parameter on.
+ * @param key The parameter key to set.
+ * @param value The parameter value to set.
+ */
+ public void setRenderParameter( PortletResponse response, String key, String value ) {
+ ((ActionResponse) response).setRenderParameter(key, value);
+ }
+
+ /**
+ * Set a portlet mode, abstracted from the used Portlet API version. This implementation assumes that the given
+ * response must be a {@link javax.portlet.ActionResponse}, as JSR168 implies.
+ *
+ * @param response The response to set the portlet mode on.
+ * @param portletMode The portlet mode to set.
+ */
+ public void setPortletMode( PortletResponse response, PortletMode portletMode ) throws PortletModeException {
+ ((ActionResponse) response).setPortletMode(portletMode);
+ }
+
+ /**
+ * Call a dispatcher's include method, abstracted from the used Portlet API version. This implementation assumes
+ * that the given the request must be a {@link javax.portlet.RenderRequest} and the response must be a {@link
+ * javax.portlet.RenderResponse}, as JSR168 implies.
+ *
+ * @param dispatcher The dispatcher to call the include method on.
+ * @param contentType The content type to set for the response.
+ * @param request The request to use for including
+ * @param response The response to use for including
+ */
+ public void include( PortletRequestDispatcher dispatcher, String contentType, PortletRequest request,
+ PortletResponse response ) throws IOException, PortletException {
+ RenderRequest req = (RenderRequest) request;
+ RenderResponse res = (RenderResponse) response;
+ res.setContentType(contentType);
+ dispatcher.include(req, res);
+ }
+
+}
\ No newline at end of file
Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java?rev=833701&view=auto==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java (added)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java Sat Nov 7 15:58:33 2009
@@ -0,0 +1,49 @@
+package org.apache.struts2.portlet.result;
+
+import javax.portlet.*;
+import java.io.IOException;
+
+/**
+ * PortletResultHelperJSR286 implements PortletResultHelper for Portlet 2.0 API (JSR286).
+ *
+ * @author Rene Gielen
+ */
+public class PortletResultHelperJSR286 implements PortletResultHelper {
+
+ /**
+ * Set a render parameter, abstracted from the used Portlet API version
+ *
+ * @param response The response to set the parameter on.
+ * @param key The parameter key to set.
+ * @param value The parameter value to set.
+ */
+ public void setRenderParameter( PortletResponse response, String key, String value ) {
+ ((StateAwareResponse) response).setRenderParameter(key, value);
+ }
+
+ /**
+ * Set a portlet mode, abstracted from the used Portlet API version
+ *
+ * @param response The response to set the portlet mode on.
+ * @param portletMode The portlet mode to set.
+ */
+ public void setPortletMode( PortletResponse response, PortletMode portletMode ) throws PortletModeException {
+ ((StateAwareResponse) response).setPortletMode(portletMode);
+ }
+
+ /**
+ * Call a dispatcher's include method, abstracted from the used Portlet API version.
+ *
+ * @param dispatcher The dispatcher to call the include method on.
+ * @param contentType The content type to set for the response.
+ * @param request The request to use for including
+ * @param response The response to use for including
+ */
+ public void include( PortletRequestDispatcher dispatcher, String contentType, PortletRequest request,
+ PortletResponse response ) throws IOException, PortletException {
+ MimeResponse res = (MimeResponse) response;
+ res.setContentType(contentType);
+ dispatcher.include(request, res);
+ }
+
+}
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java Sat Nov 7 15:58:33 2009
@@ -24,17 +24,15 @@
import java.io.PrintWriter;
import java.util.Locale;
-import javax.portlet.MimeResponse;
import javax.portlet.PortletResponse;
import javax.portlet.RenderResponse;
-import javax.portlet.ResourceResponse;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
public class PortletServletResponse implements HttpServletResponse {
- private PortletResponse portletResponse;
+ protected PortletResponse portletResponse;
public PortletServletResponse(PortletResponse portletResponse) {
this.portletResponse = portletResponse;
@@ -108,134 +106,125 @@
throw new IllegalStateException("Not allowed in a portlet");
}
- public void flushBuffer() throws IOException {
- if(portletResponse instanceof MimeResponse) {
- ((MimeResponse)portletResponse).flushBuffer();
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public int getBufferSize() {
- if(portletResponse instanceof MimeResponse) {
- return ((MimeResponse)portletResponse).getBufferSize();
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public String getCharacterEncoding() {
- if(portletResponse instanceof MimeResponse) {
- return ((MimeResponse)portletResponse).getCharacterEncoding();
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public String getContentType() {
- if(portletResponse instanceof MimeResponse) {
- return ((MimeResponse)portletResponse).getContentType();
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public Locale getLocale() {
- if(portletResponse instanceof MimeResponse) {
- return ((MimeResponse)portletResponse).getLocale();
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public ServletOutputStream getOutputStream() throws IOException {
- if(portletResponse instanceof MimeResponse) {
- return new PortletServletOutputStream(((MimeResponse)portletResponse).getPortletOutputStream());
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public PrintWriter getWriter() throws IOException {
- if(portletResponse instanceof MimeResponse) {
- return ((MimeResponse)portletResponse).getWriter();
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public boolean isCommitted() {
- if(portletResponse instanceof MimeResponse) {
- return ((MimeResponse)portletResponse).isCommitted();
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public void reset() {
- if(portletResponse instanceof MimeResponse) {
- ((MimeResponse)portletResponse).reset();
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public void resetBuffer() {
- if(portletResponse instanceof MimeResponse) {
- ((MimeResponse)portletResponse).resetBuffer();
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public void setBufferSize(int size) {
- if(portletResponse instanceof MimeResponse) {
- ((MimeResponse)portletResponse).setBufferSize(size);
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public void setCharacterEncoding(String charset) {
- if(portletResponse instanceof ResourceResponse) {
- ((ResourceResponse)portletResponse).setCharacterEncoding(charset);
- }
- throw new IllegalStateException("Only allowed in resource phase");
- }
-
- public void setContentLength(int len) {
- if(portletResponse instanceof ResourceResponse) {
- ((ResourceResponse)portletResponse).setContentLength(len);
- }
- throw new IllegalStateException("Only allowed in resource phase");
- }
-
- public void setContentType(String type) {
- if(portletResponse instanceof MimeResponse) {
- ((MimeResponse)portletResponse).setContentType(type);
- }
- else {
- throw new IllegalStateException("Only allowed in render or resource phase");
- }
- }
-
- public void setLocale(Locale loc) {
- if(portletResponse instanceof ResourceResponse) {
- ((ResourceResponse)portletResponse).setLocale(loc);
- }
- throw new IllegalStateException("Only allowed in resource phase");
- }
+ public void flushBuffer() throws IOException {
+ if(portletResponse instanceof RenderResponse) {
+ ((RenderResponse)portletResponse).flushBuffer();
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public int getBufferSize() {
+ if(portletResponse instanceof RenderResponse) {
+ return ((RenderResponse)portletResponse).getBufferSize();
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public String getCharacterEncoding() {
+ if(portletResponse instanceof RenderResponse) {
+ return ((RenderResponse)portletResponse).getCharacterEncoding();
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public String getContentType() {
+ if(portletResponse instanceof RenderResponse) {
+ return ((RenderResponse)portletResponse).getContentType();
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public Locale getLocale() {
+ if(portletResponse instanceof RenderResponse) {
+ return ((RenderResponse)portletResponse).getLocale();
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public ServletOutputStream getOutputStream() throws IOException {
+ if(portletResponse instanceof RenderResponse) {
+ return new PortletServletOutputStream(((RenderResponse)portletResponse).getPortletOutputStream());
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public PrintWriter getWriter() throws IOException {
+ if(portletResponse instanceof RenderResponse) {
+ return ((RenderResponse)portletResponse).getWriter();
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public boolean isCommitted() {
+ if(portletResponse instanceof RenderResponse) {
+ return ((RenderResponse)portletResponse).isCommitted();
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public void reset() {
+ if(portletResponse instanceof RenderResponse) {
+ ((RenderResponse)portletResponse).reset();
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public void resetBuffer() {
+ if(portletResponse instanceof RenderResponse) {
+ ((RenderResponse)portletResponse).resetBuffer();
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public void setBufferSize(int size) {
+ if(portletResponse instanceof RenderResponse) {
+ ((RenderResponse)portletResponse).setBufferSize(size);
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public void setCharacterEncoding(String charset) {
+ throw new IllegalStateException("Not allowed in a portlet");
+ }
+
+ public void setContentLength(int len) {
+ throw new IllegalStateException("Not allowed in a portlet");
+ }
+
+ public void setContentType(String type) {
+ if(portletResponse instanceof RenderResponse) {
+ ((RenderResponse)portletResponse).setContentType(type);
+ }
+ else {
+ throw new IllegalStateException("Not allowed in event phase");
+ }
+ }
+
+ public void setLocale(Locale loc) {
+ throw new IllegalStateException("Not allowed in a portlet");
+ }
public PortletResponse getPortletResponse() {
return portletResponse;
Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java?rev=833701&view=auto==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java (added)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java Sat Nov 7 15:58:33 2009
@@ -0,0 +1,152 @@
+package org.apache.struts2.portlet.servlet;
+
+import javax.servlet.ServletOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Locale;
+import javax.portlet.ResourceResponse;
+import javax.portlet.MimeResponse;
+import javax.portlet.PortletResponse;
+
+/**
+ * PortletServletResponseJSR286.
+ *
+ * @author Rene Gielen
+ */
+public class PortletServletResponseJSR286 extends PortletServletResponse {
+
+ public PortletServletResponseJSR286( PortletResponse portletResponse ) {
+ super(portletResponse);
+ }
+
+
+ public void flushBuffer() throws IOException {
+ if(portletResponse instanceof MimeResponse) {
+ ((MimeResponse)portletResponse).flushBuffer();
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public int getBufferSize() {
+ if(portletResponse instanceof MimeResponse) {
+ return ((MimeResponse)portletResponse).getBufferSize();
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public String getCharacterEncoding() {
+ if(portletResponse instanceof MimeResponse) {
+ return ((MimeResponse)portletResponse).getCharacterEncoding();
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public String getContentType() {
+ if(portletResponse instanceof MimeResponse) {
+ return ((MimeResponse)portletResponse).getContentType();
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public Locale getLocale() {
+ if(portletResponse instanceof MimeResponse) {
+ return ((MimeResponse)portletResponse).getLocale();
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public ServletOutputStream getOutputStream() throws IOException {
+ if(portletResponse instanceof MimeResponse) {
+ return new PortletServletOutputStream(((MimeResponse)portletResponse).getPortletOutputStream());
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public PrintWriter getWriter() throws IOException {
+ if(portletResponse instanceof MimeResponse) {
+ return ((MimeResponse)portletResponse).getWriter();
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public boolean isCommitted() {
+ if(portletResponse instanceof MimeResponse) {
+ return ((MimeResponse)portletResponse).isCommitted();
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public void reset() {
+ if(portletResponse instanceof MimeResponse) {
+ ((MimeResponse)portletResponse).reset();
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public void resetBuffer() {
+ if(portletResponse instanceof MimeResponse) {
+ ((MimeResponse)portletResponse).resetBuffer();
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public void setBufferSize(int size) {
+ if(portletResponse instanceof MimeResponse) {
+ ((MimeResponse)portletResponse).setBufferSize(size);
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public void setCharacterEncoding(String charset) {
+ if(portletResponse instanceof ResourceResponse) {
+ ((ResourceResponse)portletResponse).setCharacterEncoding(charset);
+ }
+ throw new IllegalStateException("Only allowed in resource phase");
+ }
+
+ public void setContentLength(int len) {
+ if(portletResponse instanceof ResourceResponse) {
+ ((ResourceResponse)portletResponse).setContentLength(len);
+ }
+ throw new IllegalStateException("Only allowed in resource phase");
+ }
+
+ public void setContentType(String type) {
+ if(portletResponse instanceof MimeResponse) {
+ ((MimeResponse)portletResponse).setContentType(type);
+ }
+ else {
+ throw new IllegalStateException("Only allowed in render or resource phase");
+ }
+ }
+
+ public void setLocale(Locale loc) {
+ if(portletResponse instanceof ResourceResponse) {
+ ((ResourceResponse)portletResponse).setLocale(loc);
+ }
+ throw new IllegalStateException("Only allowed in resource phase");
+ }
+
+}
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java Sat Nov 7 15:58:33 2009
@@ -29,13 +29,7 @@
import java.util.Map;
import java.util.StringTokenizer;
-import javax.portlet.BaseURL;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletSecurityException;
-import javax.portlet.PortletURL;
-import javax.portlet.PortletRequest;
-import javax.portlet.MimeResponse;
-import javax.portlet.WindowState;
+import javax.portlet.*;
import org.apache.struts2.StrutsException;
import org.apache.struts2.portlet.context.PortletActionContext;
@@ -43,6 +37,7 @@
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
+
/**
* Helper class for creating Portlet URLs. Portlet URLs are fundamentally different from regular
* servlet URLs since they never target the application itself; all requests go through the portlet
@@ -68,7 +63,7 @@
* @param state The WindowState of the URL.
* @return The URL String.
*/
- public static String buildUrl(String action, String namespace, String method, Map<String, Object> params,
+ public String buildUrl(String action, String namespace, String method, Map<String, Object> params,
String type, String mode, String state) {
return buildUrl(action, namespace, method, params, null, type, mode, state,
true, true);
@@ -77,21 +72,19 @@
/**
* Create a portlet URL with for the specified action and namespace.
*
- * @see #buildUrl(String, String, Map, String, String, String)
+ * @see #buildUrl(String, String, String, java.util.Map, String, String, String)
*/
- public static String buildUrl(String action, String namespace, String method, Map<String, Object> params,
+ public String buildUrl(String action, String namespace, String method, Map<String, Object> params,
String scheme, String type, String portletMode, String windowState,
boolean includeContext, boolean encodeResult) {
StringBuffer resultingAction = new StringBuffer();
PortletRequest request = PortletActionContext.getRequest();
- MimeResponse response = (MimeResponse)PortletActionContext.getResponse();
LOG.debug("Creating url. Action = " + action + ", Namespace = "
+ namespace + ", Type = " + type);
namespace = prependNamespace(namespace, portletMode);
if (StringUtils.isEmpty(portletMode)) {
portletMode = PortletActionContext.getRequest().getPortletMode().toString();
}
- String result = null;
int paramStartIndex = action.indexOf('?');
if (paramStartIndex > 0) {
String value = action;
@@ -117,31 +110,10 @@
}
if (LOG.isDebugEnabled()) LOG.debug("Resulting actionPath: " + resultingAction);
params.put(ACTION_PARAM, new String[] { resultingAction.toString() });
-
- BaseURL url = null;
- if ("action".equalsIgnoreCase(type)) {
- if (LOG.isDebugEnabled()) LOG.debug("Creating action url");
- url = response.createActionURL();
- }
- else if("resource".equalsIgnoreCase(type)) {
- if (LOG.isDebugEnabled()) LOG.debug("Creating resource url");
- url = response.createResourceURL();
- }
- else {
- if (LOG.isDebugEnabled()) LOG.debug("Creating render url");
- url = response.createRenderURL();
- }
-
params.put(MODE_PARAM, new String[]{portletMode});
- url.setParameters(ensureParamsAreStringArrays(params));
+ final Map<String, String[]> portletParams = ensureParamsAreStringArrays(params);
- if ("HTTPS".equalsIgnoreCase(scheme)) {
- try {
- url.setSecure(true);
- } catch (PortletSecurityException e) {
- LOG.error("Cannot set scheme to https", e);
- }
- }
+ Object url = createUrl(scheme, type, portletParams);
if(url instanceof PortletURL) {
try {
final PortletURL portletUrl = (PortletURL) url;
@@ -151,7 +123,8 @@
LOG.error("Unable to set mode or state:" + e.getMessage(), e);
}
}
- result = url.toString();
+
+ String result = url.toString();
// TEMP BUG-WORKAROUND FOR DOUBLE ESCAPING OF AMPERSAND
if(result.indexOf("&") >= 0) {
result = result.replace("&", "&");
@@ -160,6 +133,30 @@
}
+ protected Object createUrl( String scheme, String type, Map<String, String[]> portletParams ) {
+ RenderResponse response = PortletActionContext.getRenderResponse();
+ PortletURL url;
+ if ("action".equalsIgnoreCase(type)) {
+ if (LOG.isDebugEnabled()) LOG.debug("Creating action url");
+ url = response.createActionURL();
+ }
+ else {
+ if (LOG.isDebugEnabled()) LOG.debug("Creating render url");
+ url = response.createRenderURL();
+ }
+
+ url.setParameters(portletParams);
+
+ if ("HTTPS".equalsIgnoreCase(scheme)) {
+ try {
+ url.setSecure(true);
+ } catch ( PortletSecurityException e) {
+ LOG.error("Cannot set scheme to https", e);
+ }
+ }
+ return url;
+ }
+
/**
*
* Prepend the namespace configuration for the specified namespace and PortletMode.
@@ -169,7 +166,7 @@
*
* @return prepended namespace.
*/
- private static String prependNamespace(String namespace, String portletMode) {
+ private String prependNamespace(String namespace, String portletMode) {
StringBuffer sb = new StringBuffer();
PortletMode mode = PortletActionContext.getRequest().getPortletMode();
if(StringUtils.isNotEmpty(portletMode)) {
@@ -204,7 +201,7 @@
* @param value
* @return encoded url to non Struts action resources.
*/
- public static String buildResourceUrl(String value, Map params) {
+ public String buildResourceUrl(String value, Map params) {
StringBuffer sb = new StringBuffer();
// Relative URLs are not allowed in a portlet
if (!value.startsWith("/")) {
@@ -229,8 +226,12 @@
throw new StrutsException("Encoding "+ENCODING+" not found");
}
}
- MimeResponse resp = (MimeResponse)PortletActionContext.getResponse();
PortletRequest req = PortletActionContext.getRequest();
+ return encodeUrl(sb, req);
+ }
+
+ protected String encodeUrl( StringBuffer sb, PortletRequest req ) {
+ RenderResponse resp = PortletActionContext.getRenderResponse();
return resp.encodeURL(req.getContextPath() + sb.toString());
}
@@ -245,14 +246,12 @@
Map<String, String[]> result = null;
if (params != null) {
result = new LinkedHashMap<String, String[]>(params.size());
- Iterator<String> it = params.keySet().iterator();
- while (it.hasNext()) {
- String key = it.next();
+ for ( String key : params.keySet() ) {
Object val = params.get(key);
if (val instanceof String[]) {
- result.put(key, (String[])val);
+ result.put(key, (String[]) val);
} else {
- result.put(key, new String[] { val.toString() });
+ result.put(key, new String[]{val.toString()});
}
}
}
@@ -267,7 +266,7 @@
* @return The WindowState that mathces the <tt>windowState</tt> String, or if
* the String is blank, the current WindowState.
*/
- private static WindowState getWindowState(PortletRequest portletReq,
+ private WindowState getWindowState(PortletRequest portletReq,
String windowState) {
WindowState state = portletReq.getWindowState();
if (StringUtils.isNotEmpty(windowState)) {
@@ -293,7 +292,7 @@
* @return The PortletMode that mathces the <tt>portletMode</tt> String, or if
* the String is blank, the current PortletMode.
*/
- private static PortletMode getPortletMode(PortletRequest portletReq,
+ private PortletMode getPortletMode(PortletRequest portletReq,
String portletMode) {
PortletMode mode = portletReq.getPortletMode();
Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java?rev=833701&view=auto==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java (added)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java Sat Nov 7 15:58:33 2009
@@ -0,0 +1,55 @@
+package org.apache.struts2.portlet.util;
+
+import org.apache.struts2.portlet.context.PortletActionContext;
+import javax.portlet.PortletRequest;
+import javax.portlet.MimeResponse;
+import javax.portlet.BaseURL;
+import javax.portlet.PortletSecurityException;
+import java.util.Map;
+
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+
+/**
+ * PortletUrlJSR286Helper.
+ *
+ * @author Rene Gielen
+ */
+public class PortletUrlHelperJSR286 extends PortletUrlHelper {
+
+ private static final Logger LOG = LoggerFactory.getLogger(PortletUrlHelperJSR286.class);
+
+ protected String encodeUrl( StringBuffer sb, PortletRequest req ) {
+ MimeResponse resp = (MimeResponse) PortletActionContext.getResponse();
+ return resp.encodeURL(req.getContextPath() + sb.toString());
+ }
+
+ protected Object createUrl( String scheme, String type, Map<String, String[]> portletParams ) {
+ MimeResponse response = (MimeResponse) PortletActionContext.getResponse();
+ BaseURL url;
+ if ("action".equalsIgnoreCase(type)) {
+ if (LOG.isDebugEnabled()) LOG.debug("Creating action url");
+ url = response.createActionURL();
+ }
+ else if("resource".equalsIgnoreCase(type)) {
+ if (LOG.isDebugEnabled()) LOG.debug("Creating resource url");
+ url = response.createResourceURL();
+ }
+ else {
+ if (LOG.isDebugEnabled()) LOG.debug("Creating render url");
+ url = response.createRenderURL();
+ }
+
+ url.setParameters(portletParams);
+
+ if ("HTTPS".equalsIgnoreCase(scheme)) {
+ try {
+ url.setSecure(true);
+ } catch ( PortletSecurityException e) {
+ LOG.error("Cannot set scheme to https", e);
+ }
+ }
+ return url;
+ }
+
+}
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java Sat Nov 7 15:58:33 2009
@@ -87,6 +87,7 @@
Constraint[] params = new Constraint[]{same(req), same(res)};
mockRd.expects(once()).method("include").with(params);
mockCtx.expects(once()).method("getRequestDispatcher").with(eq("/WEB-INF/pages/testPage.jsp")).will(returnValue(rd));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
mockResponse.expects(once()).method("setContentType").with(eq("text/html"));
mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
@@ -118,6 +119,7 @@
params = new Constraint[]{eq(MODE_PARAM), eq(PortletMode.VIEW.toString())};
mockResponse.expects(once()).method("setRenderParameter").with(params);
mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
ActionContext ctx = ActionContext.getContext();
ctx.put(REQUEST, mockRequest.proxy());
@@ -144,7 +146,8 @@
params = new Constraint[]{eq(MODE_PARAM), eq(PortletMode.VIEW.toString())};
mockResponse.expects(once()).method("setRenderParameter").with(params);
mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
-
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
+
ActionContext ctx = ActionContext.getContext();
Map session = new HashMap();
@@ -178,6 +181,7 @@
params = new Constraint[]{eq(MODE_PARAM), eq(PortletMode.VIEW.toString())};
mockResponse.expects(once()).method("setRenderParameter").with(params);
mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
ActionContext ctx = ActionContext.getContext();
@@ -208,6 +212,7 @@
Constraint[] params = new Constraint[]{same(req), same(res)};
mockRd.expects(once()).method("include").with(params);
mockCtx.expects(once()).method("getRequestDispatcher").with(eq("/WEB-INF/pages/testPage.jsp")).will(returnValue(rd));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java Sat Nov 7 15:58:33 2009
@@ -83,7 +83,7 @@
EasyMock.replay(renderRequest);
EasyMock.replay(renderResponse);
- PortletUrlHelper.buildUrl("testAction", null, null,
+ (new PortletUrlHelper()).buildUrl("testAction", null, null,
new HashMap(), null, null, null);
assertEquals(PortletMode.VIEW, url.getPortletMode());
assertEquals(WindowState.NORMAL, url.getWindowState());
@@ -97,7 +97,7 @@
EasyMock.replay(renderRequest);
EasyMock.replay(renderResponse);
- PortletUrlHelper.buildUrl("testAction", null, null,
+ (new PortletUrlHelper()).buildUrl("testAction", null, null,
new HashMap(), null, "edit", null);
assertEquals(PortletMode.EDIT, url.getPortletMode());
@@ -112,7 +112,7 @@
EasyMock.replay(renderRequest);
EasyMock.replay(renderResponse);
- PortletUrlHelper.buildUrl("testAction", null, null,
+ (new PortletUrlHelper()).buildUrl("testAction", null, null,
new HashMap(), null, null, "maximized");
assertEquals(PortletMode.VIEW, url.getPortletMode());
@@ -127,7 +127,7 @@
EasyMock.replay(renderResponse);
EasyMock.replay(renderRequest);
- PortletUrlHelper.buildUrl("testAction", null, null,
+ (new PortletUrlHelper()).buildUrl("testAction", null, null,
new HashMap(), "action", null, null);
assertEquals(PortletMode.VIEW, url.getPortletMode());
Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java?rev=833701&r1=833700&r2=833701&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java (original)
+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java Sat Nov 7 15:58:33 2009
@@ -25,13 +25,7 @@
import java.util.Iterator;
import java.util.Map;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletResponse;
-import javax.portlet.PortletURL;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.WindowState;
+import javax.portlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
@@ -41,6 +35,8 @@
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.portlet.PortletActionConstants;
import org.apache.struts2.portlet.util.PortletUrlHelper;
+import org.apache.struts2.StrutsStatics;
+import static org.apache.struts2.StrutsStatics.*;
import org.jmock.Mock;
import org.jmock.cglib.MockObjectTestCase;
import org.jmock.core.Constraint;
@@ -49,6 +45,8 @@
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
+import static com.opensymphony.xwork2.ActionContext.SESSION;
+import static com.opensymphony.xwork2.ActionContext.PARAMETERS;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.ValueStackFactory;
@@ -73,12 +71,15 @@
MockJspWriter mockJspWriter = null;
+ Mock mockCtx = null;
+
ValueStack stack = null;
public static void main(String[] args) {
TestRunner.run(PortletUrlTagTest.class);
}
+
public void setUp() throws Exception {
super.setUp();
@@ -99,6 +100,7 @@
mockPageCtx = mock(PageContext.class);
mockPortletUrl = mock(PortletURL.class);
mockJspWriter = new MockJspWriter();
+ mockCtx = mock(PortletContext.class);
mockPageCtx.stubs().method("getRequest").will(
returnValue((HttpServletRequest) mockHttpReq.proxy()));
@@ -133,6 +135,7 @@
contextMap.put(PortletActionConstants.RESPONSE, mockPortletRes.proxy());
contextMap.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
contextMap.put(PortletActionConstants.MODE_NAMESPACE_MAP, modeMap);
+ contextMap.put(STRUTS_PORTLET_CONTEXT, mockCtx.proxy());
ActionContext ctx = new ActionContext(contextMap);
ctx.setValueStack(stack);
ActionContext.setContext(ctx);
@@ -156,6 +159,7 @@
mockPortletRes.expects(once()).method("createRenderURL").will(
returnValue((PortletURL) mockPortletUrl.proxy()));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
Map paramMap = new HashMap();
paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction"});
@@ -180,6 +184,7 @@
mockPortletRes.expects(once()).method("createRenderURL").will(
returnValue((PortletURL) mockPortletUrl.proxy()));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
Map paramMap = new HashMap();
paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/help/testAction"});
@@ -203,6 +208,7 @@
mockPortletRes.expects(once()).method("createRenderURL").will(
returnValue((PortletURL) mockPortletUrl.proxy()));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
Map paramMap = new HashMap();
paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction"});
@@ -226,6 +232,7 @@
mockPortletRes.expects(once()).method("createActionURL").will(
returnValue((PortletURL) mockPortletUrl.proxy()));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
Map paramMap = new HashMap();
paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction"});
@@ -245,6 +252,7 @@
mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
mockPortletRes.expects(once()).method("encodeURL").will(returnValue("/contextPath/image.gif"));
mockJspWriter.setExpectedData("/contextPath/image.gif");
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
tag.setValue("image.gif");
tag.doStartTag();
tag.doEndTag();
@@ -255,6 +263,7 @@
mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
mockPortletRes.expects(once()).method("encodeURL").with(eq("/contextPath/image.gif?testParam1=testValue1")).will(returnValue("/contextPath/image.gif?testParam1=testValue1"));
mockJspWriter.setExpectedData("/contextPath/image.gif?testParam1=testValue1");
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
ParamTag paramTag = new ParamTag();
paramTag.setPageContext((PageContext)mockPageCtx.proxy());
@@ -273,6 +282,7 @@
mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
mockPortletRes.expects(once()).method("encodeURL").with(eq("/contextPath/image.gif?testParam1=testValue1&testParam2=testValue2")).will(returnValue("/contextPath/image.gif?testParam1=testValue1&testParam2=testValue2"));
mockJspWriter.setExpectedData("/contextPath/image.gif?testParam1=testValue1&testParam2=testValue2");
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
ParamTag paramTag = new ParamTag();
paramTag.setPageContext((PageContext)mockPageCtx.proxy());
@@ -299,6 +309,7 @@
mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
mockPortletRes.expects(once()).method("createRenderURL").will(
returnValue((PortletURL) mockPortletUrl.proxy()));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
tag.setAction("testAction");
Map paramMap = new HashMap();
paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction!input"});
@@ -316,6 +327,7 @@
mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
mockPortletRes.expects(once()).method("createRenderURL").will(
returnValue((PortletURL) mockPortletUrl.proxy()));
+ mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1));
Map paramMap = new HashMap();
Mock mockActionProxy = mock(ActionProxy.class);