diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java index 336b568bb..32d8e7e3c 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java @@ -21,6 +21,7 @@ package org.apache.struts2.portlet.interceptor; +import javax.portlet.PortletConfig; import javax.portlet.PortletContext; import javax.portlet.PortletRequest; import javax.portlet.PortletResponse; @@ -69,6 +70,10 @@ public class PortletAwareInterceptor extends AbstractInterceptor implements Port PortletContext portletContext = (PortletContext) context.get(STRUTS_PORTLET_CONTEXT); ((PortletContextAware) action).setPortletContext(portletContext); } + if (action instanceof PortletConfigAware) { + PortletConfig portletConfig = (PortletConfig)context.get(PORTLET_CONFIG); + ((PortletConfigAware) action).setPortletConfig(portletConfig); + } if (action instanceof PortletPreferencesAware) { PortletRequest request = (PortletRequest) context.get(REQUEST); diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletConfigAware.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletConfigAware.java new file mode 100644 index 000000000..432de2520 --- /dev/null +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletConfigAware.java @@ -0,0 +1,34 @@ +/* + * $Id: $ + * + * 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.interceptor; + +import javax.portlet.PortletConfig; + + +/** + * Actions that wants a reference to the PortletConfig object can + * implement this interface. + * + */ +public interface PortletConfigAware { + + void setPortletConfig(PortletConfig portletConfig); +} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java index 35d9d7b57..f059922ac 100644 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java +++ b/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java @@ -24,6 +24,7 @@ package org.apache.struts2.portlet.interceptor; import java.util.HashMap; import java.util.Map; +import javax.portlet.PortletConfig; import javax.portlet.PortletRequest; import junit.framework.TestCase; @@ -37,10 +38,22 @@ import com.opensymphony.xwork2.ActionInvocation; public class PortletAwareInterceptorTest extends TestCase implements PortletActionConstants { private PortletAwareInterceptor interceptor; + private TestAction action; + private PortletRequest portletRequest; + private PortletConfig portletConfig; + private Map contextMap; + private ActionInvocation invocation; protected void setUp() throws Exception { super.setUp(); interceptor = new PortletAwareInterceptor(); + action = new TestAction(); + portletRequest = EasyMock.createNiceMock(PortletRequest.class); + portletConfig = EasyMock.createNiceMock(PortletConfig.class); + contextMap = new HashMap(); + invocation = EasyMock.createNiceMock(ActionInvocation.class); + EasyMock.expect(invocation.getAction()).andReturn(action); + EasyMock.expect(invocation.getInvocationContext()).andReturn(new ActionContext(contextMap)); } protected void tearDown() throws Exception { @@ -48,21 +61,39 @@ public class PortletAwareInterceptorTest extends TestCase implements PortletActi } public void testPortletRequestIsSet() throws Exception { - PortletRequest request = EasyMock.createMock(PortletRequest.class); - Map ctx = new HashMap(); - ctx.put(REQUEST, request); - PortletRequestAware action = EasyMock.createMock(PortletRequestAware.class); - action.setPortletRequest(request); - - ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class); - EasyMock.expect(invocation.getInvocationContext()).andReturn(new ActionContext(ctx)); - EasyMock.expect(invocation.getAction()).andReturn(action); - - EasyMock.replay(action); + contextMap.put(REQUEST, portletRequest); EasyMock.replay(invocation); - interceptor.intercept(invocation); + assertEquals(portletRequest, action.getPortletRequest()); + } + + public void testPortletConfigIsSet() throws Exception { + contextMap.put(PORTLET_CONFIG, portletConfig); + EasyMock.replay(invocation); + interceptor.intercept(invocation); + assertEquals(portletConfig, action.getPortletConfig()); + } + + public static class TestAction implements PortletRequestAware, PortletConfigAware { + + private PortletRequest request; + private PortletConfig config; + + public void setPortletRequest(PortletRequest request) { + this.request = request; + } + + public void setPortletConfig(PortletConfig portletConfig) { + this.config = portletConfig; + } + + public PortletConfig getPortletConfig() { + return config; + } + + public PortletRequest getPortletRequest() { + return request; + } - EasyMock.verify(action); } }