You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by jo...@apache.org on 2011/06/23 22:18:46 UTC
svn commit: r1139061 [1/5] - in /struts/archive/plugins: ./ src/ src/main/
src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/struts2/
src/main/java/org/apache/struts2/components/
src/main/java/org/apache/struts2/portl...
Author: jogep
Date: Thu Jun 23 20:18:43 2011
New Revision: 1139061
URL: http://svn.apache.org/viewvc?rev=1139061&view=rev
Log:
Move Portlet1 Plugin to archive
Added:
struts/archive/plugins/pom.xml
struts/archive/plugins/src/
struts/archive/plugins/src/main/
struts/archive/plugins/src/main/java/
struts/archive/plugins/src/main/java/org/
struts/archive/plugins/src/main/java/org/apache/
struts/archive/plugins/src/main/java/org/apache/struts2/
struts/archive/plugins/src/main/java/org/apache/struts2/components/
struts/archive/plugins/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletActionConstants.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/ServletContextHolderListener.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DispatcherServlet.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/PortletConfigAware.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/PortletContextAware.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/PortletPreferencesAware.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/PortletRequestAware.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/PortletResponseAware.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptor.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/interceptor/ServletPortletPreferences.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/result/
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/result/PortletActionRedirectResult.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/result/PortletResult.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/PortletHttpSession.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/PortletServletConfig.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/PortletServletContext.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/PortletServletInputStream.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/PortletServletOutputStream.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequest.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequestDispatcher.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/servlet/package.html
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/util/
struts/archive/plugins/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java
struts/archive/plugins/src/main/java/org/apache/struts2/views/
struts/archive/plugins/src/main/java/org/apache/struts2/views/freemarker/
struts/archive/plugins/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java
struts/archive/plugins/src/main/resources/
struts/archive/plugins/src/main/resources/LICENSE.txt
struts/archive/plugins/src/main/resources/NOTICE.txt
struts/archive/plugins/src/main/resources/struts-plugin.xml
struts/archive/plugins/src/test/
struts/archive/plugins/src/test/java/
struts/archive/plugins/src/test/java/org/
struts/archive/plugins/src/test/java/org/apache/
struts/archive/plugins/src/test/java/org/apache/struts2/
struts/archive/plugins/src/test/java/org/apache/struts2/components/
struts/archive/plugins/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/PortletApplicationMapTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/PortletRequestMapTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/PortletSessionMapTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/context/
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/dispatcher/
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/interceptor/
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptorTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/result/
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/servlet/
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/servlet/PortletServletRequestTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/util/
struts/archive/plugins/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/views/
struts/archive/plugins/src/test/java/org/apache/struts2/views/freemarker/
struts/archive/plugins/src/test/java/org/apache/struts2/views/freemarker/PortletFreemarkerResultTest.java
struts/archive/plugins/src/test/java/org/apache/struts2/views/jsp/
struts/archive/plugins/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
Added: struts/archive/plugins/pom.xml
URL: http://svn.apache.org/viewvc/struts/archive/plugins/pom.xml?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/pom.xml (added)
+++ struts/archive/plugins/pom.xml Thu Jun 23 20:18:43 2011
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * $Id: pom.xml 1134395 2011-06-10 17:47:55Z jogep $
+ *
+ * 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.
+ */
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-plugins</artifactId>
+ <version>2.3.1-SNAPSHOT</version>
+ </parent>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-portlet-plugin</artifactId>
+ <packaging>jar</packaging>
+ <name>Struts 2 Portlet Plugin</name>
+
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/struts/struts2/trunk/plugins/portlet/</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/struts/struts2/trunk/plugins/portlet/</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/struts/struts2/trunk/plugins/portlet/</url>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>struts2-junit-plugin</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jsp-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+
+ <!-- Velocity -->
+ <dependency>
+ <groupId>org.apache.velocity</groupId>
+ <artifactId>velocity</artifactId>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.velocity</groupId>
+ <artifactId>velocity-tools</artifactId>
+ <optional>true</optional>
+ </dependency>
+
+ <!-- Portlet -->
+ <dependency>
+ <groupId>portlet-api</groupId>
+ <artifactId>portlet-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>mockobjects</groupId>
+ <artifactId>mockobjects-jdk1.3-j2ee1.3</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>jmock</groupId>
+ <artifactId>jmock</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>jmock</groupId>
+ <artifactId>jmock-cglib</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>mockobjects</groupId>
+ <artifactId>mockobjects-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- Mocks for unit testing (by Spring) -->
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>2.5.6</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-webmvc-portlet</artifactId>
+ <version>2.5.6</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ <version>2.5.6</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-fileupload</groupId>
+ <artifactId>commons-fileupload</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
Added: struts/archive/plugins/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,186 @@
+/*
+ * $Id: PortletUrlRenderer.java 1076544 2011-03-03 07:19:37Z lukaszlenart $
+ *
+ * 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.struts2.components;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.inject.Inject;
+import org.apache.commons.lang.StringUtils;
+import org.apache.struts2.StrutsException;
+import org.apache.struts2.dispatcher.mapper.ActionMapper;
+import org.apache.struts2.portlet.context.PortletActionContext;
+import org.apache.struts2.portlet.util.PortletUrlHelper;
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * Implementation of the {@link UrlRenderer} interface that renders URLs for portlet environments.
+ *
+ * @see UrlRenderer
+ *
+ */
+public class PortletUrlRenderer implements UrlRenderer {
+
+ /**
+ * The servlet renderer used when not executing in a portlet context.
+ */
+ private UrlRenderer servletRenderer = null;
+
+ public PortletUrlRenderer() {
+ this.servletRenderer = new ServletUrlRenderer();
+ }
+
+ @Inject
+ public void setActionMapper(ActionMapper actionMapper) {
+ servletRenderer.setActionMapper(actionMapper);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void renderUrl(Writer writer, UrlProvider urlComponent) {
+ if(PortletActionContext.getPortletContext() == null || "none".equalsIgnoreCase(urlComponent.getPortletUrlType())) {
+ servletRenderer.renderUrl(writer, urlComponent);
+ }
+ else {
+ String action = null;
+ if(urlComponent.getAction() != null) {
+ action = urlComponent.findString(urlComponent.getAction());
+ }
+ String scheme = urlComponent.getHttpServletRequest().getScheme();
+
+ if (urlComponent.getScheme() != null) {
+ scheme = urlComponent.getScheme();
+ }
+
+ String result;
+ urlComponent.setNamespace(urlComponent.determineNamespace(urlComponent.getNamespace(), urlComponent.getStack(), urlComponent.getHttpServletRequest()));
+ if (onlyActionSpecified(urlComponent)) {
+ result = PortletUrlHelper.buildUrl(action, urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(), urlComponent.getPortletUrlType(),
+ urlComponent.getPortletMode(), urlComponent.getWindowState());
+ } else if(onlyValueSpecified(urlComponent)){
+ result = PortletUrlHelper.buildResourceUrl(urlComponent.getValue(), urlComponent.getParameters());
+ }
+ else {
+ result = createDefaultUrl(urlComponent);
+ }
+ String anchor = urlComponent.getAnchor();
+ if (StringUtils.isNotEmpty(anchor)) {
+ result += '#' + urlComponent.findString(anchor);
+ }
+
+ String var = urlComponent.getVar();
+
+ if (var != null) {
+ urlComponent.putInContext(result);
+
+ // add to the request and page scopes as well
+ urlComponent.getHttpServletRequest().setAttribute(var, result);
+ } else {
+ try {
+ writer.write(result);
+ } catch (IOException e) {
+ throw new StrutsException("IOError: " + e.getMessage(), e);
+ }
+ }
+ }
+ }
+
+ private String createDefaultUrl(UrlProvider urlComponent) {
+ String result;
+ 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(),
+ urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState());
+ return result;
+ }
+
+ private boolean onlyValueSpecified(UrlProvider urlComponent) {
+ return urlComponent.getValue() != null && urlComponent.getAction() == null;
+ }
+
+ private boolean onlyActionSpecified(UrlProvider urlComponent) {
+ return urlComponent.getValue() == null && urlComponent.getAction() != null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void renderFormUrl(Form formComponent) {
+ if(PortletActionContext.getPortletContext() == null) {
+ servletRenderer.renderFormUrl(formComponent);
+ }
+ else {
+ String namespace = formComponent.determineNamespace(formComponent.namespace, formComponent.getStack(),
+ formComponent.request);
+ String action = null;
+ if (formComponent.action != null) {
+ action = formComponent.findString(formComponent.action);
+ }
+ else {
+ ActionInvocation ai = (ActionInvocation) formComponent.getStack().getContext().get(ActionContext.ACTION_INVOCATION);
+ action = ai.getProxy().getActionName();
+ }
+ String type = "action";
+ if (StringUtils.isNotEmpty(formComponent.method)) {
+ if ("GET".equalsIgnoreCase(formComponent.method.trim())) {
+ type = "render";
+ }
+ }
+ if (action != null) {
+ String result = PortletUrlHelper.buildUrl(action, namespace, null,
+ formComponent.getParameters(), type, formComponent.portletMode, formComponent.windowState);
+ formComponent.addParameter("action", result);
+
+
+ // name/id: cut out anything between / and . should be the id and
+ // name
+ String id = formComponent.getId();
+ if (id == null) {
+ int slash = action.lastIndexOf('/');
+ int dot = action.indexOf('.', slash);
+ if (dot != -1) {
+ id = action.substring(slash + 1, dot);
+ } else {
+ id = action.substring(slash + 1);
+ }
+ formComponent.addParameter("id", formComponent.escape(id));
+ }
+ }
+ }
+
+ }
+
+ public void beforeRenderUrl(UrlProvider urlComponent) {
+ if(PortletActionContext.getPortletContext() == null) {
+ servletRenderer.beforeRenderUrl(urlComponent);
+ }
+ }
+
+ public void setServletRenderer(UrlRenderer nonPortletRenderer) {
+ this.servletRenderer = nonPortletRenderer;
+
+ }
+
+}
Added: struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletActionConstants.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletActionConstants.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletActionConstants.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletActionConstants.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,140 @@
+/*
+ * $Id: PortletActionConstants.java 671156 2008-06-24 12:33:59Z nilsga $
+ *
+ * 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.struts2.portlet;
+
+import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.portlet.dispatcher.DispatcherServlet;
+
+/**
+ * Interface defining some constants used in the Struts portlet implementation
+ *
+ */
+public interface PortletActionConstants {
+ /**
+ * Default action name to use when no default action has been configured in the portlet
+ * init parameters.
+ */
+ String DEFAULT_ACTION_NAME = "default";
+
+ /**
+ * Action name parameter name
+ */
+ String ACTION_PARAM = "struts.portlet.action";
+
+ /**
+ * Key for parameter holding the last executed portlet mode.
+ */
+ String MODE_PARAM = "struts.portlet.mode";
+
+ /**
+ * Key used for looking up and storing the portlet phase
+ */
+ String PHASE = "struts.portlet.phase";
+
+ /**
+ * Constant used for the render phase (
+ * {@link javax.portlet.Portlet#render(javax.portlet.RenderRequest, javax.portlet.RenderResponse)})
+ */
+ Integer RENDER_PHASE = new Integer(1);
+
+ /**
+ * Constant used for the event phase (
+ * {@link javax.portlet.Portlet#processAction(javax.portlet.ActionRequest, javax.portlet.ActionResponse)})
+ */
+ Integer EVENT_PHASE = new Integer(2);
+
+ /**
+ * Key used for looking up and storing the
+ * {@link javax.portlet.PortletRequest}
+ */
+ String REQUEST = "struts.portlet.request";
+
+ /**
+ * Key used for looking up and storing the
+ * {@link javax.portlet.PortletResponse}
+ */
+ String RESPONSE = "struts.portlet.response";
+
+ /**
+ * Key used for looking up and storing the action that was invoked in the event phase.
+ */
+ String EVENT_ACTION = "struts.portlet.eventAction";
+
+ /**
+ * Key used for looking up and storing the
+ * {@link javax.portlet.PortletConfig}
+ */
+ String PORTLET_CONFIG = "struts.portlet.config";
+
+ /**
+ * Name of the action used as error handler
+ */
+ String ERROR_ACTION = "errorHandler";
+
+ /**
+ * Key for the portlet namespace stored in the
+ * {@link org.apache.struts2.portlet.context.PortletActionContext}.
+ */
+ String PORTLET_NAMESPACE = "struts.portlet.portletNamespace";
+
+ /**
+ * Key for the mode-to-namespace map stored in the
+ * {@link org.apache.struts2.portlet.context.PortletActionContext}.
+ */
+ String MODE_NAMESPACE_MAP = "struts.portlet.modeNamespaceMap";
+
+ /**
+ * Key for the default action name for the portlet, stored in the
+ * {@link org.apache.struts2.portlet.context.PortletActionContext}.
+ */
+ String DEFAULT_ACTION_FOR_MODE = "struts.portlet.defaultActionForMode";
+
+ /**
+ * Key for request attribute indicating if the action has been reset.
+ */
+ String ACTION_RESET = "struts.portlet.actionReset";
+
+ /**
+ * Key for session attribute indicating the location of the render direct action.
+ */
+ String RENDER_DIRECT_LOCATION = "struts.portlet.renderDirectLocation";
+
+ /**
+ * Key for the dispatch instruction for the {@link DispatcherServlet}
+ */
+ String DISPATCH_TO = "struts.portlet.dispatchTo";
+
+ /**
+ * Session key where the value stack from the event phase is stored.
+ */
+ String STACK_FROM_EVENT_PHASE = "struts.portlet.valueStackFromEventPhase";
+
+ /**
+ * Default name of dispatcher servlet in web.xml
+ */
+ String DEFAULT_DISPATCHER_SERVLET_NAME = "Struts2PortletDispatcherServlet";
+
+ /**
+ * Key for the action mapping in the context
+ */
+ String ACTION_MAPPING = ServletActionContext.ACTION_MAPPING;
+}
Added: struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,207 @@
+/*
+ * $Id: PortletApplicationMap.java 651946 2008-04-27 13:41:38Z apetrelli $
+ *
+ * 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.struts2.portlet;
+
+import java.io.Serializable;
+import java.util.AbstractMap;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.portlet.PortletContext;
+
+/**
+ * Portlet specific {@link java.util.Map} implementation representing the
+ * {@link javax.portlet.PortletContext} of a Portlet.
+ *
+ */
+public class PortletApplicationMap extends AbstractMap implements Serializable {
+
+ private static final long serialVersionUID = 2296107511063504414L;
+
+ private PortletContext context;
+
+ private Set<Object> entries;
+
+ /**
+ * Creates a new map object given the {@link PortletContext}.
+ *
+ * @param ctx The portlet context.
+ */
+ public PortletApplicationMap(PortletContext ctx) {
+ this.context = ctx;
+ }
+
+ /**
+ * Removes all entries from the Map and removes all attributes from the
+ * portlet context.
+ */
+ public void clear() {
+ entries = null;
+
+ Enumeration e = context.getAttributeNames();
+
+ while (e.hasMoreElements()) {
+ context.removeAttribute(e.nextElement().toString());
+ }
+ }
+
+ /**
+ * Creates a Set of all portlet context attributes as well as context init
+ * parameters.
+ *
+ * @return a Set of all portlet context attributes as well as context init
+ * parameters.
+ */
+ public Set entrySet() {
+ if (entries == null) {
+ entries = new HashSet<Object>();
+
+ // Add portlet context attributes
+ Enumeration enumeration = context.getAttributeNames();
+
+ while (enumeration.hasMoreElements()) {
+ final String key = enumeration.nextElement().toString();
+ final Object value = context.getAttribute(key);
+ entries.add(new Map.Entry() {
+ public boolean equals(Object obj) {
+ Map.Entry entry = (Map.Entry) obj;
+
+ return ((key == null) ? (entry.getKey() == null) : key
+ .equals(entry.getKey()))
+ && ((value == null) ? (entry.getValue() == null)
+ : value.equals(entry.getValue()));
+ }
+
+ public int hashCode() {
+ return ((key == null) ? 0 : key.hashCode())
+ ^ ((value == null) ? 0 : value.hashCode());
+ }
+
+ public Object getKey() {
+ return key;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object setValue(Object obj) {
+ context.setAttribute(key.toString(), obj);
+
+ return value;
+ }
+ });
+ }
+
+ // Add portlet context init params
+ enumeration = context.getInitParameterNames();
+
+ while (enumeration.hasMoreElements()) {
+ final String key = enumeration.nextElement().toString();
+ final Object value = context.getInitParameter(key);
+ entries.add(new Map.Entry() {
+ public boolean equals(Object obj) {
+ Map.Entry entry = (Map.Entry) obj;
+
+ return ((key == null) ? (entry.getKey() == null) : key
+ .equals(entry.getKey()))
+ && ((value == null) ? (entry.getValue() == null)
+ : value.equals(entry.getValue()));
+ }
+
+ public int hashCode() {
+ return ((key == null) ? 0 : key.hashCode())
+ ^ ((value == null) ? 0 : value.hashCode());
+ }
+
+ public Object getKey() {
+ return key;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object setValue(Object obj) {
+ context.setAttribute(key.toString(), obj);
+
+ return value;
+ }
+ });
+ }
+ }
+
+ return entries;
+ }
+
+ /**
+ * Returns the portlet context attribute or init parameter based on the
+ * given key. If the entry is not found, <tt>null</tt> is returned.
+ *
+ * @param key
+ * the entry key.
+ * @return the portlet context attribute or init parameter or <tt>null</tt>
+ * if the entry is not found.
+ */
+ public Object get(Object key) {
+ // Try context attributes first, then init params
+ // This gives the proper shadowing effects
+ String keyString = key.toString();
+ Object value = context.getAttribute(keyString);
+
+ return (value == null) ? context.getInitParameter(keyString) : value;
+ }
+
+ /**
+ * Sets a portlet context attribute given a attribute name and value.
+ *
+ * @param key
+ * the name of the attribute.
+ * @param value
+ * the value to set.
+ * @return the attribute that was just set.
+ */
+ public Object put(Object key, Object value) {
+ entries = null;
+ context.setAttribute(key.toString(), value);
+
+ return get(key);
+ }
+
+ /**
+ * Removes the specified portlet context attribute.
+ *
+ * @param key
+ * the attribute to remove.
+ * @return the entry that was just removed.
+ */
+ public Object remove(Object key) {
+ entries = null;
+
+ Object value = get(key);
+ context.removeAttribute(key.toString());
+
+ return value;
+ }
+}
Added: struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,158 @@
+/*
+ * $Id: PortletRequestMap.java 651946 2008-04-27 13:41:38Z apetrelli $
+ *
+ * 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.struts2.portlet;
+
+import java.util.AbstractMap;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.portlet.PortletRequest;
+
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+
+/**
+ * A simple implementation of the {@link java.util.Map} interface to handle a collection of request attributes.
+ *
+ */
+public class PortletRequestMap extends AbstractMap {
+
+ private static final Logger LOG = LoggerFactory.getLogger(PortletRequestMap.class);
+
+ private Set<Object> entries = null;
+ private PortletRequest request = null;
+
+ /**
+ * Saves the request to use as the backing for getting and setting values
+ *
+ * @param request the portlet request.
+ */
+ public PortletRequestMap(PortletRequest request) {
+ this.request = request;
+ }
+
+ /**
+ * Removes all attributes from the request as well as clears entries in this
+ * map.
+ */
+ public void clear() {
+ entries = null;
+ Enumeration keys = request.getAttributeNames();
+
+ while (keys.hasMoreElements()) {
+ String key = (String) keys.nextElement();
+ request.removeAttribute(key);
+ }
+ }
+
+ /**
+ * Returns a Set of attributes from the portlet request.
+ *
+ * @return a Set of attributes from the portlet request.
+ */
+ public Set entrySet() {
+ if (entries == null) {
+ entries = new HashSet<Object>();
+
+ Enumeration enumeration = request.getAttributeNames();
+
+ while (enumeration.hasMoreElements()) {
+ final String key = enumeration.nextElement().toString();
+ final Object value = request.getAttribute(key);
+ entries.add(new Entry() {
+ public boolean equals(Object obj) {
+ Entry entry = (Entry) obj;
+
+ return ((key == null) ? (entry.getKey() == null) : key
+ .equals(entry.getKey()))
+ && ((value == null) ? (entry.getValue() == null)
+ : value.equals(entry.getValue()));
+ }
+
+ public int hashCode() {
+ return ((key == null) ? 0 : key.hashCode())
+ ^ ((value == null) ? 0 : value.hashCode());
+ }
+
+ public Object getKey() {
+ return key;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object setValue(Object obj) {
+ request.setAttribute(key, obj);
+
+ return value;
+ }
+ });
+ }
+ }
+
+ return entries;
+ }
+
+ /**
+ * Returns the request attribute associated with the given key or
+ * <tt>null</tt> if it doesn't exist.
+ *
+ * @param key the name of the request attribute.
+ * @return the request attribute or <tt>null</tt> if it doesn't exist.
+ */
+ public Object get(Object key) {
+ return request.getAttribute(key.toString());
+ }
+
+ /**
+ * Saves an attribute in the request.
+ *
+ * @param key the name of the request attribute.
+ * @param value the value to set.
+ * @return the object that was just set.
+ */
+ public Object put(Object key, Object value) {
+ entries = null;
+ request.setAttribute(key.toString(), value);
+
+ return get(key);
+ }
+
+ /**
+ * Removes the specified request attribute.
+ *
+ * @param key the name of the attribute to remove.
+ * @return the value that was removed or <tt>null</tt> if the value was
+ * not found (and hence, not removed).
+ */
+ public Object remove(Object key) {
+ entries = null;
+
+ Object value = get(key);
+ request.removeAttribute(key.toString());
+
+ return value;
+ }
+
+}
Added: struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,163 @@
+/*
+ * $Id: PortletSessionMap.java 651946 2008-04-27 13:41:38Z apetrelli $
+ *
+ * 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.struts2.portlet;
+
+import java.util.AbstractMap;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletSession;
+
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+
+/**
+ * A simple implementation of the {@link java.util.Map} interface to handle a collection of portlet session
+ * attributes. The {@link #entrySet()} method enumerates over all session attributes and creates a Set of entries.
+ * Note, this will occur lazily - only when the entry set is asked for.
+ *
+ */
+public class PortletSessionMap extends AbstractMap {
+
+ private static final Logger LOG = LoggerFactory.getLogger(PortletSessionMap.class);
+
+ private PortletSession session = null;
+ private Set<Object> entries = null;
+
+ /**
+ * Creates a new session map given a portlet request.
+ *
+ * @param request the portlet request object.
+ */
+ public PortletSessionMap(PortletRequest request) {
+ this.session = request.getPortletSession();
+ }
+
+ /**
+ * @see java.util.Map#entrySet()
+ */
+ public Set entrySet() {
+ synchronized (session) {
+ if (entries == null) {
+ entries = new HashSet<Object>();
+
+ Enumeration enumeration = session.getAttributeNames();
+
+ while (enumeration.hasMoreElements()) {
+ final String key = enumeration.nextElement().toString();
+ final Object value = session.getAttribute(key);
+ entries.add(new Map.Entry() {
+ public boolean equals(Object obj) {
+ Map.Entry entry = (Map.Entry) obj;
+
+ return ((key == null) ? (entry.getKey() == null)
+ : key.equals(entry.getKey()))
+ && ((value == null) ? (entry.getValue() == null)
+ : value.equals(entry.getValue()));
+ }
+
+ public int hashCode() {
+ return ((key == null) ? 0 : key.hashCode())
+ ^ ((value == null) ? 0 : value.hashCode());
+ }
+
+ public Object getKey() {
+ return key;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object setValue(Object obj) {
+ session.setAttribute(key, obj);
+
+ return value;
+ }
+ });
+ }
+ }
+ }
+
+ return entries;
+ }
+
+ /**
+ * Returns the session attribute associated with the given key or
+ * <tt>null</tt> if it doesn't exist.
+ *
+ * @param key the name of the session attribute.
+ * @return the session attribute or <tt>null</tt> if it doesn't exist.
+ */
+ public Object get(Object key) {
+ synchronized (session) {
+ return session.getAttribute(key.toString());
+ }
+ }
+
+ /**
+ * Saves an attribute in the session.
+ *
+ * @param key the name of the session attribute.
+ * @param value the value to set.
+ * @return the object that was just set.
+ */
+ public Object put(Object key, Object value) {
+ synchronized (session) {
+ entries = null;
+ session.setAttribute(key.toString(), value);
+
+ return get(key);
+ }
+ }
+
+ /**
+ * @see java.util.Map#clear()
+ */
+ public void clear() {
+ synchronized (session) {
+ entries = null;
+ session.invalidate();
+ }
+ }
+
+ /**
+ * Removes the specified session attribute.
+ *
+ * @param key the name of the attribute to remove.
+ * @return the value that was removed or <tt>null</tt> if the value was
+ * not found (and hence, not removed).
+ */
+ public Object remove(Object key) {
+ synchronized (session) {
+ entries = null;
+
+ Object value = get(key);
+ session.removeAttribute(key.toString());
+
+ return value;
+ }
+ }
+}
Added: struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,241 @@
+/*
+ * $Id: PortletActionContext.java 724030 2008-12-06 19:32:29Z nilsga $
+ *
+ * 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.struts2.portlet.context;
+
+import java.util.Map;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletResponse;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import org.apache.struts2.StrutsStatics;
+import org.apache.struts2.dispatcher.mapper.ActionMapping;
+import org.apache.struts2.portlet.PortletActionConstants;
+
+import com.opensymphony.xwork2.ActionContext;
+
+
+/**
+ * PortletActionContext. ActionContext thread local for the portlet environment.
+ *
+ * @version $Revision: 724030 $ $Date: 2008-12-06 20:32:29 +0100 (Sa, 06 Dez 2008) $
+ */
+public class PortletActionContext implements PortletActionConstants {
+
+ /**
+ * Get the PortletConfig of the portlet that is executing.
+ *
+ * @return The PortletConfig of the executing portlet.
+ */
+ public static PortletConfig getPortletConfig() {
+ return (PortletConfig) getContext().get(PORTLET_CONFIG);
+ }
+
+ /**
+ * Get the RenderRequest. Can only be invoked in the render phase.
+ *
+ * @return The current RenderRequest.
+ * @throws IllegalStateException If the method is invoked in the wrong phase.
+ */
+ public static RenderRequest getRenderRequest() {
+ if (!isRender()) {
+ throw new IllegalStateException(
+ "RenderRequest cannot be obtained in event phase");
+ }
+ return (RenderRequest) getContext().get(REQUEST);
+ }
+
+ /**
+ * Get the RenderResponse. Can only be invoked in the render phase.
+ *
+ * @return The current RenderResponse.
+ * @throws IllegalStateException If the method is invoked in the wrong phase.
+ */
+ public static RenderResponse getRenderResponse() {
+ if (!isRender()) {
+ throw new IllegalStateException(
+ "RenderResponse cannot be obtained in event phase");
+ }
+ return (RenderResponse) getContext().get(RESPONSE);
+ }
+
+ /**
+ * Get the ActionRequest. Can only be invoked in the event phase.
+ *
+ * @return The current ActionRequest.
+ * @throws IllegalStateException If the method is invoked in the wrong phase.
+ */
+ public static ActionRequest getActionRequest() {
+ if (!isEvent()) {
+ throw new IllegalStateException(
+ "ActionRequest cannot be obtained in render phase");
+ }
+ return (ActionRequest) getContext().get(REQUEST);
+ }
+
+ /**
+ * Get the ActionRequest. Can only be invoked in the event phase.
+ *
+ * @return The current ActionRequest.
+ * @throws IllegalStateException If the method is invoked in the wrong phase.
+ */
+ public static ActionResponse getActionResponse() {
+ if (!isEvent()) {
+ throw new IllegalStateException(
+ "ActionResponse cannot be obtained in render phase");
+ }
+ return (ActionResponse) getContext().get(RESPONSE);
+ }
+
+ /**
+ * Get the action namespace of the portlet. Used to organize actions for multiple portlets in
+ * the same portlet application.
+ *
+ * @return The portlet namespace as defined in <code>portlet.xml</code> and <code>struts.xml</code>
+ */
+ public static String getPortletNamespace() {
+ return (String)getContext().get(PORTLET_NAMESPACE);
+ }
+
+ /**
+ * Get the current PortletRequest.
+ *
+ * @return The current PortletRequest.
+ */
+ public static PortletRequest getRequest() {
+ return (PortletRequest) getContext().get(REQUEST);
+ }
+
+ /**
+ * Convenience setter for the portlet request.
+ * @param request
+ */
+ public static void setRequest(PortletRequest request) {
+ getContext().put(REQUEST, request);
+ }
+
+ /**
+ * Get the current PortletResponse
+ *
+ * @return The current PortletResponse.
+ */
+ public static PortletResponse getResponse() {
+ return (PortletResponse) getContext().get(RESPONSE);
+ }
+
+ /**
+ * Convenience setter for the portlet response.
+ * @param response
+ */
+ public static void setResponse(PortletResponse response) {
+ getContext().put(RESPONSE, response);
+ }
+
+ /**
+ * Get the phase that the portlet is executing in.
+ *
+ * @return {@link PortletActionConstants#RENDER_PHASE} in render phase, and
+ * {@link PortletActionConstants#EVENT_PHASE} in the event phase.
+ */
+ public static Integer getPhase() {
+ return (Integer) getContext().get(PHASE);
+ }
+
+ /**
+ * @return <code>true</code> if the Portlet is executing in render phase.
+ */
+ public static boolean isRender() {
+ return PortletActionConstants.RENDER_PHASE.equals(getPhase());
+ }
+
+ /**
+ * @return <code>true</code> if the Portlet is executing in the event phase.
+ */
+ public static boolean isEvent() {
+ return PortletActionConstants.EVENT_PHASE.equals(getPhase());
+ }
+
+ /**
+ * @return The current ActionContext.
+ */
+ private static ActionContext getContext() {
+ return ActionContext.getContext();
+ }
+
+ /**
+ * Check to see if the current request is a portlet request.
+ *
+ * @return <code>true</code> if the current request is a portlet request.
+ */
+ public static boolean isPortletRequest() {
+ return getRequest() != null;
+ }
+
+ /**
+ * Get the default action mapping for the current mode.
+ *
+ * @return The default action mapping for the current portlet mode.
+ */
+ public static ActionMapping getDefaultActionForMode() {
+ return (ActionMapping)getContext().get(DEFAULT_ACTION_FOR_MODE);
+ }
+
+ /**
+ * Get the namespace to mode mappings.
+ *
+ * @return The map of the namespaces for each mode.
+ */
+ public static Map getModeNamespaceMap() {
+ return (Map)getContext().get(MODE_NAMESPACE_MAP);
+ }
+
+ /**
+ * Get the portlet context.
+ * @return The portlet context.
+ */
+ public static PortletContext getPortletContext() {
+ return (PortletContext)getContext().get(StrutsStatics.STRUTS_PORTLET_CONTEXT);
+ }
+
+ /**
+ * Convenience setter for the portlet context.
+ * @param context
+ */
+ public static void setPortletContext(PortletContext context) {
+ getContext().put(StrutsStatics.STRUTS_PORTLET_CONTEXT, context);
+ }
+
+ /**
+ * Gets the action mapping for this context
+ *
+ * @return The action mapping
+ */
+ public static ActionMapping getActionMapping() {
+ return (ActionMapping) getContext().get(ACTION_MAPPING);
+ }
+
+}
Added: struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,52 @@
+/*
+ * $Id: PreparatorServlet.java 1099157 2011-05-03 17:53:55Z jogep $
+ *
+ * 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.struts2.portlet.context;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+
+import org.apache.struts2.StrutsStatics;
+
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+
+/**
+ * @deprecated
+ *
+ * This servlet has been deprecated. Do not use it (WW-2101)
+ *
+ */
+public class PreparatorServlet extends HttpServlet implements StrutsStatics {
+
+ private static final long serialVersionUID = 1853399729352984089L;
+
+ private final static Logger LOG = LoggerFactory.getLogger(PreparatorServlet.class);
+
+ @Override
+ public void init(ServletConfig config) throws ServletException {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("The preparator servlet has been deprecated. It can safely be removed from your web.xml file");
+ }
+ }
+
+}
Added: struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/ServletContextHolderListener.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/ServletContextHolderListener.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/ServletContextHolderListener.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/portlet/context/ServletContextHolderListener.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,69 @@
+/*
+ * $Id: ServletContextHolderListener.java 1099157 2011-05-03 17:53:55Z jogep $
+ *
+ * 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.struts2.portlet.context;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+
+/**
+ * @deprecated
+ *
+ * This listener has been deprecated. Do not use it. (WW-2101)
+ *
+ */
+public class ServletContextHolderListener implements ServletContextListener {
+
+ private static ServletContext context = null;
+
+ private final static Logger LOG = LoggerFactory.getLogger(ServletContextHolderListener.class);
+
+ /**
+ * @return The current servlet context
+ */
+ public static ServletContext getServletContext() {
+ return context;
+ }
+
+ /**
+ * Stores the reference to the {@link ServletContext}.
+ *
+ * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
+ */
+ public void contextInitialized(ServletContextEvent event) {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("The ServletContextHolderListener has been deprecated. It can safely be removed from your web.xml file");
+ }
+ context = event.getServletContext();
+ }
+
+ /**
+ * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
+ */
+ public void contextDestroyed(ServletContextEvent event) {
+ context = null;
+ }
+
+}
Added: struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,73 @@
+/*
+ * $Id: DirectRenderFromEventAction.java 651946 2008-04-27 13:41:38Z apetrelli $
+ *
+ * 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.struts2.portlet.dispatcher;
+
+import com.opensymphony.xwork2.Action;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import org.apache.struts2.interceptor.SessionAware;
+import org.apache.struts2.portlet.PortletActionConstants;
+
+/**
+ * When a portlet is targetted for an <code>event</code>, the portlet will receive two
+ * portlet requests, one for the <code>event</code> phase, and then followed by a <code>render</code>
+ * operation. When in the <code>event</code> phase, the action that is executed can't render
+ * any output. This means that if an action in the XWork configuration is executed in the event
+ * phase, and the action is set up with a result that should render something, the result can't
+ * immediately be executed. The portlet needs to "wait" to the render phase to do the
+ * rendering.
+ * <p/>
+ * When the {@link org.apache.struts2.portlet.result.PortletResult} detects such a
+ * scenario, instead of executing the actual view, it prepares a couple of render parameters
+ * specifying this action and the location of the view, which then will be executed in the
+ * following render request.
+ */
+public class DirectRenderFromEventAction implements SessionAware, PortletActionConstants, Action, Serializable {
+
+ private static final long serialVersionUID = -1814807772308405785L;
+
+ private String location = null;
+
+ /**
+ * Get the location of the view.
+ *
+ * @return Returns the location.
+ */
+ public String getLocation() {
+ return location;
+ }
+
+ /**
+ * Always return success.
+ *
+ * @return SUCCESS
+ */
+ public String execute() throws Exception {
+ return SUCCESS;
+ }
+
+ public void setSession(Map session) {
+ location = (String)session.get(RENDER_DIRECT_LOCATION);
+ }
+}
Added: struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DispatcherServlet.java
URL: http://svn.apache.org/viewvc/struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DispatcherServlet.java?rev=1139061&view=auto
==============================================================================
--- struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DispatcherServlet.java (added)
+++ struts/archive/plugins/src/main/java/org/apache/struts2/portlet/dispatcher/DispatcherServlet.java Thu Jun 23 20:18:43 2011
@@ -0,0 +1,56 @@
+/*
+ * $Id: DispatcherServlet.java 1076544 2011-03-03 07:19:37Z lukaszlenart $
+ *
+ * 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.struts2.portlet.dispatcher;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.struts2.dispatcher.StrutsRequestWrapper;
+import org.apache.struts2.portlet.PortletActionConstants;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class DispatcherServlet extends HttpServlet implements PortletActionConstants {
+
+ private static final long serialVersionUID = -266147033645951967L;
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ String dispatchTo = (String) request.getAttribute(DISPATCH_TO);
+ HttpServletRequest wrapper = wrapRequestIfNecessary(request);
+ if(StringUtils.isNotEmpty(dispatchTo)) {
+ request.getRequestDispatcher(dispatchTo).include(wrapper, response);
+ }
+ }
+
+ private HttpServletRequest wrapRequestIfNecessary(HttpServletRequest request) {
+ if(!(request instanceof StrutsRequestWrapper)) {
+ return new StrutsRequestWrapper(request);
+ }
+ else {
+ return request;
+ }
+ }
+
+}