From eac1e0efa7cd60049d7ea5302dc67351c25c9cb9 Mon Sep 17 00:00:00 2001 From: jdyer1 Date: Mon, 30 Oct 2023 08:58:57 -0500 Subject: [PATCH] WW-5141 - delete portlet code --- plugins/portlet-junit/README.md | 2 - plugins/portlet-junit/pom.xml | 58 - .../struts2/junit/StrutsPortletTestCase.java | 107 -- plugins/portlet-junit/src/site/site.xml | 56 - .../junit/StrutsPortletTestCaseTest.java | 64 - .../src/test/resources/struts.xml | 34 - plugins/portlet-mocks/README.md | 2 - plugins/portlet-mocks/pom.xml | 56 - .../mock/web/portlet/MockActionRequest.java | 86 - .../mock/web/portlet/MockActionResponse.java | 132 -- .../struts2/mock/web/portlet/MockBaseURL.java | 161 -- .../mock/web/portlet/MockCacheControl.java | 78 - .../web/portlet/MockClientDataRequest.java | 135 -- .../struts2/mock/web/portlet/MockEvent.java | 91 - .../mock/web/portlet/MockEventRequest.java | 90 - .../mock/web/portlet/MockEventResponse.java | 35 - .../mock/web/portlet/MockMimeResponse.java | 259 --- .../portlet/MockMultipartActionRequest.java | 101 -- .../mock/web/portlet/MockPortalContext.java | 106 -- .../mock/web/portlet/MockPortletConfig.java | 194 -- .../mock/web/portlet/MockPortletContext.java | 285 --- .../web/portlet/MockPortletPreferences.java | 123 -- .../mock/web/portlet/MockPortletRequest.java | 565 ------ .../portlet/MockPortletRequestDispatcher.java | 87 - .../mock/web/portlet/MockPortletResponse.java | 202 --- .../mock/web/portlet/MockPortletSession.java | 250 --- .../mock/web/portlet/MockPortletURL.java | 121 -- .../mock/web/portlet/MockRenderRequest.java | 94 - .../mock/web/portlet/MockRenderResponse.java | 90 - .../mock/web/portlet/MockResourceRequest.java | 132 -- .../web/portlet/MockResourceResponse.java | 41 - .../mock/web/portlet/MockResourceURL.java | 73 - .../web/portlet/MockStateAwareResponse.java | 165 -- .../ServletWrappingPortletContext.java | 161 -- .../multipart/MultipartActionRequest.java | 41 - .../web/portlet/multipart/package-info.java | 38 - .../mock/web/portlet/package-info.java | 35 - plugins/portlet-mocks/src/site/site.xml | 56 - .../StrutsSpringPortletMockObjectsTest.java | 1604 ----------------- .../src/test/resources/applicationContext.xml | 36 - plugins/portlet-tiles/README.md | 2 - plugins/portlet-tiles/pom.xml | 57 - .../views/tiles/PortletTilesResult.java | 111 -- .../tiles/request/portlet/PortletRequest.java | 344 ---- .../request/portlet/RenderPortletRequest.java | 47 - .../delegate/MimeResponseDelegate.java | 72 - .../delegate/PortletRequestDelegate.java | 79 - .../portlet/delegate/RequestDelegate.java | 43 - .../portlet/delegate/ResponseDelegate.java | 70 - .../portlet/delegate/package-info.java | 24 - .../extractor/ApplicationScopeExtractor.java | 66 - .../portlet/extractor/HeaderExtractor.java | 74 - .../extractor/InitParameterExtractor.java | 57 - .../portlet/extractor/ParameterExtractor.java | 56 - .../extractor/RequestScopeExtractor.java | 66 - .../extractor/SessionScopeExtractor.java | 88 - .../StateAwareParameterExtractor.java | 53 - .../portlet/extractor/package-info.java | 24 - .../tiles/request/portlet/package-info.java | 24 - .../src/main/resources/LICENSE.txt | 174 -- .../src/main/resources/NOTICE.txt | 5 - .../src/main/resources/struts-plugin.xml | 40 - plugins/portlet-tiles/src/site/site.xml | 56 - .../request/portlet/PortletRequestTest.java | 424 ----- .../portlet/RenderPortletRequestTest.java | 69 - .../delegate/MimeResponseDelegateTest.java | 132 -- .../delegate/PortletRequestDelegateTest.java | 83 - .../ApplicationScopeExtractorTest.java | 106 -- .../extractor/HeaderExtractorTest.java | 117 -- .../extractor/InitParameterExtractorTest.java | 83 - .../extractor/ParameterExtractorTest.java | 83 - .../extractor/RequestScopeExtractorTest.java | 107 -- .../extractor/SessionScopeExtractorTest.java | 154 -- .../StateAwareParameterExtractorTest.java | 50 - plugins/portlet/README.md | 2 - plugins/portlet/pom.xml | 101 -- .../components/PortletUrlRenderer.java | 211 --- .../portlet/PortletApplicationMap.java | 208 --- .../struts2/portlet/PortletConstants.java | 133 -- .../apache/struts2/portlet/PortletPhase.java | 64 - .../struts2/portlet/PortletRequestMap.java | 158 -- .../struts2/portlet/PortletSessionMap.java | 154 -- .../portlet/action/PortletContextAware.java | 30 - .../action/PortletPreferencesAware.java | 39 - .../portlet/action/PortletRequestAware.java | 30 - .../portlet/action/PortletResponseAware.java | 30 - .../portlet/context/PortletActionContext.java | 233 --- .../DirectRenderFromEventAction.java | 75 - .../portlet/dispatcher/DispatcherServlet.java | 53 - .../portlet/dispatcher/Jsr168Dispatcher.java | 674 ------- .../portlet/dispatcher/Jsr286Dispatcher.java | 90 - .../interceptor/PortletAwareInterceptor.java | 89 - .../interceptor/PortletPrincipalProxy.java | 80 - .../interceptor/PortletStateInterceptor.java | 95 - .../ServletPortletPreferences.java | 93 - .../result/PortletActionRedirectResult.java | 263 --- .../struts2/portlet/result/PortletResult.java | 263 --- .../portlet/result/PortletResultHelper.java | 64 - .../result/PortletResultHelperJSR168.java | 72 - .../result/PortletResultHelperJSR286.java | 70 - .../portlet/result/PortletVelocityResult.java | 270 --- .../portlet/servlet/PortletHttpSession.java | 202 --- .../portlet/servlet/PortletServletConfig.java | 79 - .../servlet/PortletServletContext.java | 385 ---- .../servlet/PortletServletInputStream.java | 134 -- .../servlet/PortletServletOutputStream.java | 97 - .../servlet/PortletServletRequest.java | 767 -------- .../PortletServletRequestDispatcher.java | 68 - .../servlet/PortletServletResponse.java | 257 --- .../servlet/PortletServletResponseJSR286.java | 182 -- .../struts2/portlet/servlet/package.html | 25 - .../portlet/util/PortletUrlHelper.java | 346 ---- .../portlet/util/PortletUrlHelperJSR286.java | 73 - .../freemarker/PortletFreemarkerResult.java | 326 ---- .../portlet/src/main/resources/LICENSE.txt | 174 -- plugins/portlet/src/main/resources/NOTICE.txt | 5 - .../src/main/resources/struts-plugin.xml | 76 - plugins/portlet/src/site/site.xml | 56 - .../struts2/StrutsTestCasePortletTests.java | 224 --- .../struts2/components/PortletAction.java | 29 - .../components/PortletUrlRendererTest.java | 79 - .../portlet/PortletApplicationMapTest.java | 179 -- .../portlet/PortletRequestMapTest.java | 107 -- .../portlet/PortletSessionMapTest.java | 122 -- .../context/PortletActionContextTest.java | 207 --- .../dispatcher/Jsr168DispatcherTest.java | 286 --- .../dispatcher/Jsr286DispatcherTest.java | 339 ---- .../PortletAwareInterceptorTest.java | 86 - .../PortletStateInterceptorTest.java | 159 -- .../portlet/result/PortletResultTest.java | 250 --- .../portlet/util/PortletUrlHelperTest.java | 202 --- .../struts2/views/jsp/PortletUrlTagTest.java | 469 ----- plugins/portlet/src/test/resources/log4j2.xml | 33 - plugins/portlet/src/test/resources/struts.xml | 36 - 134 files changed, 18789 deletions(-) delete mode 100644 plugins/portlet-junit/README.md delete mode 100644 plugins/portlet-junit/pom.xml delete mode 100644 plugins/portlet-junit/src/main/java/org/apache/struts2/junit/StrutsPortletTestCase.java delete mode 100644 plugins/portlet-junit/src/site/site.xml delete mode 100644 plugins/portlet-junit/src/test/java/org/apache/struts2/junit/StrutsPortletTestCaseTest.java delete mode 100644 plugins/portlet-junit/src/test/resources/struts.xml delete mode 100644 plugins/portlet-mocks/README.md delete mode 100644 plugins/portlet-mocks/pom.xml delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionRequest.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionResponse.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockBaseURL.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockCacheControl.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockClientDataRequest.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEvent.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventRequest.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventResponse.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMimeResponse.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMultipartActionRequest.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortalContext.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletConfig.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletContext.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletPreferences.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequest.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequestDispatcher.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletResponse.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletSession.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletURL.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderRequest.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderResponse.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceRequest.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceResponse.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceURL.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockStateAwareResponse.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/ServletWrappingPortletContext.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/MultipartActionRequest.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/package-info.java delete mode 100644 plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/package-info.java delete mode 100644 plugins/portlet-mocks/src/site/site.xml delete mode 100644 plugins/portlet-mocks/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java delete mode 100644 plugins/portlet-mocks/src/test/resources/applicationContext.xml delete mode 100644 plugins/portlet-tiles/README.md delete mode 100644 plugins/portlet-tiles/pom.xml delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/struts2/views/tiles/PortletTilesResult.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/PortletRequest.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/RenderPortletRequest.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/MimeResponseDelegate.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/PortletRequestDelegate.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/RequestDelegate.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/ResponseDelegate.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/package-info.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/ApplicationScopeExtractor.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/HeaderExtractor.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/InitParameterExtractor.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/ParameterExtractor.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/RequestScopeExtractor.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/SessionScopeExtractor.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/StateAwareParameterExtractor.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/package-info.java delete mode 100644 plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/package-info.java delete mode 100644 plugins/portlet-tiles/src/main/resources/LICENSE.txt delete mode 100644 plugins/portlet-tiles/src/main/resources/NOTICE.txt delete mode 100644 plugins/portlet-tiles/src/main/resources/struts-plugin.xml delete mode 100644 plugins/portlet-tiles/src/site/site.xml delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/PortletRequestTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/RenderPortletRequestTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/delegate/MimeResponseDelegateTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/delegate/PortletRequestDelegateTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/ApplicationScopeExtractorTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/HeaderExtractorTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/InitParameterExtractorTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/ParameterExtractorTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/RequestScopeExtractorTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/SessionScopeExtractorTest.java delete mode 100644 plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/StateAwareParameterExtractorTest.java delete mode 100644 plugins/portlet/README.md delete mode 100644 plugins/portlet/pom.xml delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletConstants.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletPhase.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletContextAware.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletPreferencesAware.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletRequestAware.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletResponseAware.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/DispatcherServlet.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptor.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/ServletPortletPreferences.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletActionRedirectResult.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResult.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletHttpSession.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletConfig.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletContext.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletInputStream.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletOutputStream.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequest.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequestDispatcher.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/package.html delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java delete mode 100644 plugins/portlet/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java delete mode 100644 plugins/portlet/src/main/resources/LICENSE.txt delete mode 100644 plugins/portlet/src/main/resources/NOTICE.txt delete mode 100644 plugins/portlet/src/main/resources/struts-plugin.xml delete mode 100644 plugins/portlet/src/site/site.xml delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/StrutsTestCasePortletTests.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/components/PortletAction.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletApplicationMapTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletRequestMapTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletSessionMapTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr286DispatcherTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptorTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java delete mode 100644 plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java delete mode 100644 plugins/portlet/src/test/resources/log4j2.xml delete mode 100644 plugins/portlet/src/test/resources/struts.xml diff --git a/plugins/portlet-junit/README.md b/plugins/portlet-junit/README.md deleted file mode 100644 index db36979ba..000000000 --- a/plugins/portlet-junit/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Struts 2 Portlet JUnit plugin -The Portlet JUnit Plugin supports testing applications that use the Portlet Plugin. diff --git a/plugins/portlet-junit/pom.xml b/plugins/portlet-junit/pom.xml deleted file mode 100644 index 45b6b94be..000000000 --- a/plugins/portlet-junit/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - 4.0.0 - - org.apache.struts - struts2-plugins - 6.4.0-SNAPSHOT - - - struts2-portlet-junit-plugin - jar - DEPRECATED: Struts 2 Portlet JUnit Plugin - since 6.3.0 - - - - org.apache.struts - struts2-junit-plugin - - - junit - junit - - - - org.apache.struts - struts2-portlet-plugin - provided - - - org.apache.struts - struts2-portlet-mocks-plugin - - - - - UTF-8 - - diff --git a/plugins/portlet-junit/src/main/java/org/apache/struts2/junit/StrutsPortletTestCase.java b/plugins/portlet-junit/src/main/java/org/apache/struts2/junit/StrutsPortletTestCase.java deleted file mode 100644 index ad6fbeefa..000000000 --- a/plugins/portlet-junit/src/main/java/org/apache/struts2/junit/StrutsPortletTestCase.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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.junit; - - -import com.opensymphony.xwork2.ActionContext; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.struts2.StrutsStatics; -import org.apache.struts2.mock.web.portlet.MockPortletContext; -import org.apache.struts2.mock.web.portlet.MockPortletRequest; -import org.apache.struts2.mock.web.portlet.MockPortletResponse; -import org.apache.struts2.mock.web.portlet.MockPortletSession; -import org.apache.struts2.mock.web.portlet.MockStateAwareResponse; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; - -import javax.portlet.PortletMode; -import java.util.HashMap; -import java.util.Map; - -public abstract class StrutsPortletTestCase extends StrutsTestCase { - - private static final Logger LOG = LogManager.getLogger(StrutsPortletTestCase.class); - - protected MockPortletSession portletSession; - protected MockPortletRequest portletRequest; - protected MockPortletResponse portletResponse; - protected MockContext portletContext; - - @Override - protected void initActionContext(ActionContext actionContext) { - super.initActionContext(actionContext); - initPortletContext(actionContext); - } - - protected void initPortletContext(ActionContext actionContext) { - LOG.debug("Initializing mock portlet environment"); - portletContext = new MockContext(); - portletContext.setMajorVersion(getMajorVersion()); - actionContext.put(StrutsStatics.STRUTS_PORTLET_CONTEXT, portletContext); - - portletRequest = new MockPortletRequest(portletContext); - portletResponse = new MockStateAwareResponse(); - portletSession = new MockPortletSession(); - portletRequest.setSession(portletSession); - actionContext.withSession(createSession()); - actionContext.put(PortletConstants.REQUEST, portletRequest); - actionContext.put(PortletConstants.RESPONSE, portletResponse); - actionContext.put(PortletConstants.MODE_NAMESPACE_MAP, new HashMap()); - actionContext.put(PortletConstants.PHASE, PortletPhase.EVENT_PHASE); - } - - /** - * Override to define version of your portlet environment - * - * @return portlet version - */ - protected int getMajorVersion() { - return 2; - } - - /** - * Override to create your own session - * - * @return Map with session parameters - */ - private Map createSession() { - return new HashMap<>(portletRequest.getPortletSession().getAttributeMap()); - } - -} - -/** - * Simple workaround to define Portlet version - */ -class MockContext extends MockPortletContext { - - private int majorVersion; - - @Override - public int getMajorVersion() { - return majorVersion; - } - - public void setMajorVersion(int majorVersion) { - this.majorVersion = majorVersion; - } - -} - diff --git a/plugins/portlet-junit/src/site/site.xml b/plugins/portlet-junit/src/site/site.xml deleted file mode 100644 index 54fdcf4f4..000000000 --- a/plugins/portlet-junit/src/site/site.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - org.apache.maven.skins - maven-fluido-skin - ${fluido-skin.version} - - - Apache Software Foundation - http://www.apache.org/images/asf-logo.gif - http://www.apache.org/ - - - Apache Struts - http://struts.apache.org/img/struts-logo.svg - http://struts.apache.org/ - - - - - - - - - - - - -
- - Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project - logos are trademarks of The Apache Software Foundation. - ]]> -
- - diff --git a/plugins/portlet-junit/src/test/java/org/apache/struts2/junit/StrutsPortletTestCaseTest.java b/plugins/portlet-junit/src/test/java/org/apache/struts2/junit/StrutsPortletTestCaseTest.java deleted file mode 100644 index 22c92a0e0..000000000 --- a/plugins/portlet-junit/src/test/java/org/apache/struts2/junit/StrutsPortletTestCaseTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.junit; - -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionProxy; -import org.apache.struts2.StrutsStatics; - -import javax.portlet.PortletContext; - -public class StrutsPortletTestCaseTest extends StrutsPortletTestCase { - - String KEY = "my-param"; - - public void testShouldPortletContextBeAvailable() throws Exception { - // given - assertNull(ActionContext.getContext().get(StrutsStatics.STRUTS_PORTLET_CONTEXT)); - - // when - ActionProxy proxy = getActionProxy("/test/testAction.action"); - String result = proxy.execute(); - - // then - assertEquals(Action.SUCCESS, result); - Object portletContext = ActionContext.getContext().get(StrutsStatics.STRUTS_PORTLET_CONTEXT); - assertNotNull(portletContext); - assertTrue(portletContext instanceof PortletContext); - } - - public void testShouldAdditionalContextParamsBeAvailable() throws Exception { - // given - assertNull(ActionContext.getContext().get(KEY)); - - // when - ActionProxy proxy = getActionProxy("/test/testAction.action"); - String result = proxy.execute(); - - // then - assertEquals(Action.SUCCESS, result); - assertNotNull(ActionContext.getContext().get(KEY)); - } - - @Override - protected void applyAdditionalParams(ActionContext context) { - context.put(KEY, new Object()); - } -} diff --git a/plugins/portlet-junit/src/test/resources/struts.xml b/plugins/portlet-junit/src/test/resources/struts.xml deleted file mode 100644 index e8c59512c..000000000 --- a/plugins/portlet-junit/src/test/resources/struts.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - 200 - - - - diff --git a/plugins/portlet-mocks/README.md b/plugins/portlet-mocks/README.md deleted file mode 100644 index 550476204..000000000 --- a/plugins/portlet-mocks/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Struts 2 Portlet Mocks plugin -This plugin is deprecated, and it will be removed soon, **please do not use it**! diff --git a/plugins/portlet-mocks/pom.xml b/plugins/portlet-mocks/pom.xml deleted file mode 100644 index 9b3a6081a..000000000 --- a/plugins/portlet-mocks/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - 4.0.0 - - org.apache.struts - struts2-plugins - 6.4.0-SNAPSHOT - - - struts2-portlet-mocks-plugin - jar - DEPRECATED: Struts 2 Portlet Mocks Plugin - since 6.0.0 - - - - org.springframework - spring-test - - - org.springframework - spring-web - - - - - javax.portlet - portlet-api - provided - - - - - 4.3.30.RELEASE - UTF-8 - - diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionRequest.java deleted file mode 100644 index 390df5cda..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionRequest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2002-2009 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import javax.portlet.ActionRequest; -import javax.portlet.PortalContext; -import javax.portlet.PortletContext; -import javax.portlet.PortletMode; - -/** - * Mock implementation of the {@link javax.portlet.ActionRequest} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockActionRequest extends MockClientDataRequest implements ActionRequest { - - /** - * Create a new MockActionRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @see org.springframework.mock.web.portlet.MockPortalContext - * @see org.springframework.mock.web.portlet.MockPortletContext - */ - public MockActionRequest() { - super(); - } - - /** - * Create a new MockActionRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @param actionName the name of the action to trigger - */ - public MockActionRequest(String actionName) { - super(); - setParameter(ActionRequest.ACTION_NAME, actionName); - } - - /** - * Create a new MockActionRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @param portletMode the mode that the portlet runs in - */ - public MockActionRequest(PortletMode portletMode) { - super(); - setPortletMode(portletMode); - } - - /** - * Create a new MockActionRequest with a default {@link MockPortalContext}. - * @param portletContext the PortletContext that the request runs in - */ - public MockActionRequest(PortletContext portletContext) { - super(portletContext); - } - - /** - * Create a new MockActionRequest. - * @param portalContext the PortalContext that the request runs in - * @param portletContext the PortletContext that the request runs in - */ - public MockActionRequest(PortalContext portalContext, PortletContext portletContext) { - super(portalContext, portletContext); - } - - - @Override - protected String getLifecyclePhase() { - return ACTION_PHASE; - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionResponse.java deleted file mode 100644 index b120ffd87..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockActionResponse.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.IOException; -import java.util.Map; -import javax.portlet.ActionResponse; -import javax.portlet.PortalContext; -import javax.portlet.PortletMode; -import javax.portlet.PortletModeException; -import javax.portlet.WindowState; -import javax.portlet.WindowStateException; - -import org.springframework.util.Assert; - -/** - * Mock implementation of the {@link javax.portlet.ActionResponse} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockActionResponse extends MockStateAwareResponse implements ActionResponse { - - private boolean redirectAllowed = true; - - private String redirectedUrl; - - - /** - * Create a new MockActionResponse with a default {@link MockPortalContext}. - * @see MockPortalContext - */ - public MockActionResponse() { - super(); - } - - /** - * Create a new MockActionResponse. - * @param portalContext the PortalContext defining the supported - * PortletModes and WindowStates - */ - public MockActionResponse(PortalContext portalContext) { - super(portalContext); - } - - - @Override - public void setWindowState(WindowState windowState) throws WindowStateException { - if (this.redirectedUrl != null) { - throw new IllegalStateException("Cannot set WindowState after sendRedirect has been called"); - } - super.setWindowState(windowState); - this.redirectAllowed = false; - } - - @Override - public void setPortletMode(PortletMode portletMode) throws PortletModeException { - if (this.redirectedUrl != null) { - throw new IllegalStateException("Cannot set PortletMode after sendRedirect has been called"); - } - super.setPortletMode(portletMode); - this.redirectAllowed = false; - } - - @Override - public void setRenderParameters(Map parameters) { - if (this.redirectedUrl != null) { - throw new IllegalStateException("Cannot set render parameters after sendRedirect has been called"); - } - super.setRenderParameters(parameters); - this.redirectAllowed = false; - } - - @Override - public void setRenderParameter(String key, String value) { - if (this.redirectedUrl != null) { - throw new IllegalStateException("Cannot set render parameters after sendRedirect has been called"); - } - super.setRenderParameter(key, value); - this.redirectAllowed = false; - } - - @Override - public void setRenderParameter(String key, String[] values) { - if (this.redirectedUrl != null) { - throw new IllegalStateException("Cannot set render parameters after sendRedirect has been called"); - } - super.setRenderParameter(key, values); - this.redirectAllowed = false; - } - - @Override - public void sendRedirect(String location) throws IOException { - if (!this.redirectAllowed) { - throw new IllegalStateException( - "Cannot call sendRedirect after windowState, portletMode, or renderParameters have been set"); - } - Assert.notNull(location, "Redirect URL must not be null"); - this.redirectedUrl = location; - } - - @Override - public void sendRedirect(String location, String renderUrlParamName) throws IOException { - sendRedirect(location); - if (renderUrlParamName != null) { - // NOTE: Changed since original Spring 4.3.x version. - // Cannot call setRenderParameter(renderUrlParamName, location) here as it always results in an IllegalStateException - since a redirect has been called. - // Due to this, we call super.setRenderParameter() directly, otherwise this method can never successfully be called. - super.setRenderParameter(renderUrlParamName, location); - } - } - - public String getRedirectedUrl() { - return this.redirectedUrl; - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockBaseURL.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockBaseURL.java deleted file mode 100644 index c0a1995e9..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockBaseURL.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.io.Writer; -import java.net.URLEncoder; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; -import javax.portlet.BaseURL; -import javax.portlet.PortletSecurityException; - -import org.springframework.util.Assert; -import org.springframework.util.StringUtils; - -/** - * Mock implementation of the {@link javax.portlet.BaseURL} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public abstract class MockBaseURL implements BaseURL { - - public static final String URL_TYPE_RENDER = "render"; - - public static final String URL_TYPE_ACTION = "action"; - - private static final String ENCODING = "UTF-8"; - - - protected final Map parameters = new LinkedHashMap(); - - private boolean secure = false; - - private final Map properties = new LinkedHashMap(); - - - //--------------------------------------------------------------------- - // BaseURL methods - //--------------------------------------------------------------------- - - @Override - public void setParameter(String key, String value) { - Assert.notNull(key, "Parameter key must be null"); - Assert.notNull(value, "Parameter value must not be null"); - this.parameters.put(key, new String[] {value}); - } - - @Override - public void setParameter(String key, String[] values) { - Assert.notNull(key, "Parameter key must be null"); - Assert.notNull(values, "Parameter values must not be null"); - this.parameters.put(key, values); - } - - @Override - public void setParameters(Map parameters) { - Assert.notNull(parameters, "Parameters Map must not be null"); - this.parameters.clear(); - this.parameters.putAll(parameters); - } - - public Set getParameterNames() { - return this.parameters.keySet(); - } - - public String getParameter(String name) { - String[] arr = this.parameters.get(name); - return (arr != null && arr.length > 0 ? arr[0] : null); - } - - public String[] getParameterValues(String name) { - return this.parameters.get(name); - } - - @Override - public Map getParameterMap() { - return Collections.unmodifiableMap(this.parameters); - } - - @Override - public void setSecure(boolean secure) throws PortletSecurityException { - this.secure = secure; - } - - public boolean isSecure() { - return this.secure; - } - - @Override - public void write(Writer out) throws IOException { - out.write(toString()); - } - - @Override - public void write(Writer out, boolean escapeXML) throws IOException { - out.write(toString()); - } - - @Override - public void addProperty(String key, String value) { - String[] values = this.properties.get(key); - if (values != null) { - this.properties.put(key, StringUtils.addStringToArray(values, value)); - } - else { - this.properties.put(key, new String[] {value}); - } - } - - @Override - public void setProperty(String key, String value) { - this.properties.put(key, new String[] {value}); - } - - public Map getProperties() { - return Collections.unmodifiableMap(this.properties); - } - - - protected String encodeParameter(String name, String value) { - try { - return URLEncoder.encode(name, ENCODING) + "=" + URLEncoder.encode(value, ENCODING); - } - catch (UnsupportedEncodingException ex) { - return null; - } - } - - protected String encodeParameter(String name, String[] values) { - try { - StringBuilder sb = new StringBuilder(); - for (int i = 0, n = values.length; i < n; i++) { - sb.append(i > 0 ? ";" : "").append(URLEncoder.encode(name, ENCODING)).append("=") - .append(URLEncoder.encode(values[i], ENCODING)); - } - return sb.toString(); - } - catch (UnsupportedEncodingException ex) { - return null; - } - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockCacheControl.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockCacheControl.java deleted file mode 100644 index f0ae50ac2..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockCacheControl.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import javax.portlet.CacheControl; - -/** - * Mock implementation of the {@link javax.portlet.CacheControl} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public class MockCacheControl implements CacheControl { - - private int expirationTime = 0; - - private boolean publicScope = false; - - private String etag; - - private boolean useCachedContent = false; - - - @Override - public int getExpirationTime() { - return this.expirationTime; - } - - @Override - public void setExpirationTime(int time) { - this.expirationTime = time; - } - - @Override - public boolean isPublicScope() { - return this.publicScope; - } - - @Override - public void setPublicScope(boolean publicScope) { - this.publicScope = publicScope; - } - - @Override - public String getETag() { - return this.etag; - } - - @Override - public void setETag(String token) { - this.etag = token; - } - - @Override - public boolean useCachedContent() { - return this.useCachedContent; - } - - @Override - public void setUseCachedContent(boolean useCachedContent) { - this.useCachedContent = useCachedContent; - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockClientDataRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockClientDataRequest.java deleted file mode 100644 index 44792d1de..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockClientDataRequest.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.UnsupportedEncodingException; -import javax.portlet.ClientDataRequest; -import javax.portlet.PortalContext; -import javax.portlet.PortletContext; - -/** - * Mock implementation of the {@link javax.portlet.ClientDataRequest} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public class MockClientDataRequest extends MockPortletRequest implements ClientDataRequest { - - private String characterEncoding; - - private byte[] content; - - private String contentType; - - private String method; - - - /** - * Create a new MockClientDataRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @see org.springframework.mock.web.portlet.MockPortalContext - * @see org.springframework.mock.web.portlet.MockPortletContext - */ - public MockClientDataRequest() { - super(); - } - - /** - * Create a new MockClientDataRequest with a default {@link MockPortalContext}. - * @param portletContext the PortletContext that the request runs in - */ - public MockClientDataRequest(PortletContext portletContext) { - super(portletContext); - } - - /** - * Create a new MockClientDataRequest. - * @param portalContext the PortalContext that the request runs in - * @param portletContext the PortletContext that the request runs in - */ - public MockClientDataRequest(PortalContext portalContext, PortletContext portletContext) { - super(portalContext, portletContext); - } - - - public void setContent(byte[] content) { - this.content = content; - } - - @Override - public InputStream getPortletInputStream() throws IOException { - if (this.content != null) { - return new ByteArrayInputStream(this.content); - } - else { - return null; - } - } - - @Override - public void setCharacterEncoding(String characterEncoding) { - this.characterEncoding = characterEncoding; - } - - @Override - public BufferedReader getReader() throws UnsupportedEncodingException { - if (this.content != null) { - InputStream sourceStream = new ByteArrayInputStream(this.content); - Reader sourceReader = (this.characterEncoding != null) ? - new InputStreamReader(sourceStream, this.characterEncoding) : new InputStreamReader(sourceStream); - return new BufferedReader(sourceReader); - } - else { - return null; - } - } - - @Override - public String getCharacterEncoding() { - return this.characterEncoding; - } - - public void setContentType(String contentType) { - this.contentType = contentType; - } - - @Override - public String getContentType() { - return this.contentType; - } - - @Override - public int getContentLength() { - return (this.content != null ? content.length : -1); - } - - public void setMethod(String method) { - this.method = method; - } - - @Override - public String getMethod() { - return this.method; - } - -} \ No newline at end of file diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEvent.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEvent.java deleted file mode 100644 index 2e9a41126..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEvent.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.Serializable; -import javax.portlet.Event; -import javax.xml.namespace.QName; - -/** - * Mock implementation of the {@link javax.portlet.Event} interface. - * - * @author Juergen Hoeller - * @since 3.0 - * @see MockEventRequest - */ -public class MockEvent implements Event { - - private final QName name; - - private final Serializable value; - - - /** - * Create a new MockEvent with the given name. - * @param name the name of the event - */ - public MockEvent(QName name) { - this.name = name; - this.value = null; - } - - /** - * Create a new MockEvent with the given name and value. - * @param name the name of the event - * @param value the associated payload of the event - */ - public MockEvent(QName name, Serializable value) { - this.name = name; - this.value = value; - } - - /** - * Create a new MockEvent with the given name. - * @param name the name of the event - */ - public MockEvent(String name) { - this.name = new QName(name); - this.value = null; - } - - /** - * Create a new MockEvent with the given name and value. - * @param name the name of the event - * @param value the associated payload of the event - */ - public MockEvent(String name, Serializable value) { - this.name = new QName(name); - this.value = value; - } - - - @Override - public QName getQName() { - return this.name; - } - - @Override - public String getName() { - return this.name.getLocalPart(); - } - - @Override - public Serializable getValue() { - return this.value; - } - -} \ No newline at end of file diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventRequest.java deleted file mode 100644 index c05551137..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventRequest.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import javax.portlet.Event; -import javax.portlet.EventRequest; -import javax.portlet.PortalContext; -import javax.portlet.PortletContext; - -/** - * Mock implementation of the {@link javax.portlet.EventRequest} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public class MockEventRequest extends MockPortletRequest implements EventRequest { - - private final Event event; - - private String method; - - - /** - * Create a new MockEventRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @param event the event that this request wraps - * @see MockEvent - */ - public MockEventRequest(Event event) { - super(); - this.event = event; - } - - /** - * Create a new MockEventRequest with a default {@link MockPortalContext}. - * @param event the event that this request wraps - * @param portletContext the PortletContext that the request runs in - * @see MockEvent - */ - public MockEventRequest(Event event, PortletContext portletContext) { - super(portletContext); - this.event = event; - } - - /** - * Create a new MockEventRequest. - * @param event the event that this request wraps - * @param portalContext the PortletContext that the request runs in - * @param portletContext the PortletContext that the request runs in - */ - public MockEventRequest(Event event, PortalContext portalContext, PortletContext portletContext) { - super(portalContext, portletContext); - this.event = event; - } - - - @Override - protected String getLifecyclePhase() { - return EVENT_PHASE; - } - - @Override - public Event getEvent() { - return this.event; - } - - public void setMethod(String method) { - this.method = method; - } - - @Override - public String getMethod() { - return this.method; - } - -} \ No newline at end of file diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventResponse.java deleted file mode 100644 index 9bda32e0d..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockEventResponse.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import javax.portlet.EventRequest; -import javax.portlet.EventResponse; - -/** - * Mock implementation of the {@link javax.portlet.EventResponse} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public class MockEventResponse extends MockStateAwareResponse implements EventResponse { - - @Override - public void setRenderParameters(EventRequest request) { - setRenderParameters(request.getParameterMap()); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMimeResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMimeResponse.java deleted file mode 100644 index cb654cb6c..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMimeResponse.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; -import java.io.Writer; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Locale; -import javax.portlet.CacheControl; -import javax.portlet.MimeResponse; -import javax.portlet.PortalContext; -import javax.portlet.PortletRequest; -import javax.portlet.PortletURL; -import javax.portlet.ResourceURL; - -import org.springframework.util.CollectionUtils; -import org.springframework.web.util.WebUtils; - -/** - * Mock implementation of the {@link javax.portlet.MimeResponse} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public class MockMimeResponse extends MockPortletResponse implements MimeResponse { - - private PortletRequest request; - - private String contentType; - - private String characterEncoding = WebUtils.DEFAULT_CHARACTER_ENCODING; - - private PrintWriter writer; - - private Locale locale = Locale.getDefault(); - - private int bufferSize = 4096; - - private final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - - private final CacheControl cacheControl = new MockCacheControl(); - - private boolean committed; - - private String includedUrl; - - private String forwardedUrl; - - - /** - * Create a new MockMimeResponse with a default {@link MockPortalContext}. - * @see org.springframework.mock.web.portlet.MockPortalContext - */ - public MockMimeResponse() { - super(); - } - - /** - * Create a new MockMimeResponse. - * @param portalContext the PortalContext defining the supported - * PortletModes and WindowStates - */ - public MockMimeResponse(PortalContext portalContext) { - super(portalContext); - } - - /** - * Create a new MockMimeResponse. - * @param portalContext the PortalContext defining the supported - * PortletModes and WindowStates - * @param request the corresponding render/resource request that this response - * is being generated for - */ - public MockMimeResponse(PortalContext portalContext, PortletRequest request) { - super(portalContext); - this.request = request; - } - - - //--------------------------------------------------------------------- - // RenderResponse methods - //--------------------------------------------------------------------- - - @Override - public void setContentType(String contentType) { - if (this.request != null) { - Enumeration supportedTypes = this.request.getResponseContentTypes(); - if (!CollectionUtils.contains(supportedTypes, contentType)) { - throw new IllegalArgumentException("Content type [" + contentType + "] not in supported list: " + - Collections.list(supportedTypes)); - } - } - this.contentType = contentType; - } - - @Override - public String getContentType() { - return this.contentType; - } - - public void setCharacterEncoding(String characterEncoding) { - this.characterEncoding = characterEncoding; - } - - @Override - public String getCharacterEncoding() { - return this.characterEncoding; - } - - @Override - public PrintWriter getWriter() throws UnsupportedEncodingException { - if (this.writer == null) { - Writer targetWriter = (this.characterEncoding != null - ? new OutputStreamWriter(this.outputStream, this.characterEncoding) - : new OutputStreamWriter(this.outputStream)); - this.writer = new PrintWriter(targetWriter); - } - return this.writer; - } - - public byte[] getContentAsByteArray() { - flushBuffer(); - return this.outputStream.toByteArray(); - } - - public String getContentAsString() throws UnsupportedEncodingException { - flushBuffer(); - return (this.characterEncoding != null) - ? this.outputStream.toString(this.characterEncoding) - : this.outputStream.toString(); - } - - public void setLocale(Locale locale) { - this.locale = locale; - } - - @Override - public Locale getLocale() { - return this.locale; - } - - @Override - public void setBufferSize(int bufferSize) { - this.bufferSize = bufferSize; - } - - @Override - public int getBufferSize() { - return this.bufferSize; - } - - @Override - public void flushBuffer() { - if (this.writer != null) { - this.writer.flush(); - } - if (this.outputStream != null) { - try { - this.outputStream.flush(); - } - catch (IOException ex) { - throw new IllegalStateException("Could not flush OutputStream: " + ex.getMessage()); - } - } - this.committed = true; - } - - @Override - public void resetBuffer() { - if (this.committed) { - throw new IllegalStateException("Cannot reset buffer - response is already committed"); - } - this.outputStream.reset(); - } - - public void setCommitted(boolean committed) { - this.committed = committed; - } - - @Override - public boolean isCommitted() { - return this.committed; - } - - @Override - public void reset() { - resetBuffer(); - this.characterEncoding = null; - this.contentType = null; - this.locale = null; - } - - @Override - public OutputStream getPortletOutputStream() throws IOException { - return this.outputStream; - } - - @Override - public PortletURL createRenderURL() { - return new MockPortletURL(getPortalContext(), MockPortletURL.URL_TYPE_RENDER); - } - - @Override - public PortletURL createActionURL() { - return new MockPortletURL(getPortalContext(), MockPortletURL.URL_TYPE_ACTION); - } - - @Override - public ResourceURL createResourceURL() { - return new MockResourceURL(); - } - - @Override - public CacheControl getCacheControl() { - return this.cacheControl; - } - - - //--------------------------------------------------------------------- - // Methods for MockPortletRequestDispatcher - //--------------------------------------------------------------------- - - public void setIncludedUrl(String includedUrl) { - this.includedUrl = includedUrl; - } - - public String getIncludedUrl() { - return this.includedUrl; - } - - public void setForwardedUrl(String forwardedUrl) { - this.forwardedUrl = forwardedUrl; - } - - public String getForwardedUrl() { - return this.forwardedUrl; - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMultipartActionRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMultipartActionRequest.java deleted file mode 100644 index 396e8cfd3..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockMultipartActionRequest.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.springframework.util.Assert; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.multipart.MultipartFile; -import org.apache.struts2.mock.web.portlet.multipart.MultipartActionRequest; - -/** - * Mock implementation of the - * {@link org.springframework.web.portlet.multipart.MultipartActionRequest} interface. - * - *

Useful for testing application controllers that access multipart uploads. - * The {@link org.springframework.mock.web.MockMultipartFile} can be used to - * populate these mock requests with files. - * - * @author Juergen Hoeller - * @author Arjen Poutsma - * @since 2.0 - * @see org.springframework.mock.web.MockMultipartFile - */ -public class MockMultipartActionRequest extends MockActionRequest implements MultipartActionRequest { - - private final MultiValueMap multipartFiles = - new LinkedMultiValueMap(); - - - /** - * Add a file to this request. The parameter name from the multipart - * form is taken from the {@link org.springframework.web.multipart.MultipartFile#getName()}. - * @param file multipart file to be added - */ - public void addFile(MultipartFile file) { - Assert.notNull(file, "MultipartFile must not be null"); - this.multipartFiles.add(file.getName(), file); - } - - @Override - public Iterator getFileNames() { - return this.multipartFiles.keySet().iterator(); - } - - @Override - public MultipartFile getFile(String name) { - return this.multipartFiles.getFirst(name); - } - - @Override - public List getFiles(String name) { - List multipartFiles = this.multipartFiles.get(name); - if (multipartFiles != null) { - return multipartFiles; - } - else { - return Collections.emptyList(); - } - } - - @Override - public Map getFileMap() { - return this.multipartFiles.toSingleValueMap(); - } - - @Override - public MultiValueMap getMultiFileMap() { - return new LinkedMultiValueMap(this.multipartFiles); - } - - @Override - public String getMultipartContentType(String paramOrFileName) { - MultipartFile file = getFile(paramOrFileName); - if (file != null) { - return file.getContentType(); - } - else { - return null; - } - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortalContext.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortalContext.java deleted file mode 100644 index 0c7eccf5e..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortalContext.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.portlet.PortalContext; -import javax.portlet.PortletMode; -import javax.portlet.WindowState; - -/** - * Mock implementation of the {@link javax.portlet.PortalContext} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockPortalContext implements PortalContext { - - private final Map properties = new HashMap(); - - private final List portletModes; - - private final List windowStates; - - - /** - * Create a new MockPortalContext - * with default PortletModes (VIEW, EDIT, HELP) - * and default WindowStates (NORMAL, MAXIMIZED, MINIMIZED). - * @see javax.portlet.PortletMode - * @see javax.portlet.WindowState - */ - public MockPortalContext() { - this.portletModes = new ArrayList(3); - this.portletModes.add(PortletMode.VIEW); - this.portletModes.add(PortletMode.EDIT); - this.portletModes.add(PortletMode.HELP); - - this.windowStates = new ArrayList(3); - this.windowStates.add(WindowState.NORMAL); - this.windowStates.add(WindowState.MAXIMIZED); - this.windowStates.add(WindowState.MINIMIZED); - } - - /** - * Create a new MockPortalContext with the given PortletModes and WindowStates. - * @param supportedPortletModes the List of supported PortletMode instances - * @param supportedWindowStates the List of supported WindowState instances - * @see javax.portlet.PortletMode - * @see javax.portlet.WindowState - */ - public MockPortalContext(List supportedPortletModes, List supportedWindowStates) { - this.portletModes = new ArrayList(supportedPortletModes); - this.windowStates = new ArrayList(supportedWindowStates); - } - - - @Override - public String getPortalInfo() { - return "MockPortal/1.0"; - } - - public void setProperty(String name, String value) { - this.properties.put(name, value); - } - - @Override - public String getProperty(String name) { - return this.properties.get(name); - } - - @Override - public Enumeration getPropertyNames() { - return Collections.enumeration(this.properties.keySet()); - } - - @Override - public Enumeration getSupportedPortletModes() { - return Collections.enumeration(this.portletModes); - } - - @Override - public Enumeration getSupportedWindowStates() { - return Collections.enumeration(this.windowStates); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletConfig.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletConfig.java deleted file mode 100644 index 33d7e901c..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletConfig.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.Locale; -import java.util.Map; -import java.util.ResourceBundle; -import java.util.Set; -import javax.portlet.PortletConfig; -import javax.portlet.PortletContext; -import javax.xml.XMLConstants; -import javax.xml.namespace.QName; - -import org.springframework.util.Assert; - -/** - * Mock implementation of the {@link javax.portlet.PortletConfig} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockPortletConfig implements PortletConfig { - - private final PortletContext portletContext; - - private final String portletName; - - private final Map resourceBundles = new HashMap(); - - private final Map initParameters = new LinkedHashMap(); - - private final Set publicRenderParameterNames = new LinkedHashSet(); - - private String defaultNamespace = XMLConstants.NULL_NS_URI; - - private final Set publishingEventQNames = new LinkedHashSet(); - - private final Set processingEventQNames = new LinkedHashSet(); - - private final Set supportedLocales = new LinkedHashSet(); - - private final Map containerRuntimeOptions = new LinkedHashMap(); - - - /** - * Create a new MockPortletConfig with a default {@link MockPortletContext}. - */ - public MockPortletConfig() { - this(null, ""); - } - - /** - * Create a new MockPortletConfig with a default {@link MockPortletContext}. - * @param portletName the name of the portlet - */ - public MockPortletConfig(String portletName) { - this(null, portletName); - } - - /** - * Create a new MockPortletConfig. - * @param portletContext the PortletContext that the portlet runs in - */ - public MockPortletConfig(PortletContext portletContext) { - this(portletContext, ""); - } - - /** - * Create a new MockPortletConfig. - * @param portletContext the PortletContext that the portlet runs in - * @param portletName the name of the portlet - */ - public MockPortletConfig(PortletContext portletContext, String portletName) { - this.portletContext = (portletContext != null ? portletContext : new MockPortletContext()); - this.portletName = portletName; - } - - - @Override - public String getPortletName() { - return this.portletName; - } - - @Override - public PortletContext getPortletContext() { - return this.portletContext; - } - - public void setResourceBundle(Locale locale, ResourceBundle resourceBundle) { - Assert.notNull(locale, "Locale must not be null"); - this.resourceBundles.put(locale, resourceBundle); - } - - @Override - public ResourceBundle getResourceBundle(Locale locale) { - Assert.notNull(locale, "Locale must not be null"); - return this.resourceBundles.get(locale); - } - - public void addInitParameter(String name, String value) { - Assert.notNull(name, "Parameter name must not be null"); - this.initParameters.put(name, value); - } - - @Override - public String getInitParameter(String name) { - Assert.notNull(name, "Parameter name must not be null"); - return this.initParameters.get(name); - } - - @Override - public Enumeration getInitParameterNames() { - return Collections.enumeration(this.initParameters.keySet()); - } - - public void addPublicRenderParameterName(String name) { - this.publicRenderParameterNames.add(name); - } - - @Override - public Enumeration getPublicRenderParameterNames() { - return Collections.enumeration(this.publicRenderParameterNames); - } - - public void setDefaultNamespace(String defaultNamespace) { - this.defaultNamespace = defaultNamespace; - } - - @Override - public String getDefaultNamespace() { - return this.defaultNamespace; - } - - public void addPublishingEventQName(QName name) { - this.publishingEventQNames.add(name); - } - - @Override - public Enumeration getPublishingEventQNames() { - return Collections.enumeration(this.publishingEventQNames); - } - - public void addProcessingEventQName(QName name) { - this.processingEventQNames.add(name); - } - - @Override - public Enumeration getProcessingEventQNames() { - return Collections.enumeration(this.processingEventQNames); - } - - public void addSupportedLocale(Locale locale) { - this.supportedLocales.add(locale); - } - - @Override - public Enumeration getSupportedLocales() { - return Collections.enumeration(this.supportedLocales); - } - - public void addContainerRuntimeOption(String key, String value) { - this.containerRuntimeOptions.put(key, new String[] {value}); - } - - public void addContainerRuntimeOption(String key, String[] values) { - this.containerRuntimeOptions.put(key, values); - } - - @Override - public Map getContainerRuntimeOptions() { - return Collections.unmodifiableMap(this.containerRuntimeOptions); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletContext.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletContext.java deleted file mode 100644 index 3cf0a5d47..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletContext.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; -import javax.portlet.PortletContext; -import javax.portlet.PortletRequestDispatcher; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.core.io.DefaultResourceLoader; -import org.springframework.core.io.Resource; -import org.springframework.core.io.ResourceLoader; -import org.springframework.util.Assert; -import org.springframework.web.util.WebUtils; - -/** - * Mock implementation of the {@link javax.portlet.PortletContext} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockPortletContext implements PortletContext { - - private static final String TEMP_DIR_SYSTEM_PROPERTY = "java.io.tmpdir"; - - - private final Log logger = LogFactory.getLog(getClass()); - - private final String resourceBasePath; - - private final ResourceLoader resourceLoader; - - private final Map attributes = new LinkedHashMap(); - - private final Map initParameters = new LinkedHashMap(); - - private String portletContextName = "MockPortletContext"; - - private Set containerRuntimeOptions = new LinkedHashSet(); - - - /** - * Create a new MockPortletContext with no base path and a - * DefaultResourceLoader (i.e. the classpath root as WAR root). - * @see org.springframework.core.io.DefaultResourceLoader - */ - public MockPortletContext() { - this("", null); - } - - /** - * Create a new MockPortletContext using a DefaultResourceLoader. - * @param resourceBasePath the WAR root directory (should not end with a slash) - * @see org.springframework.core.io.DefaultResourceLoader - */ - public MockPortletContext(String resourceBasePath) { - this(resourceBasePath, null); - } - - /** - * Create a new MockPortletContext, using the specified ResourceLoader - * and no base path. - * @param resourceLoader the ResourceLoader to use (or null for the default) - */ - public MockPortletContext(ResourceLoader resourceLoader) { - this("", resourceLoader); - } - - /** - * Create a new MockPortletContext. - * @param resourceBasePath the WAR root directory (should not end with a slash) - * @param resourceLoader the ResourceLoader to use (or null for the default) - */ - public MockPortletContext(String resourceBasePath, ResourceLoader resourceLoader) { - this.resourceBasePath = (resourceBasePath != null ? resourceBasePath : ""); - this.resourceLoader = (resourceLoader != null ? resourceLoader : new DefaultResourceLoader()); - - // Use JVM temp dir as PortletContext temp dir. - String tempDir = System.getProperty(TEMP_DIR_SYSTEM_PROPERTY); - if (tempDir != null) { - this.attributes.put(WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE, new File(tempDir)); - } - } - - /** - * Build a full resource location for the given path, - * prepending the resource base path of this MockPortletContext. - * @param path the path as specified - * @return the full resource path - */ - protected String getResourceLocation(String path) { - if (!path.startsWith("/")) { - path = "/" + path; - } - return this.resourceBasePath + path; - } - - - @Override - public String getServerInfo() { - return "MockPortal/1.0"; - } - - @Override - public PortletRequestDispatcher getRequestDispatcher(String path) { - if (!path.startsWith("/")) { - throw new IllegalArgumentException( - "PortletRequestDispatcher path at PortletContext level must start with '/'"); - } - return new MockPortletRequestDispatcher(path); - } - - @Override - public PortletRequestDispatcher getNamedDispatcher(String path) { - return null; - } - - @Override - public InputStream getResourceAsStream(String path) { - Resource resource = this.resourceLoader.getResource(getResourceLocation(path)); - try { - return resource.getInputStream(); - } - catch (IOException ex) { - logger.info("Couldn't open InputStream for " + resource, ex); - return null; - } - } - - @Override - public int getMajorVersion() { - return 2; - } - - @Override - public int getMinorVersion() { - return 0; - } - - @Override - public String getMimeType(String filePath) { - return null; - } - - @Override - public String getRealPath(String path) { - Resource resource = this.resourceLoader.getResource(getResourceLocation(path)); - try { - return resource.getFile().getAbsolutePath(); - } - catch (IOException ex) { - logger.info("Couldn't determine real path of resource " + resource, ex); - return null; - } - } - - @Override - public Set getResourcePaths(String path) { - Resource resource = this.resourceLoader.getResource(getResourceLocation(path)); - try { - File file = resource.getFile(); - String[] fileList = file.list(); - String prefix = (path.endsWith("/") ? path : path + "/"); - Set resourcePaths = new HashSet(fileList.length); - for (String fileEntry : fileList) { - resourcePaths.add(prefix + fileEntry); - } - return resourcePaths; - } - catch (IOException ex) { - logger.info("Couldn't get resource paths for " + resource, ex); - return null; - } - } - - @Override - public URL getResource(String path) throws MalformedURLException { - Resource resource = this.resourceLoader.getResource(getResourceLocation(path)); - try { - return resource.getURL(); - } - catch (IOException ex) { - logger.info("Couldn't get URL for " + resource, ex); - return null; - } - } - - @Override - public Object getAttribute(String name) { - return this.attributes.get(name); - } - - @Override - public Enumeration getAttributeNames() { - return Collections.enumeration(this.attributes.keySet()); - } - - @Override - public void setAttribute(String name, Object value) { - if (value != null) { - this.attributes.put(name, value); - } - else { - this.attributes.remove(name); - } - } - - @Override - public void removeAttribute(String name) { - this.attributes.remove(name); - } - - public void addInitParameter(String name, String value) { - Assert.notNull(name, "Parameter name must not be null"); - this.initParameters.put(name, value); - } - - @Override - public String getInitParameter(String name) { - Assert.notNull(name, "Parameter name must not be null"); - return this.initParameters.get(name); - } - - @Override - public Enumeration getInitParameterNames() { - return Collections.enumeration(this.initParameters.keySet()); - } - - @Override - public void log(String message) { - logger.info(message); - } - - @Override - public void log(String message, Throwable t) { - logger.info(message, t); - } - - public void setPortletContextName(String portletContextName) { - this.portletContextName = portletContextName; - } - - @Override - public String getPortletContextName() { - return this.portletContextName; - } - - public void addContainerRuntimeOption(String key) { - this.containerRuntimeOptions.add(key); - } - - @Override - public Enumeration getContainerRuntimeOptions() { - return Collections.enumeration(this.containerRuntimeOptions); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletPreferences.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletPreferences.java deleted file mode 100644 index 60ceca2bf..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletPreferences.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2002-2009 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.IOException; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; -import javax.portlet.PortletPreferences; -import javax.portlet.PreferencesValidator; -import javax.portlet.ReadOnlyException; -import javax.portlet.ValidatorException; - -import org.springframework.util.Assert; - -/** - * Mock implementation of the {@link javax.portlet.PortletPreferences} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockPortletPreferences implements PortletPreferences { - - private PreferencesValidator preferencesValidator; - - private final Map preferences = new LinkedHashMap(); - - private final Set readOnly = new HashSet(); - - - public void setReadOnly(String key, boolean readOnly) { - Assert.notNull(key, "Key must not be null"); - if (readOnly) { - this.readOnly.add(key); - } - else { - this.readOnly.remove(key); - } - } - - @Override - public boolean isReadOnly(String key) { - Assert.notNull(key, "Key must not be null"); - return this.readOnly.contains(key); - } - - @Override - public String getValue(String key, String def) { - Assert.notNull(key, "Key must not be null"); - String[] values = this.preferences.get(key); - return (values != null && values.length > 0 ? values[0] : def); - } - - @Override - public String[] getValues(String key, String[] def) { - Assert.notNull(key, "Key must not be null"); - String[] values = this.preferences.get(key); - return (values != null && values.length > 0 ? values : def); - } - - @Override - public void setValue(String key, String value) throws ReadOnlyException { - setValues(key, new String[] {value}); - } - - @Override - public void setValues(String key, String[] values) throws ReadOnlyException { - Assert.notNull(key, "Key must not be null"); - if (isReadOnly(key)) { - throw new ReadOnlyException("Preference '" + key + "' is read-only"); - } - this.preferences.put(key, values); - } - - @Override - public Enumeration getNames() { - return Collections.enumeration(this.preferences.keySet()); - } - - @Override - public Map getMap() { - return Collections.unmodifiableMap(this.preferences); - } - - @Override - public void reset(String key) throws ReadOnlyException { - Assert.notNull(key, "Key must not be null"); - if (isReadOnly(key)) { - throw new ReadOnlyException("Preference '" + key + "' is read-only"); - } - this.preferences.remove(key); - } - - public void setPreferencesValidator(PreferencesValidator preferencesValidator) { - this.preferencesValidator = preferencesValidator; - } - - @Override - public void store() throws IOException, ValidatorException { - if (this.preferencesValidator != null) { - this.preferencesValidator.validate(this); - } - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequest.java deleted file mode 100644 index ffa226e7c..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequest.java +++ /dev/null @@ -1,565 +0,0 @@ -/* - * Copyright 2002-2014 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.security.Principal; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import javax.portlet.PortalContext; -import javax.portlet.PortletContext; -import javax.portlet.PortletMode; -import javax.portlet.PortletPreferences; -import javax.portlet.PortletRequest; -import javax.portlet.PortletSession; -import javax.portlet.WindowState; -import jakarta.servlet.http.Cookie; - -import org.springframework.util.Assert; -import org.springframework.util.CollectionUtils; - -/** - * Mock implementation of the {@link javax.portlet.PortletRequest} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockPortletRequest implements PortletRequest { - - private boolean active = true; - - private final PortalContext portalContext; - - private final PortletContext portletContext; - - private PortletSession session; - - private WindowState windowState = WindowState.NORMAL; - - private PortletMode portletMode = PortletMode.VIEW; - - private PortletPreferences portletPreferences = new MockPortletPreferences(); - - private final Map> properties = new LinkedHashMap>(); - - private final Map attributes = new LinkedHashMap(); - - private final Map parameters = new LinkedHashMap(); - - private String authType = null; - - private String contextPath = ""; - - private String remoteUser = null; - - private Principal userPrincipal = null; - - private final Set userRoles = new HashSet(); - - private boolean secure = false; - - private boolean requestedSessionIdValid = true; - - private final List responseContentTypes = new LinkedList(); - - private final List locales = new LinkedList(); - - private String scheme = "http"; - - private String serverName = "localhost"; - - private int serverPort = 80; - - private String windowID; - - private Cookie[] cookies; - - private final Set publicParameterNames = new HashSet(); - - - /** - * Create a new MockPortletRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @see MockPortalContext - * @see MockPortletContext - */ - public MockPortletRequest() { - this(null, null); - } - - /** - * Create a new MockPortletRequest with a default {@link MockPortalContext}. - * @param portletContext the PortletContext that the request runs in - * @see MockPortalContext - */ - public MockPortletRequest(PortletContext portletContext) { - this(null, portletContext); - } - - /** - * Create a new MockPortletRequest. - * @param portalContext the PortalContext that the request runs in - * @param portletContext the PortletContext that the request runs in - */ - public MockPortletRequest(PortalContext portalContext, PortletContext portletContext) { - this.portalContext = (portalContext != null ? portalContext : new MockPortalContext()); - this.portletContext = (portletContext != null ? portletContext : new MockPortletContext()); - this.responseContentTypes.add("text/html"); - this.locales.add(Locale.ENGLISH); - this.attributes.put(LIFECYCLE_PHASE, getLifecyclePhase()); - } - - - //--------------------------------------------------------------------- - // Lifecycle methods - //--------------------------------------------------------------------- - - /** - * Return the Portlet 2.0 lifecycle id for the current phase. - */ - protected String getLifecyclePhase() { - return null; - } - - /** - * Return whether this request is still active (that is, not completed yet). - */ - public boolean isActive() { - return this.active; - } - - /** - * Mark this request as completed. - */ - public void close() { - this.active = false; - } - - /** - * Check whether this request is still active (that is, not completed yet), - * throwing an IllegalStateException if not active anymore. - */ - protected void checkActive() throws IllegalStateException { - if (!this.active) { - throw new IllegalStateException("Request is not active anymore"); - } - } - - - //--------------------------------------------------------------------- - // PortletRequest methods - //--------------------------------------------------------------------- - - @Override - public boolean isWindowStateAllowed(WindowState windowState) { - return CollectionUtils.contains(this.portalContext.getSupportedWindowStates(), windowState); - } - - @Override - public boolean isPortletModeAllowed(PortletMode portletMode) { - return CollectionUtils.contains(this.portalContext.getSupportedPortletModes(), portletMode); - } - - public void setPortletMode(PortletMode portletMode) { - Assert.notNull(portletMode, "PortletMode must not be null"); - this.portletMode = portletMode; - } - - @Override - public PortletMode getPortletMode() { - return this.portletMode; - } - - public void setWindowState(WindowState windowState) { - Assert.notNull(windowState, "WindowState must not be null"); - this.windowState = windowState; - } - - @Override - public WindowState getWindowState() { - return this.windowState; - } - - public void setPreferences(PortletPreferences preferences) { - Assert.notNull(preferences, "PortletPreferences must not be null"); - this.portletPreferences = preferences; - } - - @Override - public PortletPreferences getPreferences() { - return this.portletPreferences; - } - - public void setSession(PortletSession session) { - this.session = session; - if (session instanceof MockPortletSession) { - MockPortletSession mockSession = ((MockPortletSession) session); - mockSession.access(); - } - } - - @Override - public PortletSession getPortletSession() { - return getPortletSession(true); - } - - @Override - public PortletSession getPortletSession(boolean create) { - checkActive(); - // Reset session if invalidated. - if (this.session instanceof MockPortletSession && ((MockPortletSession) this.session).isInvalid()) { - this.session = null; - } - // Create new session if necessary. - if (this.session == null && create) { - this.session = new MockPortletSession(this.portletContext); - } - return this.session; - } - - /** - * Set a single value for the specified property. - *

If there are already one or more values registered for the given - * property key, they will be replaced. - */ - public void setProperty(String key, String value) { - Assert.notNull(key, "Property key must not be null"); - List list = new LinkedList(); - list.add(value); - this.properties.put(key, list); - } - - /** - * Add a single value for the specified property. - *

If there are already one or more values registered for the given - * property key, the given value will be added to the end of the list. - */ - public void addProperty(String key, String value) { - Assert.notNull(key, "Property key must not be null"); - List oldList = this.properties.get(key); - if (oldList != null) { - oldList.add(value); - } - else { - List list = new LinkedList(); - list.add(value); - this.properties.put(key, list); - } - } - - @Override - public String getProperty(String key) { - Assert.notNull(key, "Property key must not be null"); - List list = this.properties.get(key); - return (list != null && list.size() > 0 ? list.get(0) : null); - } - - @Override - public Enumeration getProperties(String key) { - Assert.notNull(key, "property key must not be null"); - return Collections.enumeration(this.properties.get(key)); - } - - @Override - public Enumeration getPropertyNames() { - return Collections.enumeration(this.properties.keySet()); - } - - @Override - public PortalContext getPortalContext() { - return this.portalContext; - } - - public void setAuthType(String authType) { - this.authType = authType; - } - - @Override - public String getAuthType() { - return this.authType; - } - - public void setContextPath(String contextPath) { - this.contextPath = contextPath; - } - - @Override - public String getContextPath() { - return this.contextPath; - } - - public void setRemoteUser(String remoteUser) { - this.remoteUser = remoteUser; - } - - @Override - public String getRemoteUser() { - return this.remoteUser; - } - - public void setUserPrincipal(Principal userPrincipal) { - this.userPrincipal = userPrincipal; - } - - @Override - public Principal getUserPrincipal() { - return this.userPrincipal; - } - - public void addUserRole(String role) { - this.userRoles.add(role); - } - - @Override - public boolean isUserInRole(String role) { - return this.userRoles.contains(role); - } - - @Override - public Object getAttribute(String name) { - checkActive(); - return this.attributes.get(name); - } - - @Override - public Enumeration getAttributeNames() { - checkActive(); - return Collections.enumeration(this.attributes.keySet()); - } - - public void setParameters(Map parameters) { - Assert.notNull(parameters, "Parameters Map must not be null"); - this.parameters.clear(); - this.parameters.putAll(parameters); - } - - public void setParameter(String key, String value) { - Assert.notNull(key, "Parameter key must be null"); - Assert.notNull(value, "Parameter value must not be null"); - this.parameters.put(key, new String[] {value}); - } - - public void setParameter(String key, String[] values) { - Assert.notNull(key, "Parameter key must be null"); - Assert.notNull(values, "Parameter values must not be null"); - this.parameters.put(key, values); - } - - public void addParameter(String name, String value) { - addParameter(name, new String[] {value}); - } - - public void addParameter(String name, String[] values) { - String[] oldArr = this.parameters.get(name); - if (oldArr != null) { - String[] newArr = new String[oldArr.length + values.length]; - System.arraycopy(oldArr, 0, newArr, 0, oldArr.length); - System.arraycopy(values, 0, newArr, oldArr.length, values.length); - this.parameters.put(name, newArr); - } - else { - this.parameters.put(name, values); - } - } - - @Override - public String getParameter(String name) { - String[] arr = this.parameters.get(name); - return (arr != null && arr.length > 0 ? arr[0] : null); - } - - @Override - public Enumeration getParameterNames() { - return Collections.enumeration(this.parameters.keySet()); - } - - @Override - public String[] getParameterValues(String name) { - return this.parameters.get(name); - } - - @Override - public Map getParameterMap() { - return Collections.unmodifiableMap(this.parameters); - } - - public void setSecure(boolean secure) { - this.secure = secure; - } - - @Override - public boolean isSecure() { - return this.secure; - } - - @Override - public void setAttribute(String name, Object value) { - checkActive(); - if (value != null) { - this.attributes.put(name, value); - } - else { - this.attributes.remove(name); - } - } - - @Override - public void removeAttribute(String name) { - checkActive(); - this.attributes.remove(name); - } - - @Override - public String getRequestedSessionId() { - PortletSession session = this.getPortletSession(); - return (session != null ? session.getId() : null); - } - - public void setRequestedSessionIdValid(boolean requestedSessionIdValid) { - this.requestedSessionIdValid = requestedSessionIdValid; - } - - @Override - public boolean isRequestedSessionIdValid() { - return this.requestedSessionIdValid; - } - - public void addResponseContentType(String responseContentType) { - this.responseContentTypes.add(responseContentType); - } - - public void addPreferredResponseContentType(String responseContentType) { - this.responseContentTypes.add(0, responseContentType); - } - - @Override - public String getResponseContentType() { - return this.responseContentTypes.get(0); - } - - @Override - public Enumeration getResponseContentTypes() { - return Collections.enumeration(this.responseContentTypes); - } - - public void addLocale(Locale locale) { - this.locales.add(locale); - } - - public void addPreferredLocale(Locale locale) { - this.locales.add(0, locale); - } - - @Override - public Locale getLocale() { - return this.locales.get(0); - } - - @Override - public Enumeration getLocales() { - return Collections.enumeration(this.locales); - } - - public void setScheme(String scheme) { - this.scheme = scheme; - } - - @Override - public String getScheme() { - return this.scheme; - } - - public void setServerName(String serverName) { - this.serverName = serverName; - } - - @Override - public String getServerName() { - return this.serverName; - } - - public void setServerPort(int serverPort) { - this.serverPort = serverPort; - } - - @Override - public int getServerPort() { - return this.serverPort; - } - - public void setWindowID(String windowID) { - this.windowID = windowID; - } - - @Override - public String getWindowID() { - return this.windowID; - } - - public void setCookies(Cookie... cookies) { - this.cookies = cookies; - } - - @Override - public Cookie[] getCookies() { - return this.cookies; - } - - @Override - public Map getPrivateParameterMap() { - if (!this.publicParameterNames.isEmpty()) { - Map filtered = new LinkedHashMap(); - for (String key : this.parameters.keySet()) { - if (!this.publicParameterNames.contains(key)) { - filtered.put(key, this.parameters.get(key)); - } - } - return filtered; - } - else { - return Collections.unmodifiableMap(this.parameters); - } - } - - @Override - public Map getPublicParameterMap() { - if (!this.publicParameterNames.isEmpty()) { - Map filtered = new LinkedHashMap(); - for (String key : this.parameters.keySet()) { - if (this.publicParameterNames.contains(key)) { - filtered.put(key, this.parameters.get(key)); - } - } - return filtered; - } - else { - return Collections.emptyMap(); - } - } - - public void registerPublicParameter(String name) { - this.publicParameterNames.add(name); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequestDispatcher.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequestDispatcher.java deleted file mode 100644 index e80f774a6..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletRequestDispatcher.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.IOException; -import javax.portlet.PortletException; -import javax.portlet.PortletRequest; -import javax.portlet.PortletRequestDispatcher; -import javax.portlet.PortletResponse; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.util.Assert; - -/** - * Mock implementation of the {@link javax.portlet.PortletRequestDispatcher} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockPortletRequestDispatcher implements PortletRequestDispatcher { - - private final Log logger = LogFactory.getLog(getClass()); - - private final String url; - - - /** - * Create a new MockPortletRequestDispatcher for the given URL. - * @param url the URL to dispatch to. - */ - public MockPortletRequestDispatcher(String url) { - Assert.notNull(url, "URL must not be null"); - this.url = url; - } - - - @Override - public void include(RenderRequest request, RenderResponse response) throws PortletException, IOException { - include((PortletRequest) request, (PortletResponse) response); - } - - @Override - public void include(PortletRequest request, PortletResponse response) throws PortletException, IOException { - Assert.notNull(request, "Request must not be null"); - Assert.notNull(response, "Response must not be null"); - if (!(response instanceof MockMimeResponse)) { - throw new IllegalArgumentException("MockPortletRequestDispatcher requires MockMimeResponse"); - } - ((MockMimeResponse) response).setIncludedUrl(this.url); - if (logger.isDebugEnabled()) { - logger.debug("MockPortletRequestDispatcher: including URL [" + this.url + "]"); - } - } - - @Override - public void forward(PortletRequest request, PortletResponse response) throws PortletException, IOException { - Assert.notNull(request, "Request must not be null"); - Assert.notNull(response, "Response must not be null"); - if (!(response instanceof MockMimeResponse)) { - throw new IllegalArgumentException("MockPortletRequestDispatcher requires MockMimeResponse"); - } - ((MockMimeResponse) response).setForwardedUrl(this.url); - if (logger.isDebugEnabled()) { - logger.debug("MockPortletRequestDispatcher: forwarding to URL [" + this.url + "]"); - } - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletResponse.java deleted file mode 100644 index 93978a6d5..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletResponse.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; -import javax.portlet.PortalContext; -import javax.portlet.PortletResponse; -import jakarta.servlet.http.Cookie; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.w3c.dom.DOMException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import org.springframework.util.Assert; - -/** - * Mock implementation of the {@link javax.portlet.PortletResponse} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockPortletResponse implements PortletResponse { - - private final PortalContext portalContext; - - private final Map properties = new LinkedHashMap(); - - private String namespace = ""; - - private final Set cookies = new LinkedHashSet(); - - private final Map xmlProperties = new LinkedHashMap(); - - private Document xmlDocument; - - - /** - * Create a new MockPortletResponse with a default {@link MockPortalContext}. - * @see MockPortalContext - */ - public MockPortletResponse() { - this(null); - } - - /** - * Create a new MockPortletResponse. - * @param portalContext the PortalContext defining the supported - * PortletModes and WindowStates - */ - public MockPortletResponse(PortalContext portalContext) { - this.portalContext = (portalContext != null ? portalContext : new MockPortalContext()); - } - - /** - * Return the PortalContext that this MockPortletResponse runs in, - * defining the supported PortletModes and WindowStates. - */ - public PortalContext getPortalContext() { - return this.portalContext; - } - - - //--------------------------------------------------------------------- - // PortletResponse methods - //--------------------------------------------------------------------- - - @Override - public void addProperty(String key, String value) { - Assert.notNull(key, "Property key must not be null"); - String[] oldArr = this.properties.get(key); - if (oldArr != null) { - String[] newArr = new String[oldArr.length + 1]; - System.arraycopy(oldArr, 0, newArr, 0, oldArr.length); - newArr[oldArr.length] = value; - this.properties.put(key, newArr); - } - else { - this.properties.put(key, new String[] {value}); - } - } - - @Override - public void setProperty(String key, String value) { - Assert.notNull(key, "Property key must not be null"); - this.properties.put(key, new String[] {value}); - } - - public Set getPropertyNames() { - return Collections.unmodifiableSet(this.properties.keySet()); - } - - public String getProperty(String key) { - Assert.notNull(key, "Property key must not be null"); - String[] arr = this.properties.get(key); - return (arr != null && arr.length > 0 ? arr[0] : null); - } - - public String[] getProperties(String key) { - Assert.notNull(key, "Property key must not be null"); - return this.properties.get(key); - } - - @Override - public String encodeURL(String path) { - return path; - } - - public void setNamespace(String namespace) { - this.namespace = namespace; - } - - @Override - public String getNamespace() { - return this.namespace; - } - - @Override - public void addProperty(Cookie cookie) { - Assert.notNull(cookie, "Cookie must not be null"); - this.cookies.add(cookie); - } - - public Cookie[] getCookies() { - return this.cookies.toArray(new Cookie[this.cookies.size()]); - } - - public Cookie getCookie(String name) { - Assert.notNull(name, "Cookie name must not be null"); - for (Cookie cookie : this.cookies) { - if (name.equals(cookie.getName())) { - return cookie; - } - } - return null; - } - - @Override - public void addProperty(String key, Element value) { - Assert.notNull(key, "Property key must not be null"); - Element[] oldArr = this.xmlProperties.get(key); - if (oldArr != null) { - Element[] newArr = new Element[oldArr.length + 1]; - System.arraycopy(oldArr, 0, newArr, 0, oldArr.length); - newArr[oldArr.length] = value; - this.xmlProperties.put(key, newArr); - } - else { - this.xmlProperties.put(key, new Element[] {value}); - } - } - - - public Set getXmlPropertyNames() { - return Collections.unmodifiableSet(this.xmlProperties.keySet()); - } - - public Element getXmlProperty(String key) { - Assert.notNull(key, "Property key must not be null"); - Element[] arr = this.xmlProperties.get(key); - return (arr != null && arr.length > 0 ? arr[0] : null); - } - - public Element[] getXmlProperties(String key) { - Assert.notNull(key, "Property key must not be null"); - return this.xmlProperties.get(key); - } - - @Override - public Element createElement(String tagName) throws DOMException { - if (this.xmlDocument == null) { - try { - this.xmlDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); - } - catch (ParserConfigurationException ex) { - throw new DOMException(DOMException.INVALID_STATE_ERR, ex.toString()); - } - } - return this.xmlDocument.createElement(tagName); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletSession.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletSession.java deleted file mode 100644 index f1523bf95..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletSession.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import javax.portlet.PortletContext; -import javax.portlet.PortletSession; -import jakarta.servlet.http.HttpSessionBindingEvent; -import jakarta.servlet.http.HttpSessionBindingListener; - -import org.springframework.mock.web.MockHttpSession; - -/** - * Mock implementation of the {@link javax.portlet.PortletSession} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockPortletSession implements PortletSession { - - private static int nextId = 1; - - - private final String id = Integer.toString(nextId++); - - private final long creationTime = System.currentTimeMillis(); - - private int maxInactiveInterval; - - private long lastAccessedTime = System.currentTimeMillis(); - - private final PortletContext portletContext; - - private final Map portletAttributes = new HashMap(); - - private final Map applicationAttributes = new HashMap(); - - private boolean invalid = false; - - private boolean isNew = true; - - - /** - * Create a new MockPortletSession with a default {@link MockPortletContext}. - * @see MockPortletContext - */ - public MockPortletSession() { - this(null); - } - - /** - * Create a new MockPortletSession. - * @param portletContext the PortletContext that the session runs in - */ - public MockPortletSession(PortletContext portletContext) { - this.portletContext = (portletContext != null ? portletContext : new MockPortletContext()); - } - - - @Override - public Object getAttribute(String name) { - return this.portletAttributes.get(name); - } - - @Override - public Object getAttribute(String name, int scope) { - if (scope == PortletSession.PORTLET_SCOPE) { - return this.portletAttributes.get(name); - } - else if (scope == PortletSession.APPLICATION_SCOPE) { - return this.applicationAttributes.get(name); - } - return null; - } - - @Override - public Enumeration getAttributeNames() { - return Collections.enumeration(this.portletAttributes.keySet()); - } - - @Override - public Enumeration getAttributeNames(int scope) { - if (scope == PortletSession.PORTLET_SCOPE) { - return Collections.enumeration(this.portletAttributes.keySet()); - } - else if (scope == PortletSession.APPLICATION_SCOPE) { - return Collections.enumeration(this.applicationAttributes.keySet()); - } - return null; - } - - @Override - public long getCreationTime() { - return this.creationTime; - } - - @Override - public String getId() { - return this.id; - } - - public void access() { - this.lastAccessedTime = System.currentTimeMillis(); - setNew(false); - } - - @Override - public long getLastAccessedTime() { - return this.lastAccessedTime; - } - - @Override - public int getMaxInactiveInterval() { - return this.maxInactiveInterval; - } - - /** - * Clear all of this session's attributes. - */ - public void clearAttributes() { - doClearAttributes(this.portletAttributes); - doClearAttributes(this.applicationAttributes); - } - - protected void doClearAttributes(Map attributes) { - for (Iterator> it = attributes.entrySet().iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - String name = entry.getKey(); - Object value = entry.getValue(); - it.remove(); - if (value instanceof HttpSessionBindingListener) { - ((HttpSessionBindingListener) value).valueUnbound( - new HttpSessionBindingEvent(new MockHttpSession(), name, value)); - } - } - } - - @Override - public void invalidate() { - this.lastAccessedTime = System.currentTimeMillis(); - this.invalid = true; - clearAttributes(); - } - - public boolean isInvalid() { - return this.invalid; - } - - public void setNew(boolean value) { - this.isNew = value; - } - - @Override - public boolean isNew() { - return this.isNew; - } - - @Override - public void removeAttribute(String name) { - this.portletAttributes.remove(name); - } - - @Override - public void removeAttribute(String name, int scope) { - if (scope == PortletSession.PORTLET_SCOPE) { - this.portletAttributes.remove(name); - } - else if (scope == PortletSession.APPLICATION_SCOPE) { - this.applicationAttributes.remove(name); - } - } - - @Override - public void setAttribute(String name, Object value) { - if (value != null) { - this.portletAttributes.put(name, value); - } - else { - this.portletAttributes.remove(name); - } - } - - @Override - public void setAttribute(String name, Object value, int scope) { - if (scope == PortletSession.PORTLET_SCOPE) { - if (value != null) { - this.portletAttributes.put(name, value); - } - else { - this.portletAttributes.remove(name); - } - } - else if (scope == PortletSession.APPLICATION_SCOPE) { - if (value != null) { - this.applicationAttributes.put(name, value); - } - else { - this.applicationAttributes.remove(name); - } - } - } - - @Override - public void setMaxInactiveInterval(int interval) { - this.maxInactiveInterval = interval; - } - - @Override - public PortletContext getPortletContext() { - return this.portletContext; - } - - @Override - public Map getAttributeMap() { - return Collections.unmodifiableMap(this.portletAttributes); - } - - @Override - public Map getAttributeMap(int scope) { - if (scope == PortletSession.PORTLET_SCOPE) { - return Collections.unmodifiableMap(this.portletAttributes); - } - else if (scope == PortletSession.APPLICATION_SCOPE) { - return Collections.unmodifiableMap(this.applicationAttributes); - } - else { - return Collections.emptyMap(); - } - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletURL.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletURL.java deleted file mode 100644 index 503807e7c..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockPortletURL.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.util.Map; -import javax.portlet.PortalContext; -import javax.portlet.PortletMode; -import javax.portlet.PortletModeException; -import javax.portlet.PortletURL; -import javax.portlet.WindowState; -import javax.portlet.WindowStateException; - -import org.springframework.util.Assert; -import org.springframework.util.CollectionUtils; - -/** - * Mock implementation of the {@link javax.portlet.PortletURL} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockPortletURL extends MockBaseURL implements PortletURL { - - public static final String URL_TYPE_RENDER = "render"; - - public static final String URL_TYPE_ACTION = "action"; - - - private final PortalContext portalContext; - - private final String urlType; - - private WindowState windowState; - - private PortletMode portletMode; - - - /** - * Create a new MockPortletURL for the given URL type. - * @param portalContext the PortalContext defining the supported - * PortletModes and WindowStates - * @param urlType the URL type, for example "render" or "action" - * @see #URL_TYPE_RENDER - * @see #URL_TYPE_ACTION - */ - public MockPortletURL(PortalContext portalContext, String urlType) { - Assert.notNull(portalContext, "PortalContext is required"); - this.portalContext = portalContext; - this.urlType = urlType; - } - - - //--------------------------------------------------------------------- - // PortletURL methods - //--------------------------------------------------------------------- - - @Override - public void setWindowState(WindowState windowState) throws WindowStateException { - if (!CollectionUtils.contains(this.portalContext.getSupportedWindowStates(), windowState)) { - throw new WindowStateException("WindowState not supported", windowState); - } - this.windowState = windowState; - } - - @Override - public WindowState getWindowState() { - return this.windowState; - } - - @Override - public void setPortletMode(PortletMode portletMode) throws PortletModeException { - if (!CollectionUtils.contains(this.portalContext.getSupportedPortletModes(), portletMode)) { - throw new PortletModeException("PortletMode not supported", portletMode); - } - this.portletMode = portletMode; - } - - @Override - public PortletMode getPortletMode() { - return this.portletMode; - } - - @Override - public void removePublicRenderParameter(String name) { - this.parameters.remove(name); - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(encodeParameter("urlType", this.urlType)); - if (this.windowState != null) { - sb.append(";").append(encodeParameter("windowState", this.windowState.toString())); - } - if (this.portletMode != null) { - sb.append(";").append(encodeParameter("portletMode", this.portletMode.toString())); - } - for (Map.Entry entry : this.parameters.entrySet()) { - sb.append(";").append(encodeParameter("param_" + entry.getKey(), entry.getValue())); - } - return (isSecure() ? "https:" : "http:") + - "//localhost/mockportlet?" + sb.toString(); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderRequest.java deleted file mode 100644 index fe5c11a6c..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderRequest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import javax.portlet.PortalContext; -import javax.portlet.PortletContext; -import javax.portlet.PortletMode; -import javax.portlet.RenderRequest; -import javax.portlet.WindowState; - -/** - * Mock implementation of the {@link javax.portlet.RenderRequest} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockRenderRequest extends MockPortletRequest implements RenderRequest { - - /** - * Create a new MockRenderRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @see MockPortalContext - * @see MockPortletContext - */ - public MockRenderRequest() { - super(); - } - - /** - * Create a new MockRenderRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @param portletMode the mode that the portlet runs in - */ - public MockRenderRequest(PortletMode portletMode) { - super(); - setPortletMode(portletMode); - } - - /** - * Create a new MockRenderRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @param portletMode the mode that the portlet runs in - * @param windowState the window state to run the portlet in - */ - public MockRenderRequest(PortletMode portletMode, WindowState windowState) { - super(); - setPortletMode(portletMode); - setWindowState(windowState); - } - - /** - * Create a new MockRenderRequest with a default {@link MockPortalContext}. - * @param portletContext the PortletContext that the request runs in - */ - public MockRenderRequest(PortletContext portletContext) { - super(portletContext); - } - - /** - * Create a new MockRenderRequest. - * @param portalContext the PortletContext that the request runs in - * @param portletContext the PortletContext that the request runs in - */ - public MockRenderRequest(PortalContext portalContext, PortletContext portletContext) { - super(portalContext, portletContext); - } - - - @Override - protected String getLifecyclePhase() { - return RENDER_PHASE; - } - - @Override - public String getETag() { - return getProperty(RenderRequest.ETAG); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderResponse.java deleted file mode 100644 index defa5e9f7..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockRenderResponse.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.util.Collection; -import javax.portlet.PortalContext; -import javax.portlet.PortletMode; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; - -/** - * Mock implementation of the {@link javax.portlet.RenderResponse} interface. - * - * @author John A. Lewis - * @author Juergen Hoeller - * @since 2.0 - */ -public class MockRenderResponse extends MockMimeResponse implements RenderResponse { - - private String title; - - private Collection nextPossiblePortletModes; - - - /** - * Create a new MockRenderResponse with a default {@link MockPortalContext}. - * @see MockPortalContext - */ - public MockRenderResponse() { - super(); - } - - /** - * Create a new MockRenderResponse. - * @param portalContext the PortalContext defining the supported - * PortletModes and WindowStates - */ - public MockRenderResponse(PortalContext portalContext) { - super(portalContext); - } - - /** - * Create a new MockRenderResponse. - * @param portalContext the PortalContext defining the supported - * PortletModes and WindowStates - * @param request the corresponding render request that this response - * is generated for - */ - public MockRenderResponse(PortalContext portalContext, RenderRequest request) { - super(portalContext, request); - } - - - //--------------------------------------------------------------------- - // RenderResponse methods - //--------------------------------------------------------------------- - - @Override - public void setTitle(String title) { - this.title = title; - } - - public String getTitle() { - return this.title; - } - - @Override - public void setNextPossiblePortletModes(Collection portletModes) { - this.nextPossiblePortletModes = portletModes; - } - - public Collection getNextPossiblePortletModes() { - return this.nextPossiblePortletModes; - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceRequest.java deleted file mode 100644 index 421217069..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceRequest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; -import javax.portlet.PortalContext; -import javax.portlet.PortletContext; -import javax.portlet.RenderRequest; -import javax.portlet.ResourceRequest; - -/** - * Mock implementation of the {@link javax.portlet.ResourceRequest} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public class MockResourceRequest extends MockClientDataRequest implements ResourceRequest { - - private String resourceID; - - private String cacheability; - - private final Map privateRenderParameterMap = new LinkedHashMap(); - - - /** - * Create a new MockResourceRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @see org.springframework.mock.web.portlet.MockPortalContext - * @see org.springframework.mock.web.portlet.MockPortletContext - */ - public MockResourceRequest() { - super(); - } - - /** - * Create a new MockResourceRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @param resourceID the resource id for this request - */ - public MockResourceRequest(String resourceID) { - super(); - this.resourceID = resourceID; - } - - /** - * Create a new MockResourceRequest with a default {@link MockPortalContext} - * and a default {@link MockPortletContext}. - * @param url the resource URL for this request - */ - public MockResourceRequest(MockResourceURL url) { - super(); - this.resourceID = url.getResourceID(); - this.cacheability = url.getCacheability(); - } - - /** - * Create a new MockResourceRequest with a default {@link MockPortalContext}. - * @param portletContext the PortletContext that the request runs in - */ - public MockResourceRequest(PortletContext portletContext) { - super(portletContext); - } - - /** - * Create a new MockResourceRequest. - * @param portalContext the PortalContext that the request runs in - * @param portletContext the PortletContext that the request runs in - */ - public MockResourceRequest(PortalContext portalContext, PortletContext portletContext) { - super(portalContext, portletContext); - } - - - @Override - protected String getLifecyclePhase() { - return RESOURCE_PHASE; - } - - public void setResourceID(String resourceID) { - this.resourceID = resourceID; - } - - @Override - public String getResourceID() { - return this.resourceID; - } - - public void setCacheability(String cacheLevel) { - this.cacheability = cacheLevel; - } - - @Override - public String getCacheability() { - return this.cacheability; - } - - @Override - public String getETag() { - return getProperty(RenderRequest.ETAG); - } - - public void addPrivateRenderParameter(String key, String value) { - this.privateRenderParameterMap.put(key, new String[] {value}); - } - - public void addPrivateRenderParameter(String key, String[] values) { - this.privateRenderParameterMap.put(key, values); - } - - @Override - public Map getPrivateRenderParameterMap() { - return Collections.unmodifiableMap(this.privateRenderParameterMap); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceResponse.java deleted file mode 100644 index 06bba7a00..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceResponse.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import javax.portlet.ResourceResponse; - -/** - * Mock implementation of the {@link javax.portlet.ResourceResponse} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public class MockResourceResponse extends MockMimeResponse implements ResourceResponse { - - private int contentLength = 0; - - - @Override - public void setContentLength(int len) { - this.contentLength = len; - } - - public int getContentLength() { - return this.contentLength; - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceURL.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceURL.java deleted file mode 100644 index e38e08986..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockResourceURL.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.util.Map; -import javax.portlet.ResourceURL; - -/** - * Mock implementation of the {@link javax.portlet.ResourceURL} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public class MockResourceURL extends MockBaseURL implements ResourceURL { - - private String resourceID; - - private String cacheability; - - - //--------------------------------------------------------------------- - // ResourceURL methods - //--------------------------------------------------------------------- - - @Override - public void setResourceID(String resourceID) { - this.resourceID = resourceID; - } - - public String getResourceID() { - return this.resourceID; - } - - @Override - public void setCacheability(String cacheLevel) { - this.cacheability = cacheLevel; - } - - @Override - public String getCacheability() { - return this.cacheability; - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(encodeParameter("resourceID", this.resourceID)); - if (this.cacheability != null) { - sb.append(";").append(encodeParameter("cacheability", this.cacheability)); - } - for (Map.Entry entry : this.parameters.entrySet()) { - sb.append(";").append(encodeParameter("param_" + entry.getKey(), entry.getValue())); - } - return (isSecure() ? "https:" : "http:") + - "//localhost/mockportlet?" + sb.toString(); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockStateAwareResponse.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockStateAwareResponse.java deleted file mode 100644 index bb085ba21..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/MockStateAwareResponse.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.Serializable; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import javax.portlet.PortalContext; -import javax.portlet.PortletMode; -import javax.portlet.PortletModeException; -import javax.portlet.StateAwareResponse; -import javax.portlet.WindowState; -import javax.portlet.WindowStateException; -import javax.xml.namespace.QName; - -import org.springframework.util.Assert; -import org.springframework.util.CollectionUtils; - -/** - * Mock implementation of the {@link javax.portlet.StateAwareResponse} interface. - * - * @author Juergen Hoeller - * @since 3.0 - */ -public class MockStateAwareResponse extends MockPortletResponse implements StateAwareResponse { - - private WindowState windowState; - - private PortletMode portletMode; - - private final Map renderParameters = new LinkedHashMap(); - - private final Map events = new HashMap(); - - - /** - * Create a new MockActionResponse with a default {@link MockPortalContext}. - * @see org.springframework.mock.web.portlet.MockPortalContext - */ - public MockStateAwareResponse() { - super(); - } - - /** - * Create a new MockActionResponse. - * @param portalContext the PortalContext defining the supported - * PortletModes and WindowStates - */ - public MockStateAwareResponse(PortalContext portalContext) { - super(portalContext); - } - - - @Override - public void setWindowState(WindowState windowState) throws WindowStateException { - if (!CollectionUtils.contains(getPortalContext().getSupportedWindowStates(), windowState)) { - throw new WindowStateException("WindowState not supported", windowState); - } - this.windowState = windowState; - } - - @Override - public WindowState getWindowState() { - return this.windowState; - } - - @Override - public void setPortletMode(PortletMode portletMode) throws PortletModeException { - if (!CollectionUtils.contains(getPortalContext().getSupportedPortletModes(), portletMode)) { - throw new PortletModeException("PortletMode not supported", portletMode); - } - this.portletMode = portletMode; - } - - @Override - public PortletMode getPortletMode() { - return this.portletMode; - } - - @Override - public void setRenderParameters(Map parameters) { - Assert.notNull(parameters, "Parameters Map must not be null"); - this.renderParameters.clear(); - this.renderParameters.putAll(parameters); - } - - @Override - public void setRenderParameter(String key, String value) { - Assert.notNull(key, "Parameter key must not be null"); - Assert.notNull(value, "Parameter value must not be null"); - this.renderParameters.put(key, new String[] {value}); - } - - @Override - public void setRenderParameter(String key, String[] values) { - Assert.notNull(key, "Parameter key must not be null"); - Assert.notNull(values, "Parameter values must not be null"); - this.renderParameters.put(key, values); - } - - public String getRenderParameter(String key) { - Assert.notNull(key, "Parameter key must not be null"); - String[] arr = this.renderParameters.get(key); - return (arr != null && arr.length > 0 ? arr[0] : null); - } - - public String[] getRenderParameterValues(String key) { - Assert.notNull(key, "Parameter key must not be null"); - return this.renderParameters.get(key); - } - - public Iterator getRenderParameterNames() { - return this.renderParameters.keySet().iterator(); - } - - @Override - public Map getRenderParameterMap() { - return Collections.unmodifiableMap(this.renderParameters); - } - - @Override - public void removePublicRenderParameter(String name) { - this.renderParameters.remove(name); - } - - @Override - public void setEvent(QName name, Serializable value) { - this.events.put(name, value); - } - - @Override - public void setEvent(String name, Serializable value) { - this.events.put(new QName(name), value); - } - - public Iterator getEventNames() { - return this.events.keySet().iterator(); - } - - public Serializable getEvent(QName name) { - return this.events.get(name); - } - - public Serializable getEvent(String name) { - return this.events.get(new QName(name)); - } - -} \ No newline at end of file diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/ServletWrappingPortletContext.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/ServletWrappingPortletContext.java deleted file mode 100644 index da179845e..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/ServletWrappingPortletContext.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2002-2016 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet; - -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Set; -import javax.portlet.PortletContext; -import javax.portlet.PortletRequestDispatcher; -import jakarta.servlet.ServletContext; - -import org.springframework.util.Assert; - -/** - * Mock implementation of the {@link javax.portlet.PortletContext} interface, - * wrapping an underlying {@link javax.servlet.ServletContext}. - * - * @author Juergen Hoeller - * @since 3.0 - * @see MockPortletContext - */ -public class ServletWrappingPortletContext implements PortletContext { - - private final ServletContext servletContext; - - - /** - * Create a new PortletContext wrapping the given ServletContext. - * @param servletContext the ServletContext to wrap - */ - public ServletWrappingPortletContext(ServletContext servletContext) { - Assert.notNull(servletContext, "ServletContext must not be null"); - this.servletContext = servletContext; - } - - /** - * Return the underlying ServletContext that this PortletContext wraps. - */ - public final ServletContext getServletContext() { - return this.servletContext; - } - - - @Override - public String getServerInfo() { - return this.servletContext.getServerInfo(); - } - - @Override - public PortletRequestDispatcher getRequestDispatcher(String path) { - return null; - } - - @Override - public PortletRequestDispatcher getNamedDispatcher(String name) { - return null; - } - - @Override - public InputStream getResourceAsStream(String path) { - return this.servletContext.getResourceAsStream(path); - } - - @Override - public int getMajorVersion() { - return 2; - } - - @Override - public int getMinorVersion() { - return 0; - } - - @Override - public String getMimeType(String file) { - return this.servletContext.getMimeType(file); - } - - @Override - public String getRealPath(String path) { - return this.servletContext.getRealPath(path); - } - - @Override - public Set getResourcePaths(String path) { - return this.servletContext.getResourcePaths(path); - } - - @Override - public URL getResource(String path) throws MalformedURLException { - return this.servletContext.getResource(path); - } - - @Override - public Object getAttribute(String name) { - return this.servletContext.getAttribute(name); - } - - @Override - public Enumeration getAttributeNames() { - return this.servletContext.getAttributeNames(); - } - - @Override - public String getInitParameter(String name) { - return this.servletContext.getInitParameter(name); - } - - @Override - public Enumeration getInitParameterNames() { - return this.servletContext.getInitParameterNames(); - } - - @Override - public void log(String msg) { - this.servletContext.log(msg); - } - - @Override - public void log(String message, Throwable throwable) { - this.servletContext.log(message, throwable); - } - - @Override - public void removeAttribute(String name) { - this.servletContext.removeAttribute(name); - } - - @Override - public void setAttribute(String name, Object object) { - this.servletContext.setAttribute(name, object); - } - - @Override - public String getPortletContextName() { - return this.servletContext.getServletContextName(); - } - - @Override - public Enumeration getContainerRuntimeOptions() { - return Collections.enumeration(Collections.emptySet()); - } - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/MultipartActionRequest.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/MultipartActionRequest.java deleted file mode 100644 index 6df611fe2..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/MultipartActionRequest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2002-2008 the original author or authors. - * - * Licensed 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 - * - * https://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.mock.web.portlet.multipart; - -import javax.portlet.ActionRequest; - -import org.springframework.web.multipart.MultipartRequest; - -/** - * Interface which provides additional methods for dealing with multipart - * content within a portlet request, allowing to access uploaded files. - * Implementations also need to override the standard ActionRequest - * methods for parameter access, making multipart parameters available. - * - *

A concrete implementation is {@link DefaultMultipartActionRequest}. - * - * @author Juergen Hoeller - * @since 2.0 - * @see PortletMultipartResolver - * @see org.springframework.web.multipart.MultipartFile - * @see javax.portlet.ActionRequest#getParameter - * @see javax.portlet.ActionRequest#getParameterNames - * @see javax.portlet.ActionRequest#getParameterMap - */ -public interface MultipartActionRequest extends ActionRequest, MultipartRequest { - -} diff --git a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/package-info.java b/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/package-info.java deleted file mode 100644 index 0ed9b6066..000000000 --- a/plugins/portlet-mocks/src/main/java/org/apache/struts2/mock/web/portlet/multipart/package-info.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2002-2016 the original author or authors. - * - * Licensed 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 - * - * https://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. - */ -/* - * This package is a copy of the org.springframework.web.portlet.multipart package from Spring 4.3.x - * (org.springframework, spring-webmvc-portlet, EasyMock) or - * existing Portlet API mock objects. - */ -package org.apache.struts2.mock.web.portlet; \ No newline at end of file diff --git a/plugins/portlet-mocks/src/site/site.xml b/plugins/portlet-mocks/src/site/site.xml deleted file mode 100644 index 54fdcf4f4..000000000 --- a/plugins/portlet-mocks/src/site/site.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - org.apache.maven.skins - maven-fluido-skin - ${fluido-skin.version} - - - Apache Software Foundation - http://www.apache.org/images/asf-logo.gif - http://www.apache.org/ - - - Apache Struts - http://struts.apache.org/img/struts-logo.svg - http://struts.apache.org/ - - - - - - - - - -

- - -
- - Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project - logos are trademarks of The Apache Software Foundation. - ]]> -
- - diff --git a/plugins/portlet-mocks/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java b/plugins/portlet-mocks/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java deleted file mode 100644 index 019994d54..000000000 --- a/plugins/portlet-mocks/src/test/java/org/apache/struts2/StrutsSpringPortletMockObjectsTest.java +++ /dev/null @@ -1,1604 +0,0 @@ -/* - * Copyright 2020 Apache Software Foundation. - * - * Licensed 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; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.net.MalformedURLException; -import java.nio.charset.StandardCharsets; -import java.security.Principal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Locale; -import java.util.Map; -import java.util.ResourceBundle; -import java.util.Set; -import javax.portlet.ActionRequest; -import javax.portlet.PortletMode; -import javax.portlet.PortletPreferences; -import javax.portlet.PortletRequest; -import javax.portlet.PortletSession; -import javax.portlet.PortletURL; -import javax.portlet.PreferencesValidator; -import javax.portlet.ReadOnlyException; -import javax.portlet.ResourceURL; -import javax.portlet.WindowState; -import jakarta.security.auth.Subject; -import jakarta.servlet.http.Cookie; -import javax.xml.namespace.QName; -import junit.framework.TestCase; -import org.apache.struts2.mock.web.portlet.MockActionRequest; -import org.apache.struts2.mock.web.portlet.MockActionResponse; -import org.apache.struts2.mock.web.portlet.MockCacheControl; -import org.apache.struts2.mock.web.portlet.MockClientDataRequest; -import org.apache.struts2.mock.web.portlet.MockEvent; -import org.apache.struts2.mock.web.portlet.MockEventRequest; -import org.apache.struts2.mock.web.portlet.MockEventResponse; -import org.apache.struts2.mock.web.portlet.MockMimeResponse; -import org.apache.struts2.mock.web.portlet.MockMultipartActionRequest; -import org.apache.struts2.mock.web.portlet.MockPortalContext; -import org.apache.struts2.mock.web.portlet.MockPortletConfig; -import org.apache.struts2.mock.web.portlet.MockPortletContext; -import org.apache.struts2.mock.web.portlet.MockPortletPreferences; -import org.apache.struts2.mock.web.portlet.MockPortletRequest; -import org.apache.struts2.mock.web.portlet.MockPortletRequestDispatcher; -import org.apache.struts2.mock.web.portlet.MockPortletResponse; -import org.apache.struts2.mock.web.portlet.MockPortletSession; -import org.apache.struts2.mock.web.portlet.MockPortletURL; -import org.apache.struts2.mock.web.portlet.MockRenderRequest; -import org.apache.struts2.mock.web.portlet.MockRenderResponse; -import org.apache.struts2.mock.web.portlet.MockResourceRequest; -import org.apache.struts2.mock.web.portlet.MockResourceResponse; -import org.apache.struts2.mock.web.portlet.MockResourceURL; -import org.apache.struts2.mock.web.portlet.MockStateAwareResponse; -import org.apache.struts2.mock.web.portlet.ServletWrappingPortletContext; -import org.springframework.mock.web.MockServletContext; -import org.springframework.util.MultiValueMap; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.util.WebUtils; -import org.w3c.dom.Element; - -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertNotEquals; - -/** - * Basic test class for Portlet Mock Object testing - * - */ -public class StrutsSpringPortletMockObjectsTest extends TestCase { - - /** - * An empty preferences validator for code coverage only - */ - private static class BasicPreferencesValidator implements PreferencesValidator { - - @Override - public void validate(PortletPreferences preferences) { - throw new UnsupportedOperationException("Not supported yet."); - } - - } - - public void testMockActionRequest() { - final String TEST_ACTIONNAME = "TEST_ACTIONNAME"; - - // Call each constructor in sequence, do some basic checks - new MockActionRequest(); // Only test is to confirm constructor completes without exception - MockActionRequest mockActionRequest; - mockActionRequest = new MockActionRequest(TEST_ACTIONNAME); - assertEquals("Action name (ActionRequest.ACTION_NAME) " + TEST_ACTIONNAME + " not set ?", TEST_ACTIONNAME, mockActionRequest.getParameter(ActionRequest.ACTION_NAME)); - mockActionRequest = new MockActionRequest(PortletMode.VIEW); - assertEquals("PortletMode.VIEW not set ?", PortletMode.VIEW, mockActionRequest.getPortletMode()); - - final MockPortletContext mockPortletContext = new MockPortletContext(); - final MockPortalContext mockPortalContext = new MockPortalContext(); - new MockActionRequest(mockPortletContext); // Only test is to confirm constructor completes without exception - mockActionRequest = new MockActionRequest(mockPortalContext, mockPortletContext); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockActionRequest.getPortalContext()); - } - - public void testMockActionResponse() { - final String TEST_PARAM = "TEST_PARAM"; - final String TEST_PARAM2 = "TEST_PARAM2"; - final String TEST_PARAM3 = "TEST_PARAM3"; - final String TEST_PARAM_VALUE = "NORMALVALUE"; - final String[] TEST_PARAM_ARRAYVALUE = { "ARRAYVALUE1", "ARRAYVALUE2" }; - final String[] TEST_PARAM_ARRAYVALUE2 = { "ARRAYVALUE3", "ARRAYVALUE4" }; - final String TEST_REDIRECT_URL = "localhost:8080/fakeurl"; - final String TEST_RENDER_URLPARAM_NAME = "fake_render_url_param_name"; - - // Call each constructor in sequence, do some basic checks - MockActionResponse mockActionResponse = new MockActionResponse(); - try { - mockActionResponse.setPortletMode(PortletMode.VIEW); - } catch (Exception ex) { - fail("MockActionResponse portlet mode set failed. Exception: " + ex); - } - assertEquals("PortletMode.VIEW not set ?", PortletMode.VIEW, mockActionResponse.getPortletMode()); - - final MockPortalContext mockPortalContext = new MockPortalContext(); - mockActionResponse = new MockActionResponse(mockPortalContext); // Only test is to confirm constructor completes without exception - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockActionResponse.getPortalContext()); - mockActionResponse.setRenderParameter(TEST_PARAM, TEST_PARAM_VALUE); - mockActionResponse.setRenderParameter(TEST_PARAM2, TEST_PARAM_ARRAYVALUE); - assertEquals("Portal test render parameter value not as expected ?", TEST_PARAM_VALUE, mockActionResponse.getRenderParameter(TEST_PARAM)); - assertEquals("Portal test render parameter value not as expected ?", TEST_PARAM_ARRAYVALUE[0], mockActionResponse.getRenderParameter(TEST_PARAM2)); - final Map renderParametersMap = new LinkedHashMap<>(); - renderParametersMap.put(TEST_PARAM3, TEST_PARAM_ARRAYVALUE2); - mockActionResponse.setRenderParameters(renderParametersMap); - assertNull("Portal test render parameter value not cleared as expected ?", mockActionResponse.getRenderParameter(TEST_PARAM)); - assertNull("Portal test render parameter value not cleared as expected ?", mockActionResponse.getRenderParameter(TEST_PARAM2)); - assertEquals("Portal test render parameter map value not as expected ?", renderParametersMap, mockActionResponse.getRenderParameterMap()); - - try { - mockActionResponse.sendRedirect(TEST_REDIRECT_URL); - fail("Able to redirect after windowState/portletMode/renderParameters set ?"); - } catch (IllegalStateException ise) { - // Expected failure - } catch (Exception ex) { - fail("MockActionResponse sendredirect failed. Exception: " + ex); - } - mockActionResponse = new MockActionResponse(); // Clean mock response - try { - mockActionResponse.sendRedirect(TEST_REDIRECT_URL); - } catch (Exception ex) { - fail("MockActionResponse sendredirect failed. Exception: " + ex); - } - assertEquals("Redirect url not as expected ?", TEST_REDIRECT_URL, mockActionResponse.getRedirectedUrl()); - mockActionResponse = new MockActionResponse(); // Clean mock response - try { - // Note: The original Spring 4.3.x mock implementation always threw an IllegalStateException when calling the method below. - mockActionResponse.sendRedirect(TEST_REDIRECT_URL, TEST_RENDER_URLPARAM_NAME); - } catch (Exception ex) { - fail("MockActionResponse sendredirect failed. Exception: " + ex); - } - assertEquals("Redirect url not as expected ?", TEST_REDIRECT_URL, mockActionResponse.getRedirectedUrl()); - assertEquals("Redirect url render parameter not as expected ?", TEST_REDIRECT_URL, mockActionResponse.getRenderParameter(TEST_RENDER_URLPARAM_NAME)); - } - - public void testMockCacheControl() { - final int TEST_EXPIRATION_TIME = 30; - final String TEST_ETAG = "TEST_ETAG"; - - // Call each constructor in sequence, do some basic checks - MockCacheControl mockCacheControl = new MockCacheControl(); - assertEquals("Initial expiry not as expected ?", 0, mockCacheControl.getExpirationTime()); - assertFalse("Initial scope public ?", mockCacheControl.isPublicScope()); - assertFalse("Initial use cache true ?", mockCacheControl.useCachedContent()); - mockCacheControl.setExpirationTime(TEST_EXPIRATION_TIME); - assertEquals("Initial expiry not as expected ?", TEST_EXPIRATION_TIME, mockCacheControl.getExpirationTime()); - mockCacheControl.setPublicScope(true); - assertTrue("Updated scope not public ?", mockCacheControl.isPublicScope()); - mockCacheControl.setPublicScope(false); - assertFalse("Updated scope still public ?", mockCacheControl.isPublicScope()); - mockCacheControl.setETag(TEST_ETAG); - assertEquals("ETag not not as expected ?", TEST_ETAG, mockCacheControl.getETag()); - mockCacheControl.setUseCachedContent(true); - assertTrue("Updated use cache not true ?", mockCacheControl.useCachedContent()); - mockCacheControl.setUseCachedContent(false); - assertFalse("Updated use cache still true ?", mockCacheControl.useCachedContent()); - } - - public void testMockClientDataRequest() { - final String TEST_FAKECONTENT = "Some fake content for the test."; - final byte[] TEST_FAKECONTENT_ASBYTES = TEST_FAKECONTENT.getBytes(StandardCharsets.UTF_8); - final String TEST_CONTENT_TYPE = "text/html"; - final String TEST_METHOD = "POST"; - - // Call each constructor in sequence, do some basic checks - new MockClientDataRequest(); // Only test is to confirm constructor completes without exception - final MockPortletContext mockPortletContext = new MockPortletContext(); - final MockPortalContext mockPortalContext = new MockPortalContext(); - new MockClientDataRequest(mockPortletContext); // Only test is to confirm constructor completes without exception - MockClientDataRequest mockClientDataRequest = new MockClientDataRequest(mockPortalContext, mockPortletContext); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockClientDataRequest.getPortalContext()); - mockClientDataRequest.setContent(TEST_FAKECONTENT_ASBYTES); - assertEquals("Content length not as expected ?", TEST_FAKECONTENT_ASBYTES.length, mockClientDataRequest.getContentLength()); - mockClientDataRequest.setCharacterEncoding(StandardCharsets.UTF_8.name()); - assertEquals("Charset not as expected ?", StandardCharsets.UTF_8.name(), mockClientDataRequest.getCharacterEncoding()); - mockClientDataRequest.setContentType(TEST_CONTENT_TYPE); - assertEquals("Content-type not as expected ?", TEST_CONTENT_TYPE, mockClientDataRequest.getContentType()); - mockClientDataRequest.setMethod(TEST_METHOD); - assertEquals("Method not as expected ?", TEST_METHOD, mockClientDataRequest.getMethod()); - try ( InputStream inputStream = mockClientDataRequest.getPortletInputStream() ) { - final byte[] readContent = new byte[mockClientDataRequest.getContentLength()]; - inputStream.read(readContent, 0, readContent.length); - assertArrayEquals("Read byte array does not match original ?", TEST_FAKECONTENT_ASBYTES, readContent); - } catch (Exception ex) { - fail("MockClientDataRequest read inputstream failed. Exception: " + ex); - } - try ( BufferedReader bufferedReader = mockClientDataRequest.getReader() ) { - final String theOnlyLine = bufferedReader.readLine(); - assertEquals("Read line does not match original ?", TEST_FAKECONTENT, theOnlyLine); - } catch (Exception ex) { - fail("MockClientDataRequest read inputstream failed. Exception: " + ex); - } - } - - public void testMockEvent() { - final String TEST_EVENT = "TEST_EVENT"; - final String TEST_EVENT_VALUE = "TEST_EVENT_VALUE"; - final QName TEST_QNAME = new QName(TEST_EVENT); - - // Call each constructor in sequence, do some basic checks - MockEvent mockClientDataRequest = new MockEvent(TEST_EVENT); - assertNull("Initial value not null ?", mockClientDataRequest.getValue()); - assertEquals("Event name does not match ?", TEST_EVENT, mockClientDataRequest.getName()); - assertEquals("Event QName does not match ?", new QName(TEST_EVENT), mockClientDataRequest.getQName()); - mockClientDataRequest = new MockEvent(TEST_EVENT, TEST_EVENT_VALUE); - assertEquals("Initial value not as expected ?", TEST_EVENT_VALUE, mockClientDataRequest.getValue()); - assertEquals("Event name does not match ?", TEST_EVENT, mockClientDataRequest.getName()); - assertEquals("Event QName does not match ?", new QName(TEST_EVENT), mockClientDataRequest.getQName()); - mockClientDataRequest = new MockEvent(TEST_QNAME); - assertNull("Initial value not null ?", mockClientDataRequest.getValue()); - assertEquals("Event name does not match ?", TEST_EVENT, mockClientDataRequest.getName()); - assertEquals("Event QName does not match ?", TEST_QNAME, mockClientDataRequest.getQName()); - mockClientDataRequest = new MockEvent(TEST_QNAME, TEST_EVENT_VALUE); - assertEquals("Initial value not as expected ?", TEST_EVENT_VALUE, mockClientDataRequest.getValue()); - assertEquals("Event name does not match ?", TEST_EVENT, mockClientDataRequest.getName()); - assertEquals("Event QName does not match ?", TEST_QNAME, mockClientDataRequest.getQName()); - } - - public void testMockEventRequest() { - final MockEvent TEST_MOCKEVENT = new MockEvent("MockEventName", "MockEventValue"); - final String TEST_METHOD = "POST"; - - // Call each constructor in sequence, do some basic checks - MockEventRequest mockEventRequest = new MockEventRequest(TEST_MOCKEVENT); - assertEquals("Event not the event set ?", TEST_MOCKEVENT, mockEventRequest.getEvent()); - mockEventRequest.setMethod(TEST_METHOD); - assertEquals("Method not the method set ?", TEST_METHOD, mockEventRequest.getMethod()); - final MockPortletContext mockPortletContext = new MockPortletContext(); - final MockPortalContext mockPortalContext = new MockPortalContext(); - new MockEventRequest(TEST_MOCKEVENT, mockPortletContext); // Only test is to confirm constructor completes without exception - mockEventRequest = new MockEventRequest(TEST_MOCKEVENT, mockPortalContext, mockPortletContext); // Only test is to confirm constructor completes without exception - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockEventRequest.getPortalContext()); - } - - public void testMockEventResponse() { - // Call each constructor in sequence, do some basic checks - try { - new MockEventResponse(); // Only test is to confirm constructor completes without exception - assertTrue(true); - } catch (Throwable t) { - fail(t.getMessage()); - } - } - - public void testMockMimeResponse() { - final String TEST_CONTENT_TYPE = "text/html"; - final int TEST_BUFFERSIZE = 8192; - final String TEST_INCLUDED_URL = "localhost:8080/fakeincludedurl"; - final String TEST_FORWARDED_URL = "localhost:8080/fakeforwardedurl"; - final String TEST_FAKECONTENT = "Some fake content for the test."; - final byte[] TEST_FAKECONTENT_ASBYTES = TEST_FAKECONTENT.getBytes(StandardCharsets.UTF_8); - - // Call each constructor in sequence, do some basic checks - MockMimeResponse mockMimeResponse = new MockMimeResponse(); - assertEquals("Default character encoding not as expected ?", WebUtils.DEFAULT_CHARACTER_ENCODING, mockMimeResponse.getCharacterEncoding()); - assertEquals("Default locale not as expected ?", Locale.getDefault(), mockMimeResponse.getLocale()); - assertTrue("Default buffersize not as expected ?", mockMimeResponse.getBufferSize() >= 4096); - assertFalse("Mock response already committed ?", mockMimeResponse.isCommitted()); - final MockPortalContext mockPortalContext = new MockPortalContext(); - final MockPortletContext mockPortletContext = new MockPortletContext(); - final MockPortletRequest mockPortletRequest = new MockPortletRequest(mockPortalContext, mockPortletContext); - mockMimeResponse = new MockMimeResponse(mockPortalContext); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockMimeResponse.getPortalContext()); - mockMimeResponse = new MockMimeResponse(mockPortalContext, mockPortletRequest); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockMimeResponse.getPortalContext()); - mockMimeResponse.setContentType(TEST_CONTENT_TYPE); - assertEquals("Content-type not as expected ?", TEST_CONTENT_TYPE, mockMimeResponse.getContentType()); - mockMimeResponse.setCharacterEncoding(StandardCharsets.UTF_8.name()); - assertEquals("Charset not as expected ?", StandardCharsets.UTF_8.name(), mockMimeResponse.getCharacterEncoding()); - mockMimeResponse.setBufferSize(TEST_BUFFERSIZE); - assertEquals("Buffersize not as expected ?", TEST_BUFFERSIZE, mockMimeResponse.getBufferSize()); - mockMimeResponse.setCommitted(true); - assertTrue("Response not committed ?", mockMimeResponse.isCommitted()); - mockMimeResponse.setCommitted(false); - assertFalse("Response still committed ?", mockMimeResponse.isCommitted()); - mockMimeResponse.setIncludedUrl(TEST_INCLUDED_URL); - assertEquals("Included URL not as expected ?", TEST_INCLUDED_URL, mockMimeResponse.getIncludedUrl()); - mockMimeResponse.setForwardedUrl(TEST_FORWARDED_URL); - assertEquals("Forwarded URL not as expected ?", TEST_FORWARDED_URL, mockMimeResponse.getForwardedUrl()); - try { - assertNotNull("OutputStream null ?", mockMimeResponse.getPortletOutputStream()); - } catch (Exception ex) { - fail("MockMimeResponse get outputstream failed. Exception: " + ex); - } - PortletURL portletUrl = mockMimeResponse.createRenderURL(); - assertNotNull("RenderURL null ?", portletUrl); - portletUrl = mockMimeResponse.createActionURL(); - assertNotNull("ActionURL null ?", portletUrl); - ResourceURL resourceURL = mockMimeResponse.createResourceURL(); - assertNotNull("ResourceURL null ?", resourceURL); - assertNotNull("CacheControl null ?", mockMimeResponse.getCacheControl()); - - try { - OutputStream outputStream = mockMimeResponse.getPortletOutputStream(); - assertNotNull("OutputStream null ?", outputStream); - outputStream.write(TEST_FAKECONTENT_ASBYTES); - final byte[] writeResult = mockMimeResponse.getContentAsByteArray(); - assertArrayEquals("Written byte array does not match original ?", TEST_FAKECONTENT_ASBYTES, writeResult); - assertTrue("Buffer not committed after processing ?", mockMimeResponse.isCommitted()); - } catch (Exception ex) { - fail("MockMimeResponse get/process outputstream failed. Exception: " + ex); - } - try { - mockMimeResponse.resetBuffer(); - } catch (IllegalStateException ise) { - // Expected failure - } - - mockMimeResponse.setCommitted(false); - mockMimeResponse.resetBuffer(); - try { - PrintWriter printWriter = mockMimeResponse.getWriter(); - assertNotNull("PrintWriter null ?", printWriter); - printWriter.print(TEST_FAKECONTENT); - mockMimeResponse.flushBuffer(); - final byte[] writeResult = mockMimeResponse.getContentAsByteArray(); - assertArrayEquals("Written byte array does not match original ?", TEST_FAKECONTENT_ASBYTES, writeResult); - assertTrue("Buffer not committed after processing ?", mockMimeResponse.isCommitted()); - final String writeResultAsString = mockMimeResponse.getContentAsString(); - assertEquals("Written result does not match original ?", TEST_FAKECONTENT, writeResultAsString); - } catch (Exception ex) { - fail("MockMimeResponse get/process printwriter failed. Exception: " + ex); - } - try { - mockMimeResponse.reset(); - } catch (IllegalStateException ise) { - // Expected failure - } - - mockMimeResponse.setCommitted(false); - mockMimeResponse.reset(); - assertNull("After reset, character encoding not null ?", mockMimeResponse.getCharacterEncoding()); - assertNull("After reset, content-type not null ?", mockMimeResponse.getContentType()); - assertNull("After reset, locale not null ?", mockMimeResponse.getLocale()); - } - - public void testMockMultipartActionRequest() { - final String TEST_FILENAME = "TEST_TEMPFILE"; - final String TEST_FILENAME2 = "TEST_TEMPFILE2"; - final String TEST_CONTENT_TYPE = "text/html"; - final String TEST_FAKECONTENT = "Some fake content for the test."; - final byte[] TEST_FAKECONTENT_ASBYTES = TEST_FAKECONTENT.getBytes(StandardCharsets.UTF_8); - - // Call each constructor in sequence, do some basic checks - MockMultipartActionRequest mockMultipartActionRequest = new MockMultipartActionRequest(); - assertFalse("Initial multipartrequest has file names ?", mockMultipartActionRequest.getFileNames().hasNext()); - assertTrue("Initial multipartrequest has nonempty map ?", mockMultipartActionRequest.getFileMap().isEmpty()); - assertTrue("Initial multipartrequest has nonempty multivalue map ?", mockMultipartActionRequest.getMultiFileMap().isEmpty()); - final MultipartFile multipartFile = new TestMockMultipartFile(TEST_FILENAME, TEST_FILENAME, TEST_CONTENT_TYPE, TEST_FAKECONTENT_ASBYTES); - final MultipartFile multipartFile2 = new TestMockMultipartFile(TEST_FILENAME2, TEST_FILENAME2, TEST_CONTENT_TYPE, TEST_FAKECONTENT_ASBYTES); - mockMultipartActionRequest.addFile(multipartFile); - assertTrue("Multipartrequest does not have file names ?", mockMultipartActionRequest.getFileNames().hasNext()); - assertFalse("Multipartrequest does not have nonempty map ?", mockMultipartActionRequest.getFileMap().isEmpty()); - assertFalse("Multipartrequest does not have nonempty multivalue map ?", mockMultipartActionRequest.getMultiFileMap().isEmpty()); - mockMultipartActionRequest.addFile(multipartFile2); - assertTrue("Multipartrequest does not have file names ?", mockMultipartActionRequest.getFileNames().hasNext()); - assertFalse("Multipartrequest does not have nonempty map ?", mockMultipartActionRequest.getFileMap().isEmpty()); - assertFalse("Multipartrequest does not have nonempty multivalue map ?", mockMultipartActionRequest.getMultiFileMap().isEmpty()); - assertEquals("Retrieved file 1 not as expected ?", multipartFile, mockMultipartActionRequest.getFile(TEST_FILENAME)); - assertEquals("Retrieved file 1 content-type not as expected ?", TEST_CONTENT_TYPE, mockMultipartActionRequest.getMultipartContentType(TEST_FILENAME)); - assertEquals("Retrieved file 2 not as expected ?", multipartFile2, mockMultipartActionRequest.getFile(TEST_FILENAME2)); - assertEquals("Retrieved file 2 content-type not as expected ?", TEST_CONTENT_TYPE, mockMultipartActionRequest.getMultipartContentType(TEST_FILENAME2)); - final Map fileMap = mockMultipartActionRequest.getFileMap(); - assertNotNull("File map is null ?", fileMap); - assertTrue("File 1 name not in map ?", fileMap.containsKey(TEST_FILENAME)); - assertTrue("File 2 name not in map ?", fileMap.containsKey(TEST_FILENAME2)); - assertTrue("File 1 not in map ?", fileMap.containsValue(multipartFile)); - assertTrue("File 2 not in map ?", fileMap.containsValue(multipartFile2)); - MultiValueMap fileMultiValueMap = mockMultipartActionRequest.getMultiFileMap(); - assertNotNull("MultiValue file map is null ?", fileMultiValueMap); - MultipartFile retrievedFile = fileMultiValueMap.getFirst(TEST_FILENAME); - assertNotNull("File 1 1st value is null ?", retrievedFile); - assertEquals("File 1 not in multivalue map ?", multipartFile, retrievedFile); - retrievedFile = fileMultiValueMap.getFirst(TEST_FILENAME2); - assertNotNull("File 2 1st value is null ?", retrievedFile); - assertEquals("File 2 not in multivalue map ?", multipartFile2, retrievedFile); - } - - public void testMockPortalContext() { - final String TEST_PROPERTY = "TEST_PROPERTY"; - final String TEST_PROPERTY_VALUE = "Property_Value_1"; - final String TEST_PROPERTY2 = "TEST_PROPERTY2"; - final String TEST_PROPERTY2_VALUE = "Property_Value_2"; - - // Call each constructor in sequence, do some basic checks - final MockPortalContext mockPortalContext = new MockPortalContext(); - assertNotNull("MockPortalContext portalInfo null ?", mockPortalContext.getPortalInfo()); - assertNotNull("MockPortalContext property names null ?", mockPortalContext.getPropertyNames()); - assertFalse("MockPortalConext initial propertyNames not empty ?", mockPortalContext.getPropertyNames().hasMoreElements()); - final Enumeration supportedPortletModes = mockPortalContext.getSupportedPortletModes(); - assertNotNull("MockPortalContext supported portlet modes null ?", supportedPortletModes); - final ArrayList portletModeList = new ArrayList<>(); - while (supportedPortletModes.hasMoreElements()) { - portletModeList.add(supportedPortletModes.nextElement()); - } - assertEquals("MockPortalContext does not support three modes ?", 3, portletModeList.size()); - assertTrue("MockPortalContext does not contain PortletMode.VIEW ?", portletModeList.contains(PortletMode.VIEW)); - assertTrue("MockPortalContext does not contain PortletMode.EDIT ?", portletModeList.contains(PortletMode.EDIT)); - assertTrue("MockPortalContext does not contain PortletMode.HELP ?", portletModeList.contains(PortletMode.HELP)); - - final Enumeration supportedWindowStates = mockPortalContext.getSupportedWindowStates(); - assertNotNull("MockPortalContext supported window modes null ?", supportedWindowStates); - final ArrayList windowStateList = new ArrayList<>(); - while (supportedWindowStates.hasMoreElements()) { - windowStateList.add(supportedWindowStates.nextElement()); - } - assertEquals("MockPortalContext does not support three states ?", 3, windowStateList.size()); - assertTrue("MockPortalContext does not contain WindowState.NORMAL ?", windowStateList.contains(WindowState.NORMAL)); - assertTrue("MockPortalContext does not contain WindowState.MAXIMIZED ?", windowStateList.contains(WindowState.MAXIMIZED)); - assertTrue("MockPortalContext does not contain WindowState.MINIMIZED ?", windowStateList.contains(WindowState.MINIMIZED)); - - mockPortalContext.setProperty(TEST_PROPERTY, TEST_PROPERTY_VALUE); - mockPortalContext.setProperty(TEST_PROPERTY2, TEST_PROPERTY2_VALUE); - final Enumeration propertyNames = mockPortalContext.getPropertyNames(); - assertNotNull("MockPortalContext property names null ?", propertyNames); - final ArrayList propertyNamesList = new ArrayList<>(); - while (propertyNames.hasMoreElements()) { - propertyNamesList.add(propertyNames.nextElement()); - } - assertEquals("MockPortalContext does not contain two properties ?", 2, propertyNamesList.size()); - assertTrue("MockPortalContext does not contain property name " + TEST_PROPERTY + " ?", propertyNamesList.contains(TEST_PROPERTY)); - assertTrue("MockPortalContext does not contain property name " + TEST_PROPERTY2 + " ?", propertyNamesList.contains(TEST_PROPERTY2)); - assertEquals("MockPortalContext value of property name " + TEST_PROPERTY + " not as expected ?", TEST_PROPERTY_VALUE, mockPortalContext.getProperty(TEST_PROPERTY)); - assertEquals("MockPortalContext value of property name " + TEST_PROPERTY2 + " not as expected ?", TEST_PROPERTY2_VALUE, mockPortalContext.getProperty(TEST_PROPERTY2)); - } - - public void testMockPortletConfig() { - final String TEST_PORTLETNAME = "TestPortletName"; - final String TEST_INITPARAM = "TEST_INITPARAM"; - final String TEST_INITPARAM_VALUE = "Init_Value_1"; - final String TEST_INITPARAM2= "TEST_INITPARAM2"; - final String TEST_INITPARAM_VALUE2 = "Init_Value_2"; - final String TEST_RENDERPARAM_NAME = "Test_RenderParam_1"; - final String TEST_RENDERPARAM_NAME2 = "Test_RenderParam_2"; - final String TEST_DEFAULTNAMESPACE = "Test_Default_Namespace"; - final QName TEST_QNAME = new QName(TEST_PORTLETNAME); - final QName TEST_QNAME2 = new QName(TEST_DEFAULTNAMESPACE); - final String TEST_RUNTIME_OPTION = "TEST_RUNTIME_OPTION"; - final String TEST_RUNTIME_OPTION2 = "TEST_RUNTIME_OPTION2"; - final String TEST_RUNTIME_VALUE1 = "Test_Runtime_Option1"; - final String TEST_RUNTIME_VALUE2 = "Test_Runtime_Option2"; - - // Call each constructor in sequence, do some basic checks - MockPortletConfig mockPortletConfig = new MockPortletConfig(); - assertNotNull("MockPortletConfig default PortletContext is null ?", mockPortletConfig.getPortletContext()); - assertEquals("MockPortletConfig default name not empty string ?", "", mockPortletConfig.getPortletName()); - mockPortletConfig = new MockPortletConfig(TEST_PORTLETNAME); - assertNotNull("MockPortletConfig default PortletContext is null ?", mockPortletConfig.getPortletContext()); - assertEquals("MockPortletConfig name not constructor set value ?", TEST_PORTLETNAME, mockPortletConfig.getPortletName()); - final MockPortletContext mockPortletContext = new MockPortletContext(); - mockPortletConfig = new MockPortletConfig(mockPortletContext, TEST_PORTLETNAME); - assertEquals("MockPortletConfig PortletContext constructor set value ?", mockPortletContext, mockPortletConfig.getPortletContext()); - assertEquals("MockPortletConfig name not constructor set value ?", TEST_PORTLETNAME, mockPortletConfig.getPortletName()); - assertNull("MockPortletConfig default locale resource bundle not null ?", mockPortletConfig.getResourceBundle(Locale.getDefault())); - final ResourceBundle resourceBundle = new TetMockResourceBundle(); - mockPortletConfig.setResourceBundle(Locale.getDefault(), resourceBundle); - assertEquals("Default locale resource bundle not set value ?", resourceBundle, mockPortletConfig.getResourceBundle(Locale.getDefault())); - - assertNull(TEST_INITPARAM + " present before set ?", mockPortletConfig.getInitParameter(TEST_INITPARAM)); - assertNull(TEST_INITPARAM2 + " present before set ?", mockPortletConfig.getInitParameter(TEST_INITPARAM)); - mockPortletConfig.addInitParameter(TEST_INITPARAM, TEST_INITPARAM_VALUE); - mockPortletConfig.addInitParameter(TEST_INITPARAM2, TEST_INITPARAM_VALUE2); - assertEquals("Retrieved init parameter 1 does not match set value ?", TEST_INITPARAM_VALUE, mockPortletConfig.getInitParameter(TEST_INITPARAM)); - assertEquals("Retrieved init parameter 2 does not match set value ?", TEST_INITPARAM_VALUE2, mockPortletConfig.getInitParameter(TEST_INITPARAM2)); - final Enumeration initParameterNames = mockPortletConfig.getInitParameterNames(); - int initParameterNameCount = 0; - assertNotNull("InitParameter names null after additions ?", initParameterNames); - assertTrue("InitParameter names empty after additions ?", initParameterNames.hasMoreElements()); - while (initParameterNames.hasMoreElements()) { - initParameterNameCount++; - String currentInitParameterName = initParameterNames.nextElement(); - assertTrue("Initparam name not one of two expected matches ?", TEST_INITPARAM.equals(currentInitParameterName) || - TEST_INITPARAM2.equals(currentInitParameterName)); - } - assertEquals("InitParameter names size not 2 ?", 2, initParameterNameCount); - - assertFalse("Initial renderparam names not empty ?", mockPortletConfig.getPublicRenderParameterNames().hasMoreElements()); - mockPortletConfig.addPublicRenderParameterName(TEST_RENDERPARAM_NAME); - mockPortletConfig.addPublicRenderParameterName(TEST_RENDERPARAM_NAME2); - final Enumeration publicRenderParameterNames = mockPortletConfig.getPublicRenderParameterNames(); - int publicRenderParameterNameCount = 0; - assertNotNull("PublicRenderParameter names null after additions ?", publicRenderParameterNames); - assertTrue("PublicRenderParameter names empty after additions ?", publicRenderParameterNames.hasMoreElements()); - while (publicRenderParameterNames.hasMoreElements()) { - publicRenderParameterNameCount++; - String currentPublicRenderParameterName = publicRenderParameterNames.nextElement(); - assertTrue("PublicRenderParameter name not one of two expected matches ?", TEST_RENDERPARAM_NAME.equals(currentPublicRenderParameterName) || - TEST_RENDERPARAM_NAME2.equals(currentPublicRenderParameterName)); - } - assertEquals("PublicRenderParameter names size not 2 ?", 2, publicRenderParameterNameCount); - mockPortletConfig.setDefaultNamespace(TEST_DEFAULTNAMESPACE); - assertEquals("Default namespace not set value ?", TEST_DEFAULTNAMESPACE, mockPortletConfig.getDefaultNamespace()); - - assertFalse("Initial publishing event QNames not empty ?", mockPortletConfig.getPublishingEventQNames().hasMoreElements()); - assertFalse("Initial processing event QNames not empty ?", mockPortletConfig.getProcessingEventQNames().hasMoreElements()); - mockPortletConfig.addPublishingEventQName(TEST_QNAME); - mockPortletConfig.addProcessingEventQName(TEST_QNAME2); - final Enumeration publishingEventQNames = mockPortletConfig.getPublishingEventQNames(); - assertNotNull("PublishingEventQNames names null after additions ?", publishingEventQNames); - assertTrue("PublishingEventQNames names empty after additions ?", publishingEventQNames.hasMoreElements()); - final QName firstPublishingEventQName = publishingEventQNames.nextElement(); - assertEquals("First publishing event QName not set value ?", TEST_QNAME, firstPublishingEventQName); - final Enumeration processingEventQNames = mockPortletConfig.getProcessingEventQNames(); - assertNotNull("ProcessingEventQNames names null after additions ?", processingEventQNames); - assertTrue("ProcessingEventQNames names empty after additions ?", processingEventQNames.hasMoreElements()); - final QName firstProcessingEventQName = processingEventQNames.nextElement(); - assertEquals("First processing event QName not set value ?", TEST_QNAME2, firstProcessingEventQName); - - assertFalse("Initial supported locales not empty ?", mockPortletConfig.getSupportedLocales().hasMoreElements()); - mockPortletConfig.addSupportedLocale(Locale.getDefault()); - final Enumeration supportedLocales = mockPortletConfig.getSupportedLocales(); - assertNotNull("Supported locales null after additions ?", supportedLocales); - assertTrue("Supported locales names empty after additions ?", supportedLocales.hasMoreElements()); - final Locale firstSupportedLocale = supportedLocales.nextElement(); - assertEquals("First supported locale not set value ?", Locale.getDefault(), firstSupportedLocale); - - assertTrue("Portlet runtime options not empty before set ?", mockPortletConfig.getContainerRuntimeOptions().isEmpty()); - mockPortletConfig.addContainerRuntimeOption(TEST_RUNTIME_OPTION, TEST_RUNTIME_VALUE1); - mockPortletConfig.addContainerRuntimeOption(TEST_RUNTIME_OPTION2, TEST_RUNTIME_VALUE2); - final Map containerRuntimeOptions = mockPortletConfig.getContainerRuntimeOptions(); - assertNotNull("Runtime options null after additions ?", containerRuntimeOptions); - assertFalse("Runtime options empty after additions ?", containerRuntimeOptions.isEmpty()); - assertTrue("Runtime option 1 not present after setting ?", containerRuntimeOptions.containsKey(TEST_RUNTIME_OPTION)); - assertTrue("Runtime option 2 not present after setting ?", containerRuntimeOptions.containsKey(TEST_RUNTIME_OPTION2)); - assertEquals("Runtime option 1 not equal to set value ?", TEST_RUNTIME_VALUE1, containerRuntimeOptions.get(TEST_RUNTIME_OPTION)[0]); - assertEquals("Runtime option 2 not equal to set value ?", TEST_RUNTIME_VALUE2, containerRuntimeOptions.get(TEST_RUNTIME_OPTION2)[0]); - } - - public void testMockPortletContext() { - final String TEST_ATTRIBUTE = "TEST_ATTRIBUTE"; - final String TEST_ATTRIBUTE_VALUE = "Attribute_Value_1"; - final String TEST_ATTRIBUTE2 = "TEST_ATTRIBUTE2"; - final String TEST_ATTRIBUTE_VALUE2 = "Attribute_Value_2"; - final String TEST_INITPARAM = "TEST_INITPARAM"; - final String TEST_INITPARAM_VALUE = "Init_Value_1"; - final String TEST_INITPARAM2 = "TEST_INITPARAM2"; - final String TEST_INITPARAM_VALUE2 = "Init_Value_2"; - final String TEST_CONTEXT_NAME = "TEST_CONTEXT_NAME"; - final String TEST_RUNTIME_OPTION = "TEST_RUNTIME_OPTION"; - final String TEST_RUNTIME_OPTION2 = "TEST_RUNTIME_OPTION2"; - - // Call each constructor in sequence, do some basic checks - final MockPortletContext mockPortletContext = new MockPortletContext(); - assertNotNull("MockPortletContext serverInfo null ?", mockPortletContext.getServerInfo()); - try { - assertNotNull("MockPortletContext PortletRequestDispatcher null ?", mockPortletContext.getRequestDispatcher("IllegalPrefix")); - fail("PortletRequestDispatcher path must start with /"); - } catch (IllegalArgumentException iae) { - // Expected exception - } - assertNotNull("MockPortletContext PortletRequestDispatcher for / null ?", mockPortletContext.getRequestDispatcher("/")); - assertNull("MockPortletContext named PortletRequestDispatcher not null ?", mockPortletContext.getNamedDispatcher("SomeName")); - assertNotNull("MockPortletContext resource stream for / null ?", mockPortletContext.getResourceAsStream("/")); - assertNull("MockPortletContext resource stream for /ThisDoesNotExist not null ?", mockPortletContext.getResourceAsStream("/ThisDoesNotExist")); - assertTrue("MockPortletContext major version not >= 2 ?", mockPortletContext.getMajorVersion() >= 2); - assertTrue("MockPortletContext minor version not >= 0 ?", mockPortletContext.getMajorVersion() >= 0); - assertNull("MockPortletContext MIME type for / not null ?", mockPortletContext.getMimeType("/")); - assertNotNull("MockPortletContext real path for / null ?", mockPortletContext.getRealPath("/")); - assertNull("MockPortletContext real path for /ThisDoesNotExist not null ?", mockPortletContext.getRealPath("/ThisDoesNotExist")); - assertNotNull("MockPortletContext resource paths for / null ?", mockPortletContext.getResourcePaths("/")); - assertNull("MockPortletContext resource paths for / null ?", mockPortletContext.getResourcePaths("/ThisDoesNotExist")); - try { - assertNotNull("MockPortletContext resource URL for / null ?", mockPortletContext.getResource("/")); - } catch (MalformedURLException mue) { - fail("MockPortletContext resource URL for / failed. Exception: " + mue); - } - try { - assertNull("MockPortletContext resource URL for /ThisDoesNotExist not null ?", mockPortletContext.getResource("/ThisDoesNotExist")); - } catch (MalformedURLException mue) { - fail("MockPortletContext resource URL for /ThisDoesNotExist failed. Exception: " + mue); - } - - assertNull(TEST_ATTRIBUTE + " present before set ?", mockPortletContext.getAttribute(TEST_ATTRIBUTE)); - assertNull(TEST_ATTRIBUTE2 + " present before set ?", mockPortletContext.getAttribute(TEST_ATTRIBUTE2)); - mockPortletContext.setAttribute(TEST_ATTRIBUTE, TEST_ATTRIBUTE_VALUE); - mockPortletContext.setAttribute(TEST_ATTRIBUTE2, TEST_ATTRIBUTE_VALUE2); - assertEquals("Retrieved atribute 1 does not match set value ?", TEST_ATTRIBUTE_VALUE, mockPortletContext.getAttribute(TEST_ATTRIBUTE)); - assertEquals("Retrieved atribute 2 does not match set value ?", TEST_ATTRIBUTE_VALUE2, mockPortletContext.getAttribute(TEST_ATTRIBUTE2)); - final Enumeration attributeNames = mockPortletContext.getAttributeNames(); - int attributeNameCount = 0; - assertNotNull("Attribute names null after additions ?", attributeNames); - assertTrue("Attribute names empty after additions ?", attributeNames.hasMoreElements()); - while (attributeNames.hasMoreElements()) { - attributeNameCount++; - String currentAttibuteName = attributeNames.nextElement(); - assertTrue("Attribute name not one of two or three expected matches ?", TEST_ATTRIBUTE.equals(currentAttibuteName) || - TEST_ATTRIBUTE2.equals(currentAttibuteName) || - WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE.equals(currentAttibuteName)); - } - assertTrue("Atribute names size not 2 or 3 ?", attributeNameCount >= 2 && attributeNameCount <= 3); - - assertNull(TEST_INITPARAM + " present before set ?", mockPortletContext.getInitParameter(TEST_INITPARAM)); - assertNull(TEST_INITPARAM2 + " present before set ?", mockPortletContext.getInitParameter(TEST_INITPARAM)); - mockPortletContext.addInitParameter(TEST_INITPARAM, TEST_INITPARAM_VALUE); - mockPortletContext.addInitParameter(TEST_INITPARAM2, TEST_INITPARAM_VALUE2); - assertEquals("Retrieved init parameter 1 does not match set value ?", TEST_INITPARAM_VALUE, mockPortletContext.getInitParameter(TEST_INITPARAM)); - assertEquals("Retrieved init parameter 2 does not match set value ?", TEST_INITPARAM_VALUE2, mockPortletContext.getInitParameter(TEST_INITPARAM2)); - final Enumeration initParameterNames = mockPortletContext.getInitParameterNames(); - int initParameterNameCount = 0; - assertNotNull("InitParameter names null after additions ?", initParameterNames); - assertTrue("InitParameter names empty after additions ?", initParameterNames.hasMoreElements()); - while (initParameterNames.hasMoreElements()) { - initParameterNameCount++; - String currentInitParameterName = initParameterNames.nextElement(); - assertTrue("Initparam name not one of two expected matches ?", TEST_INITPARAM.equals(currentInitParameterName) || - TEST_INITPARAM2.equals(currentInitParameterName)); - } - assertEquals("InitParameter names size not 2 ?", 2, initParameterNameCount); - - mockPortletContext.log("Test logging call"); - mockPortletContext.log("Test logging call", new Exception("Fake Exception")); - - assertEquals("Default portlet context name not as expected ?", "MockPortletContext", mockPortletContext.getPortletContextName()); - mockPortletContext.setPortletContextName(TEST_CONTEXT_NAME); - assertEquals("Portlet context name not equal to set value ?", TEST_CONTEXT_NAME, mockPortletContext.getPortletContextName()); - - assertFalse("Portlet runtime options not empty before set ?", mockPortletContext.getContainerRuntimeOptions().hasMoreElements()); - mockPortletContext.addContainerRuntimeOption(TEST_RUNTIME_OPTION); - mockPortletContext.addContainerRuntimeOption(TEST_RUNTIME_OPTION2); - final Enumeration containerRuntimeOptions = mockPortletContext.getContainerRuntimeOptions(); - int containerRuntimeOptionsCount = 0; - assertNotNull("Runtime options null after additions ?", containerRuntimeOptions); - assertTrue("Runtime options empty after additions ?", containerRuntimeOptions.hasMoreElements()); - while (containerRuntimeOptions.hasMoreElements()) { - containerRuntimeOptionsCount++; - String currentRuntimeOption = containerRuntimeOptions.nextElement(); - assertTrue("Runtime option not one of two expected matches ?", TEST_RUNTIME_OPTION.equals(currentRuntimeOption) || - TEST_RUNTIME_OPTION2.equals(currentRuntimeOption)); - } - assertEquals("Runtime options size not 2 ?", 2, containerRuntimeOptionsCount); - } - - public void testMockPortletPreferences() { - final String PORTLET_READONLY = "PORTLET_READONLY"; - final String PORTLET_READONLY_VALUE = "Readonly_Value_1"; - final String PORTLET_READONLY2 = "PORTLET_READONLY2"; - final String PORTLET_READONLY2_VALUE = "Readonly_Value_2"; - final String PORTLET_WRITEABLE = "PORTLET_WRITEABLE"; - final String PORTLET_WRITEABLE_VALUE = "Writeable_Value_1"; - final String PORTLET_WRITEABLE2 = "PORTLET_WRITEABLE2"; - final String PORTLET_WRITEABLE2_VALUE = "Writeable_Value_2"; - final String PORTLET_WRITEABLE_ARRAY = "PORTLET_WRITEABLE_ARRAY"; - final String[] PORTLET_WRITEABLE_ARRAY_VALUE = { "Writeable_Array_Value_1", "Writeable_Array_Value" }; - - // Call each constructor in sequence, do some basic checks - final MockPortletPreferences mockPortletPreferences = new MockPortletPreferences(); - assertFalse("MockPortletPreferences initial preferences names non-empty ?", mockPortletPreferences.getNames().hasMoreElements()); - assertTrue("MockPortletPreferences initial preferences non-empty ?", mockPortletPreferences.getMap().isEmpty()); - - // Test set readonly permitted before key exists - assertFalse(PORTLET_READONLY + " readonly before set ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY)); - assertFalse(PORTLET_READONLY2 + " readonly before set ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY2)); - mockPortletPreferences.setReadOnly(PORTLET_READONLY, true); - mockPortletPreferences.setReadOnly(PORTLET_READONLY2, true); - assertTrue(PORTLET_READONLY + " not readonly after set ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY)); - assertTrue(PORTLET_READONLY2 + " not readonly after set ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY2)); - mockPortletPreferences.setReadOnly(PORTLET_READONLY, false); - mockPortletPreferences.setReadOnly(PORTLET_READONLY2, false); - assertFalse(PORTLET_READONLY + " readonly after clear ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY)); - assertFalse(PORTLET_READONLY2 + " readonly after clear ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY2)); - - try { - // Test initial set and replace - mockPortletPreferences.setValue(PORTLET_READONLY, PORTLET_READONLY_VALUE); - assertEquals("Set value mismatch ?", PORTLET_READONLY_VALUE, mockPortletPreferences.getValue(PORTLET_READONLY, null)); - mockPortletPreferences.setValue(PORTLET_READONLY, PORTLET_READONLY_VALUE); - assertEquals("Set value mismatch ?", PORTLET_READONLY_VALUE, mockPortletPreferences.getValue(PORTLET_READONLY, null)); - } catch (Exception ex) { - fail("Setvalue failed unexpectedly: " + ex); - } - try { - // Test initial set and replace - mockPortletPreferences.setValue(PORTLET_READONLY2, PORTLET_READONLY2_VALUE); - assertEquals("Set value mismatch ?", PORTLET_READONLY2_VALUE, mockPortletPreferences.getValue(PORTLET_READONLY2, null)); - mockPortletPreferences.setValue(PORTLET_READONLY2, PORTLET_READONLY2_VALUE); - assertEquals("Set value mismatch ?", PORTLET_READONLY2_VALUE, mockPortletPreferences.getValue(PORTLET_READONLY2, null)); - } catch (Exception ex) { - fail("Setvalue failed unexpectedly: " + ex); - } - - mockPortletPreferences.setReadOnly(PORTLET_READONLY, true); - mockPortletPreferences.setReadOnly(PORTLET_READONLY2, true); - try { - // Test set of readonly value fails - mockPortletPreferences.setValue(PORTLET_READONLY, PORTLET_READONLY_VALUE); - fail("Setvalue worked unexpectedly for readonly value"); - } catch (Exception ex) { - assertTrue("Unexpected exception type failure ? Ex: " + ex, ex instanceof ReadOnlyException); - assertTrue(PORTLET_READONLY + " is not readonly ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY)); - } - try { - // Test reset of readonly value fails - mockPortletPreferences.reset(PORTLET_READONLY); - fail("Reset worked unexpectedly for readonly value"); - } catch (Exception ex) { - assertTrue("Unexpected exception type failure ? Ex: " + ex, ex instanceof ReadOnlyException); - assertTrue(PORTLET_READONLY + " is not readonly ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY)); - } - try { - // Test set of readonly value fails - mockPortletPreferences.setValue(PORTLET_READONLY2, PORTLET_READONLY2_VALUE); - fail("Setvalue worked unexpectedly for readonly value"); - } catch (Exception ex) { - assertTrue("Unexpected exception type failure ? Ex: " + ex, ex instanceof ReadOnlyException); - assertTrue(PORTLET_READONLY2 + " is not readonly ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY2)); - } - try { - // Test reset of readonly value fails - mockPortletPreferences.reset(PORTLET_READONLY2); - fail("Reset worked unexpectedly for readonly value"); - } catch (Exception ex) { - assertTrue("Unexpected exception type failure ? Ex: " + ex, ex instanceof ReadOnlyException); - assertTrue(PORTLET_READONLY2 + " is not readonly ?", mockPortletPreferences.isReadOnly(PORTLET_READONLY2)); - } - - try { - // Test initial set, get and reset - mockPortletPreferences.setValue(PORTLET_WRITEABLE, PORTLET_WRITEABLE_VALUE); - mockPortletPreferences.setValue(PORTLET_WRITEABLE2, PORTLET_WRITEABLE2_VALUE); - assertEquals("Set value mismatch ?", PORTLET_WRITEABLE_VALUE, mockPortletPreferences.getValue(PORTLET_WRITEABLE, null)); - assertEquals("Set value mismatch ?", PORTLET_WRITEABLE2_VALUE, mockPortletPreferences.getValue(PORTLET_WRITEABLE2, null)); - assertFalse(PORTLET_WRITEABLE + " is readonly ?", mockPortletPreferences.isReadOnly(PORTLET_WRITEABLE)); - assertFalse(PORTLET_WRITEABLE2 + " is readonly ?", mockPortletPreferences.isReadOnly(PORTLET_WRITEABLE2)); - mockPortletPreferences.reset(PORTLET_WRITEABLE); - mockPortletPreferences.reset(PORTLET_WRITEABLE2); - assertNull("After reset getValue with null not null ?", mockPortletPreferences.getValue(PORTLET_WRITEABLE, null)); - assertNull("After reset getValue with null not null ?", mockPortletPreferences.getValue(PORTLET_WRITEABLE2, null)); - } catch (Exception ex) { - fail("Set/Get/Reset failed unexpectedly: " + ex); - } - - try { - // Test initial array set, get, names and map - mockPortletPreferences.setValues(PORTLET_WRITEABLE_ARRAY, PORTLET_WRITEABLE_ARRAY_VALUE); - - assertEquals("Set values mismatch ?", PORTLET_WRITEABLE_ARRAY_VALUE, mockPortletPreferences.getValues(PORTLET_WRITEABLE_ARRAY, null)); - assertFalse(PORTLET_WRITEABLE_ARRAY + " is readonly ?", mockPortletPreferences.isReadOnly(PORTLET_WRITEABLE_ARRAY)); - - // There should be two readonly attributes plus the array attribute present at this point - final Enumeration preferencesNames = mockPortletPreferences.getNames(); - assertNotNull("Preferences names null after additions ?", preferencesNames); - assertTrue("Preferences names empty after additions ?", preferencesNames.hasMoreElements()); - int preferencesNameCount = 0; - while (preferencesNames.hasMoreElements()) { - preferencesNameCount++; - String currentPreferencesName = preferencesNames.nextElement(); - assertTrue("Preferences name not one of three expected matches ?", PORTLET_WRITEABLE_ARRAY.equals(currentPreferencesName) || - PORTLET_READONLY.equals(currentPreferencesName) || - PORTLET_READONLY2.equals(currentPreferencesName)); - } - assertEquals("Preferences names size not 3 ?", 3, preferencesNameCount); - - final Map preferencesMap = mockPortletPreferences.getMap(); - assertNotNull("Preferences map null ?", preferencesMap); - assertEquals("Preferences map size not 3 ?", 3, preferencesMap.size()); - assertTrue("Map does not contain expected key ?", preferencesMap.containsKey(PORTLET_WRITEABLE_ARRAY)); - assertTrue("Map does not contain expected key ?", preferencesMap.containsKey(PORTLET_READONLY)); - assertTrue("Map does not contain expected key ?", preferencesMap.containsKey(PORTLET_READONLY2)); - assertTrue("Map does not contain expected value ?", preferencesMap.containsValue(PORTLET_WRITEABLE_ARRAY_VALUE)); - assertTrue("Map does not contain expected value ?", preferencesMap.containsValue(mockPortletPreferences.getValues(PORTLET_READONLY, null))); - assertTrue("Map does not contain expected value ?", preferencesMap.containsValue(mockPortletPreferences.getValues(PORTLET_READONLY2, null))); - } catch (Exception ex) { - fail("Set/Get/Names/Map failed unexpectedly: " + ex); - } - - // Verify store behaviour without validator present - try { - mockPortletPreferences.store(); - } catch (Exception ex) { - fail("Store without validator failed ? Exception: " + ex); - } - // Verify store behaviour with validator present - try { - mockPortletPreferences.setPreferencesValidator(new BasicPreferencesValidator()); - mockPortletPreferences.store(); - fail("Basic validator did not prevent store as expected ?"); - } catch (Exception ex) { - assertTrue("Basic validator did not produce UnsupportedOperationException ?", ex instanceof UnsupportedOperationException); - } - // Verify store behaviour after validator cleared - try { - mockPortletPreferences.setPreferencesValidator(null); - mockPortletPreferences.store(); - } catch (Exception ex) { - fail("Store after clearing validator failed ? Exception: " + ex); - } - } - - public void testMockPortletRequest() { - final String TEST_DEFAULT_CONTENT_TYPE = "text/html"; - final String TEST_CONTENT_TYPE = "text/plain"; - final String TEST_CONTENT_TYPE2 = "text/csv"; - final String TEST_PROPERTY = "TEST_PROPERTY"; - final String TEST_PROPERTY_VALUE = "Property_Value_1"; - final String TEST_PROPERTY2 = "TEST_PROPERTY2"; - final String TEST_PROPERTY2_VALUE = "Property_Value_2"; - final String TEST_AUTHTYPE = "Test_Auth_Type"; - final String TEST_FAKECONTEXTPATH = "/fakeContextPath"; - final String TEST_FAKEREMOTEUSER = "fakeRemoteUser"; - final String TEST_FAKEUSERROLE = "fakeUserRole"; - final String TEST_ATTRIBUTE = "TEST_ATTRIBUTE"; - final String TEST_ATTRIBUTE_VALUE = "Attribute_Value_1"; - final String TEST_ATTRIBUTE2 = "TEST_ATTRIBUTE2"; - final String TEST_ATTRIBUTE_VALUE2 = "Attribute_Value_2"; - final String TEST_PARAM = "TEST_PARAM"; - final String TEST_PARAM_VALUE = "Param_Value_1"; - final String TEST_PARAM2 = "TEST_PARAM2"; - final String TEST_PARAM_VALUE2 = "PARAM_Value_2"; - final String TEST_ARRAYPARAM = "TEST_ARRAYPARAM"; - final String[] TEST_PARAM_ARRAYVALUE = { "ARRAYVALUE1", "ARRAYVALUE2" }; - final String TEST_SCHEME = "file"; - final String TEST_HOST = "localhost2"; - final int TEST_PORT = 8080; - final String TEST_WINDOWID = "TEST_WINDOWID"; - final String TEST_COOKIE_ID = "TEST_COOKIE_ID"; - final String TEST_COOKIE_ID2 = "TEST_COOKIE_ID2"; - final String TEST_COOKIE_VALUE = "Cookie_Value"; - final String TEST_COOKIE_VALUE2 = "Cookie_Value2"; - final Cookie PORLET_TEST_COOKIE = new Cookie(TEST_COOKIE_ID, TEST_COOKIE_VALUE); - final Cookie PORLET_TEST_COOKIE2 = new Cookie(TEST_COOKIE_ID2, TEST_COOKIE_VALUE2); - - // Call each constructor in sequence, do some basic checks - MockPortletRequest mockPortletRequest = new MockPortletRequest(); - assertTrue("Default active state not true ?", mockPortletRequest.isActive()); - assertEquals("Default portlet mode not as expected ?", PortletMode.VIEW, mockPortletRequest.getPortletMode()); - assertEquals("Default window state not as expected ?", WindowState.NORMAL, mockPortletRequest.getWindowState()); - assertNotNull("Default preferences is null ?", mockPortletRequest.getPreferences()); - assertNotNull("Default portlet session is null ?", mockPortletRequest.getPortletSession()); - assertNotNull("Default portal context is null ?", mockPortletRequest.getPortalContext()); - assertEquals("Default context path not empty string ?", "", mockPortletRequest.getContextPath()); - assertNull("Default remote user not null ?", mockPortletRequest.getRemoteUser()); - assertNull("Default user principal not null ?", mockPortletRequest.getUserPrincipal()); - assertFalse("Default secure state not false ?", mockPortletRequest.isSecure()); - assertTrue("Default request sessionid not valid ?", mockPortletRequest.isRequestedSessionIdValid()); - assertEquals("Default locale not as expected ?", Locale.ENGLISH, mockPortletRequest.getLocale()); - assertEquals("Default response content-type not as expected ?", TEST_DEFAULT_CONTENT_TYPE, mockPortletRequest.getResponseContentType()); - assertNull("Default lifecycle phase attribute not null ?", mockPortletRequest.getAttribute(PortletRequest.LIFECYCLE_PHASE)); - assertEquals("Default scheme not as expected ?", "http", mockPortletRequest.getScheme()); - assertEquals("Default server name not as expected ?", "localhost", mockPortletRequest.getServerName()); - assertEquals("Default server port not as expected ?", 80, mockPortletRequest.getServerPort()); - final MockPortalContext mockPortalContext = new MockPortalContext(); - final MockPortletContext mockPortletContext = new MockPortletContext(); - new MockPortletRequest(mockPortletContext); // Only test is to confirm constructor completes without exception - mockPortletRequest = new MockPortletRequest(mockPortalContext, mockPortletContext); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockPortletRequest.getPortalContext()); - mockPortletRequest.addResponseContentType(TEST_CONTENT_TYPE); - mockPortletRequest.addResponseContentType(TEST_CONTENT_TYPE2); - Enumeration contentTypes = mockPortletRequest.getResponseContentTypes(); - assertNotNull("MockPortletRequest content-types null ?", contentTypes); - final ArrayList contentTypesList = new ArrayList<>(); - while (contentTypes.hasMoreElements()) { - contentTypesList.add(contentTypes.nextElement()); - } - assertEquals("MockPortletRequest does not contain three content-types ?", 3, contentTypesList.size()); - assertTrue("MockPortletRequest does not contain content-type " + TEST_CONTENT_TYPE + " ?", contentTypesList.contains(TEST_CONTENT_TYPE)); - assertTrue("MockPortletRequest does not contain content-type " + TEST_CONTENT_TYPE2 + " ?", contentTypesList.contains(TEST_CONTENT_TYPE2)); - assertTrue("MockPortletRequest does not contain default content-type + " + TEST_DEFAULT_CONTENT_TYPE + " ?", contentTypesList.contains(TEST_DEFAULT_CONTENT_TYPE)); - assertTrue("View portlet mode not allowed ?", mockPortletRequest.isPortletModeAllowed(PortletMode.VIEW)); - assertTrue("Edit portlet mode not allowed ?", mockPortletRequest.isPortletModeAllowed(PortletMode.EDIT)); - assertTrue("Help portlet mode not allowed ?", mockPortletRequest.isPortletModeAllowed(PortletMode.HELP)); - assertTrue("Normal window state not allowed ?", mockPortletRequest.isWindowStateAllowed(WindowState.NORMAL)); - assertTrue("Maximized window state not allowed ?", mockPortletRequest.isWindowStateAllowed(WindowState.MAXIMIZED)); - assertTrue("Minimized window state not allowed ?", mockPortletRequest.isWindowStateAllowed(WindowState.MINIMIZED)); - mockPortletRequest.setPortletMode(PortletMode.EDIT); - assertEquals("Portlet mode does not match set value ?", PortletMode.EDIT, mockPortletRequest.getPortletMode()); - mockPortletRequest.setWindowState(WindowState.MAXIMIZED); - assertEquals("Window state does not match set value ?", WindowState.MAXIMIZED, mockPortletRequest.getWindowState()); - final MockPortletPreferences mockPortletPreferences = new MockPortletPreferences(); - mockPortletRequest.setPreferences(mockPortletPreferences); - assertEquals("Portlet preferences does not match set value ?", mockPortletPreferences, mockPortletRequest.getPreferences()); - final MockPortletSession mockPortletSession = new MockPortletSession(mockPortletContext); - mockPortletRequest.setSession(mockPortletSession); - assertEquals("Portlet session does not match set value ?", mockPortletSession, mockPortletRequest.getPortletSession()); - assertTrue("Set request sessionid not valid ?", mockPortletRequest.isRequestedSessionIdValid()); - mockPortletRequest.setRequestedSessionIdValid(false); - assertFalse("Set request sessionid still valid after set invalid ?", mockPortletRequest.isRequestedSessionIdValid()); - mockPortletRequest.setRequestedSessionIdValid(true); - assertTrue("Set request sessionid not valid after set valid ?", mockPortletRequest.isRequestedSessionIdValid()); - - mockPortletRequest.setProperty(TEST_PROPERTY, TEST_PROPERTY_VALUE); - mockPortletRequest.setProperty(TEST_PROPERTY2, TEST_PROPERTY2_VALUE); - final Enumeration propertyNames = mockPortletRequest.getPropertyNames(); - assertNotNull("MockPortalContext property names null ?", propertyNames); - final ArrayList propertyNamesList = new ArrayList<>(); - while (propertyNames.hasMoreElements()) { - propertyNamesList.add(propertyNames.nextElement()); - } - assertEquals("MockPortletRequest does not contain two properties ?", 2, propertyNamesList.size()); - assertTrue("MockPortletRequest does not contain property name " + TEST_PROPERTY + " ?", propertyNamesList.contains(TEST_PROPERTY)); - assertTrue("MockPortletRequest does not contain property name " + TEST_PROPERTY2 + " ?", propertyNamesList.contains(TEST_PROPERTY2)); - assertEquals("MockPortletRequest value of property name " + TEST_PROPERTY + " not as expected ?", TEST_PROPERTY_VALUE, mockPortletRequest.getProperty(TEST_PROPERTY)); - assertEquals("MockPortletRequest value of property name " + TEST_PROPERTY2 + " not as expected ?", TEST_PROPERTY2_VALUE, mockPortletRequest.getProperty(TEST_PROPERTY2)); - mockPortletRequest.addProperty(TEST_PROPERTY, TEST_PROPERTY2_VALUE); - final Enumeration propertiesForName = mockPortletRequest.getProperties(TEST_PROPERTY); - assertNotNull("MockPortletRequest properties for " + TEST_PROPERTY + " is null ?", propertiesForName); - final ArrayList propertiesForNameList = new ArrayList<>(); - while (propertiesForName.hasMoreElements()) { - propertiesForNameList.add(propertiesForName.nextElement()); - } - assertEquals("MockPortletRequest does not contain two values for " + TEST_PROPERTY + " ?", 2, propertiesForNameList.size()); - assertTrue("MockPortletRequest does not contain expected value for property name " + TEST_PROPERTY + " ?", propertiesForNameList.contains(TEST_PROPERTY_VALUE)); - assertTrue("MockPortletRequest does not contain expected value for propety name " + TEST_PROPERTY + " ?", propertiesForNameList.contains(TEST_PROPERTY2_VALUE)); - - mockPortletRequest.setAuthType(TEST_AUTHTYPE); - assertEquals("Authtype not equal to set value ?", TEST_AUTHTYPE, mockPortletRequest.getAuthType()); - mockPortletRequest.setContextPath(TEST_FAKECONTEXTPATH); - assertEquals("Context path not equal to set value ?", TEST_FAKECONTEXTPATH, mockPortletRequest.getContextPath()); - mockPortletRequest.setRemoteUser(TEST_FAKEREMOTEUSER); - assertEquals("Remote user not equal to set value ?", TEST_FAKEREMOTEUSER, mockPortletRequest.getRemoteUser()); - final TestMockPrincipal testMockPrincipal = new TestMockPrincipal(); - mockPortletRequest.setUserPrincipal(testMockPrincipal); - assertEquals("User principal not equal to set value ?", testMockPrincipal, mockPortletRequest.getUserPrincipal()); - mockPortletRequest.addUserRole(TEST_FAKEUSERROLE); - assertTrue("Usser not in added role ?", mockPortletRequest.isUserInRole(TEST_FAKEUSERROLE)); - - assertNull(TEST_PARAM + " present before set ?", mockPortletRequest.getParameter(TEST_PARAM)); - assertNull(TEST_PARAM2 + " present before set ?", mockPortletRequest.getParameter(TEST_PARAM)); - mockPortletRequest.addParameter(TEST_PARAM, TEST_PARAM_VALUE); - mockPortletRequest.addParameter(TEST_PARAM2, TEST_PARAM_VALUE2); - assertEquals("Retrieved parameter 1 does not match set value ?", TEST_PARAM_VALUE, mockPortletRequest.getParameter(TEST_PARAM)); - assertEquals("Retrieved parameter 2 does not match set value ?", TEST_PARAM_VALUE2, mockPortletRequest.getParameter(TEST_PARAM2)); - final Enumeration parameterNames = mockPortletRequest.getParameterNames(); - int parameterNameCount = 0; - assertNotNull("Parameter names null after additions ?", parameterNames); - assertTrue("Parameter names empty after additions ?", parameterNames.hasMoreElements()); - while (parameterNames.hasMoreElements()) { - parameterNameCount++; - String currentParameterName = parameterNames.nextElement(); - assertTrue("Param name not one of two expected matches ?", TEST_PARAM.equals(currentParameterName) || - TEST_PARAM2.equals(currentParameterName)); - } - assertEquals("Parameter names size not 2 ?", 2, parameterNameCount); - mockPortletRequest.addParameter(TEST_ARRAYPARAM, TEST_PARAM_ARRAYVALUE); - assertArrayEquals("Array parameter value not set as expected ?", TEST_PARAM_ARRAYVALUE, mockPortletRequest.getParameterValues(TEST_ARRAYPARAM)); - final Map parameterMap = mockPortletRequest.getParameterMap(); - assertNotNull("Parameter map is null ?", parameterMap); - assertTrue("Expected parameter not present ?", parameterMap.containsKey(TEST_PARAM)); - assertTrue("Expected parameter not present ?", parameterMap.containsKey(TEST_PARAM2)); - assertTrue("Expected parameter not present ?", parameterMap.containsKey(TEST_ARRAYPARAM)); - - assertNull(TEST_ATTRIBUTE + " present before set ?", mockPortletRequest.getAttribute(TEST_ATTRIBUTE)); - assertNull(TEST_ATTRIBUTE2 + " present before set ?", mockPortletRequest.getAttribute(TEST_ATTRIBUTE2)); - mockPortletRequest.setAttribute(TEST_ATTRIBUTE, TEST_ATTRIBUTE_VALUE); - mockPortletRequest.setAttribute(TEST_ATTRIBUTE2, TEST_ATTRIBUTE_VALUE2); - assertEquals("Retrieved atribute 1 does not match set value ?", TEST_ATTRIBUTE_VALUE, mockPortletRequest.getAttribute(TEST_ATTRIBUTE)); - assertEquals("Retrieved atribute 2 does not match set value ?", TEST_ATTRIBUTE_VALUE2, mockPortletRequest.getAttribute(TEST_ATTRIBUTE2)); - final Enumeration attributeNames = mockPortletRequest.getAttributeNames(); - int attributeNameCount = 0; - assertNotNull("Attribute names null after additions ?", attributeNames); - assertTrue("Attribute names empty after additions ?", attributeNames.hasMoreElements()); - while (attributeNames.hasMoreElements()) { - attributeNameCount++; - String currentAttibuteName = attributeNames.nextElement(); - assertTrue("Attribute name not one of two or three expected matches ?", TEST_ATTRIBUTE.equals(currentAttibuteName) || - TEST_ATTRIBUTE2.equals(currentAttibuteName) || - PortletRequest.LIFECYCLE_PHASE.equals(currentAttibuteName)); - } - assertTrue("Atribute names size not 2 or 3 ?", attributeNameCount >= 2 && attributeNameCount <= 3); - - mockPortletRequest.addPreferredLocale(Locale.FRENCH); - assertEquals("Preferred locale not as expected ?", Locale.FRENCH, mockPortletRequest.getLocale()); - final Enumeration locales = mockPortletRequest.getLocales(); - assertNotNull("Locales null after additions ?", locales); - assertTrue("Locales names empty after additions ?", locales.hasMoreElements()); - final Locale firstLocale = locales.nextElement(); - assertEquals("First locale not set value ?", Locale.FRENCH, firstLocale); - final Locale secondLocale = locales.nextElement(); - assertEquals("Second locale not default value ?", Locale.ENGLISH, secondLocale); - mockPortletRequest.setScheme(TEST_SCHEME); - assertEquals("Scheme not equal to set value ?", TEST_SCHEME, mockPortletRequest.getScheme()); - mockPortletRequest.setServerName(TEST_HOST); - assertEquals("Server name not equal to set value ?", TEST_HOST, mockPortletRequest.getServerName()); - mockPortletRequest.setServerPort(TEST_PORT); - assertEquals("Server port not equal to set value ?", TEST_PORT, mockPortletRequest.getServerPort()); - mockPortletRequest.setWindowID(TEST_WINDOWID); - assertEquals("Window id not equal to set value ?", TEST_WINDOWID, mockPortletRequest.getWindowID()); - - mockPortletRequest.setCookies(PORLET_TEST_COOKIE, PORLET_TEST_COOKIE2); - final Cookie[] cookies = mockPortletRequest.getCookies(); - assertNotNull("Cookies array null ?", cookies); - assertEquals("Cookies array length not 2 ?", 2, cookies.length); - for (Cookie cookie : cookies) { - assertTrue("Cookie not one of set cookies ?", PORLET_TEST_COOKIE.equals(cookie) || PORLET_TEST_COOKIE2.equals(cookie)); - } - - final Map originalPrivateParameters = mockPortletRequest.getPrivateParameterMap(); - final Map originalPublicParameters = mockPortletRequest.getPublicParameterMap(); - assertNotNull("Original private parameters map is null ?", originalPrivateParameters); - assertFalse("Original private parameters map is empty ?", originalPrivateParameters.isEmpty()); - assertTrue("Original private parameters map does not contain " + TEST_PARAM + " ?", originalPrivateParameters.containsKey(TEST_PARAM)); - assertTrue("Original private parameters map does not contain " + TEST_PARAM2 + " ?", originalPrivateParameters.containsKey(TEST_PARAM2)); - assertNotNull("Original public parameters map is null ?", originalPublicParameters); - assertTrue("Original public parameters map is not empty ?", originalPublicParameters.isEmpty()); - mockPortletRequest.registerPublicParameter(TEST_PARAM2); - final Map updatedPrivateParameters = mockPortletRequest.getPrivateParameterMap(); - final Map updatedPublicParameters = mockPortletRequest.getPublicParameterMap(); - assertNotNull("Updated private parameters map is null ?", updatedPrivateParameters); - assertFalse("Updated private parameters map is empty ?", updatedPrivateParameters.isEmpty()); - assertFalse("Updated private parameters map contains " + TEST_PARAM2 + " ?", updatedPrivateParameters.containsKey(TEST_PARAM2)); - assertTrue("Updated private parameters map does not contain " + TEST_PARAM + " ?", updatedPrivateParameters.containsKey(TEST_PARAM)); - assertNotNull("Updated public parameters map is null ?", updatedPublicParameters); - assertFalse("Updated public parameters map is empty ?", updatedPublicParameters.isEmpty()); - assertFalse("Updated public parameters map contains " + TEST_PARAM + " ?", updatedPublicParameters.containsKey(TEST_PARAM)); - assertTrue("Updated public parameters map does not contain " + TEST_PARAM2 + " ?", updatedPublicParameters.containsKey(TEST_PARAM2)); - } - - public void testMockPortletRequestDispatcher() { - final String TEST_DISPATCH_URL = "localhost:8080/fakeurl"; - - // Call each constructor in sequence, do some basic checks - MockPortletRequestDispatcher mockPortletRequestDispatcher = new MockPortletRequestDispatcher(TEST_DISPATCH_URL); - final MockRenderRequest mockRenderRequest = new MockRenderRequest(); - final MockRenderResponse mockRenderResponse = new MockRenderResponse(); - try { - mockPortletRequestDispatcher.include(mockRenderRequest, mockRenderResponse); - } catch (Exception ex) { - fail("MockPortletRequestDispatcher include (render) failed. Exception: " + ex); - } - final MockPortletRequest mockPortletRequest = new MockPortletRequest(); - final MockPortletResponse mockPortletResponse = new MockPortletResponse(); - final MockMimeResponse mockMimeResponse = new MockMimeResponse(); - try { - mockPortletRequestDispatcher.include(mockPortletRequest, mockPortletResponse); - fail("Include of non-MockMimeResponse did not throw an exception ?"); - } catch (IllegalArgumentException iae) { - // Expected failure - } catch (Exception ex) { - fail("MockPortletRequestDispatcher include (portlet) failed. Exception: " + ex); - } - try { - mockPortletRequestDispatcher.include(mockPortletRequest, mockMimeResponse); - } catch (Exception ex) { - fail("MockPortletRequestDispatcher include (portlet) failed. Exception: " + ex); - } - try { - mockPortletRequestDispatcher.forward(mockPortletRequest, mockPortletResponse); - fail("Forward of non-MockMimeResponse did not throw an exception ?"); - } catch (IllegalArgumentException iae) { - // Expected failure - } catch (Exception ex) { - fail("MockPortletRequestDispatcher forward failed. Exception: " + ex); - } - try { - mockPortletRequestDispatcher.forward(mockPortletRequest, mockMimeResponse); - } catch (Exception ex) { - fail("MockPortletRequestDispatcher forward failed. Exception: " + ex); - } - } - - public void testMockPortletResponse() { - final String TEST_ENCODE_URL = "localhost:8080/fakeforwardedurl?param1=param with spaces"; - final String TEST_NAMESPACE = "Test_Namespace"; - final String TEST_PROPERTY = "TEST_PROPERTY"; - final String TEST_PROPERTY_VALUE = "Property_Value_1"; - final String TEST_PROPERTY2 = "TEST_PROPERTY2"; - final String TEST_PROPERTY2_VALUE = "Property_Value_2"; - final String TEST_XMLPROPERTY = "TEST_XMLPROPERTY"; - final String TEST_XML_TAGNAME = "TEST_XML_TAGNAME"; - final String TEST_COOKIE_ID = "TEST_COOKIE_ID"; - - // Call each constructor in sequence, do some basic checks - MockPortletResponse mockPortletResponse = new MockPortletResponse(); - assertEquals("Default namespace not as expected ?", "", mockPortletResponse.getNamespace()); - assertNotNull("Default portal context null ?", mockPortletResponse.getPortalContext()); - assertEquals("Encoded URL not as expected ?", TEST_ENCODE_URL, mockPortletResponse.encodeURL(TEST_ENCODE_URL)); // Mock URL encode does nothing - mockPortletResponse.setNamespace(TEST_NAMESPACE); - assertEquals("Set namespace not as expected ?", TEST_NAMESPACE, mockPortletResponse.getNamespace()); - final MockPortalContext mockPortalContext = new MockPortalContext(); - mockPortletResponse = new MockPortletResponse(mockPortalContext); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockPortletResponse.getPortalContext()); - - mockPortletResponse.setProperty(TEST_PROPERTY, TEST_PROPERTY_VALUE); - mockPortletResponse.setProperty(TEST_PROPERTY2, TEST_PROPERTY2_VALUE); - final Set propertyNames = mockPortletResponse.getPropertyNames(); - assertNotNull("MockPortletResponse property names null ?", propertyNames); - assertEquals("MockPortletResponse does not contain two properties ?", 2, propertyNames.size()); - assertTrue("MockPortletResponse does not contain property name " + TEST_PROPERTY + " ?", propertyNames.contains(TEST_PROPERTY)); - assertTrue("MockPortletResponse does not contain property name " + TEST_PROPERTY2 + " ?", propertyNames.contains(TEST_PROPERTY2)); - assertEquals("MockPortletResponse value of property name " + TEST_PROPERTY + " not as expected ?", TEST_PROPERTY_VALUE, mockPortletResponse.getProperty(TEST_PROPERTY)); - assertEquals("MockPortletResponse value of property name " + TEST_PROPERTY2 + " not as expected ?", TEST_PROPERTY2_VALUE, mockPortletResponse.getProperty(TEST_PROPERTY2)); - mockPortletResponse.addProperty(TEST_PROPERTY, TEST_PROPERTY2_VALUE); - final String[] propertiesForName = mockPortletResponse.getProperties(TEST_PROPERTY); - assertNotNull("MockPortletResponse properties for " + TEST_PROPERTY + " is null ?", propertiesForName); - final ArrayList propertiesForNameList = new ArrayList<>(); - propertiesForNameList.addAll(Arrays.asList(propertiesForName)); - assertEquals("MockPortletResponse does not contain two values for " + TEST_PROPERTY + " ?", 2, propertiesForNameList.size()); - assertTrue("MockPortletResponse does not contain expected value for property name " + TEST_PROPERTY + " ?", propertiesForNameList.contains(TEST_PROPERTY_VALUE)); - assertTrue("MockPortletResponse does not contain expected value for propety name " + TEST_PROPERTY + " ?", propertiesForNameList.contains(TEST_PROPERTY2_VALUE)); - - final Cookie[] cookies = mockPortletResponse.getCookies(); - assertNotNull("Cookies array null ?", cookies); - assertEquals("Cookies array length not 0 ?", 0, cookies.length); - assertNull("Cookie found ?", mockPortletResponse.getCookie(TEST_COOKIE_ID)); - - Set xmlPropertyNames = mockPortletResponse.getXmlPropertyNames(); - assertNotNull("MockPortletResponse XML property names null ?", xmlPropertyNames); - assertTrue("XML properites set not empty ?", xmlPropertyNames.isEmpty()); - assertNull("XML property found ?", mockPortletResponse.getXmlProperty(TEST_XMLPROPERTY)); - Element[] xmlProperties = mockPortletResponse.getXmlProperties(TEST_XMLPROPERTY); - assertNull("XML properties found ?", xmlProperties); - Element element = mockPortletResponse.createElement(TEST_XML_TAGNAME); - assertNotNull("MockPortletResponse XML element null ?", element); - mockPortletResponse.addProperty(TEST_XMLPROPERTY, element); - xmlPropertyNames = mockPortletResponse.getXmlPropertyNames(); - assertNotNull("MockPortletResponse XML property names null ?", xmlPropertyNames); - assertFalse("XML properites set empty ?", xmlPropertyNames.isEmpty()); - assertNotNull("XML property not found ?", mockPortletResponse.getXmlProperty(TEST_XMLPROPERTY)); - xmlProperties = mockPortletResponse.getXmlProperties(TEST_XMLPROPERTY); - assertNotNull("XML properties not found ?", xmlProperties); - assertEquals("XML properties not expected size ?", 1, xmlProperties.length); - assertEquals("XML property at index 0 not element value ?", element, xmlProperties[0]); - } - - public void testMockPortletSession() { - final String TEST_ATTRIBUTE = "TEST_ATTRIBUTE"; - final String TEST_ATTRIBUTE_VALUE = "Attribute_Value_1"; - final String TEST_ATTRIBUTE2 = "TEST_ATTRIBUTE2"; - final String TEST_ATTRIBUTE_VALUE2 = "Attribute_Value_2"; - final long TEST_START_TIME = System.currentTimeMillis(); - final int TEST_MAXINACTIVE_INTERVAL = 300; - - // Call each constructor in sequence, do some basic checks - MockPortletSession mockPortletSession = new MockPortletSession(); - final String INITIAL_SESSION_ID = mockPortletSession.getId(); - assertNotNull("MockPortletSession session id null ?", INITIAL_SESSION_ID); - assertFalse("MockPortletSession session is invalid ?", mockPortletSession.isInvalid()); - assertTrue("MockPortletSession session is not new ?", mockPortletSession.isNew()); - mockPortletSession.setNew(false); - assertFalse("MockPortletSession session is still new ?", mockPortletSession.isNew()); - mockPortletSession.setNew(true); - assertTrue("MockPortletSession session is not new after set ?", mockPortletSession.isNew()); - assertEquals("MockPortletSession max inactive interval not 0 ?", 0, mockPortletSession.getMaxInactiveInterval()); - assertNotNull("Default portlet context null ?", mockPortletSession.getPortletContext()); - assertTrue("MockPortletSession session creation time in past ?", mockPortletSession.getCreationTime() >= TEST_START_TIME); - assertTrue("MockPortletSession session last accessed time in past ?", mockPortletSession.getLastAccessedTime() >= TEST_START_TIME); - assertTrue("MockPortletSession session last accessed time older than creation time ?", mockPortletSession.getLastAccessedTime() >= mockPortletSession.getCreationTime()); - assertNotNull("Default portlet attribute map null ?", mockPortletSession.getAttributeMap()); - assertNotNull("Default portlet portletscope attribute map null ?", mockPortletSession.getAttributeMap(PortletSession.PORTLET_SCOPE)); - assertNotNull("Default portlet applicationscope attribute map null ?", mockPortletSession.getAttributeMap(PortletSession.APPLICATION_SCOPE)); - final MockPortletContext mockPortletContext = new MockPortletContext(); - mockPortletSession = new MockPortletSession(mockPortletContext); - assertEquals("MockPortletSession portletcontext not equal to set value ?", mockPortletContext, mockPortletSession.getPortletContext()); - final String NEW_SESSION_ID = mockPortletSession.getId(); - assertNotNull("MockPortletSession session id null ?", NEW_SESSION_ID); - assertNotEquals("Original and new session id match ?", NEW_SESSION_ID, INITIAL_SESSION_ID); - - assertNull(TEST_ATTRIBUTE + " present before set ?", mockPortletSession.getAttribute(TEST_ATTRIBUTE)); - assertNull(TEST_ATTRIBUTE2 + " present before set ?", mockPortletSession.getAttribute(TEST_ATTRIBUTE2)); - mockPortletSession.setAttribute(TEST_ATTRIBUTE, TEST_ATTRIBUTE_VALUE); - mockPortletSession.setAttribute(TEST_ATTRIBUTE2, TEST_ATTRIBUTE_VALUE2); - assertEquals("Retrieved atribute 1 does not match set value ?", TEST_ATTRIBUTE_VALUE, mockPortletSession.getAttribute(TEST_ATTRIBUTE)); - assertEquals("Retrieved atribute 2 does not match set value ?", TEST_ATTRIBUTE_VALUE2, mockPortletSession.getAttribute(TEST_ATTRIBUTE2)); - final Enumeration attributeNames = mockPortletSession.getAttributeNames(); - int attributeNameCount = 0; - assertNotNull("Attribute names null after additions ?", attributeNames); - assertTrue("Attribute names empty after additions ?", attributeNames.hasMoreElements()); - while (attributeNames.hasMoreElements()) { - attributeNameCount++; - String currentAttibuteName = attributeNames.nextElement(); - assertTrue("Attribute name not one of two expected matches ?", TEST_ATTRIBUTE.equals(currentAttibuteName) || - TEST_ATTRIBUTE2.equals(currentAttibuteName)); - } - assertEquals("Atribute names size not expected value ?", 2, attributeNameCount); - assertNull(TEST_ATTRIBUTE + " present before set (application scope) ?", mockPortletSession.getAttribute(TEST_ATTRIBUTE, PortletSession.APPLICATION_SCOPE)); - assertNull(TEST_ATTRIBUTE2 + " present before set (application scope) ?", mockPortletSession.getAttribute(TEST_ATTRIBUTE2, PortletSession.APPLICATION_SCOPE)); - mockPortletSession.setAttribute(TEST_ATTRIBUTE, TEST_ATTRIBUTE_VALUE, PortletSession.APPLICATION_SCOPE); - mockPortletSession.setAttribute(TEST_ATTRIBUTE2, TEST_ATTRIBUTE_VALUE2, PortletSession.APPLICATION_SCOPE); - assertEquals("Retrieved atribute 1 does not match set value (application scope) ?", TEST_ATTRIBUTE_VALUE, mockPortletSession.getAttribute(TEST_ATTRIBUTE, PortletSession.APPLICATION_SCOPE)); - assertEquals("Retrieved atribute 2 does not match set value (application scope) ?", TEST_ATTRIBUTE_VALUE2, mockPortletSession.getAttribute(TEST_ATTRIBUTE2, PortletSession.APPLICATION_SCOPE)); - final Enumeration attributeNamesApplication = mockPortletSession.getAttributeNames(PortletSession.APPLICATION_SCOPE); - int attributeNameCountApplication = 0; - assertNotNull("Attribute names null after additions (application scope) ?", attributeNamesApplication); - assertTrue("Attribute names empty after additions (application scope) ?", attributeNamesApplication.hasMoreElements()); - while (attributeNamesApplication.hasMoreElements()) { - attributeNameCountApplication++; - String currentAttibuteName = attributeNamesApplication.nextElement(); - assertTrue("Attribute name not one of two expected matches (application scope) ?", TEST_ATTRIBUTE.equals(currentAttibuteName) || - TEST_ATTRIBUTE2.equals(currentAttibuteName)); - } - assertEquals("Atribute names size not expected value (application scope) ?", 2, attributeNameCountApplication); - - assertTrue("MockPortletSession session is not new ?", mockPortletSession.isNew()); - mockPortletSession.access(); - assertFalse("MockPortletSession session is still new after access ?", mockPortletSession.isNew()); - mockPortletSession.setMaxInactiveInterval(TEST_MAXINACTIVE_INTERVAL); - assertEquals("MockPortletSession max inactive interval not set value ?", TEST_MAXINACTIVE_INTERVAL, mockPortletSession.getMaxInactiveInterval()); - mockPortletSession.removeAttribute(TEST_ATTRIBUTE2); - assertNull(TEST_ATTRIBUTE2 + " still present after removal ?", mockPortletSession.getAttribute(TEST_ATTRIBUTE2)); - mockPortletSession.removeAttribute(TEST_ATTRIBUTE, PortletSession.APPLICATION_SCOPE); - assertNull(TEST_ATTRIBUTE + " still present after removal (application scope) ?", mockPortletSession.getAttribute(TEST_ATTRIBUTE, PortletSession.APPLICATION_SCOPE)); - final long BEFORE_INVALIDATE_TIME = System.currentTimeMillis(); - mockPortletSession.invalidate(); - assertTrue("MockPortletSession session is still valid after invalidate ?", mockPortletSession.isInvalid()); - assertNull(TEST_ATTRIBUTE + " still present after invalidate ?", mockPortletSession.getAttribute(TEST_ATTRIBUTE)); - assertNull(TEST_ATTRIBUTE2 + " still present after removal (application scope) ?", mockPortletSession.getAttribute(TEST_ATTRIBUTE2, PortletSession.APPLICATION_SCOPE)); - assertTrue("MockPortletSession session last accessed time older than creation time ?", mockPortletSession.getLastAccessedTime() >= mockPortletSession.getCreationTime()); - assertTrue("MockPortletSession session last accessed time older than time before invalidation ?", mockPortletSession.getLastAccessedTime() >= BEFORE_INVALIDATE_TIME); - } - - public void testMockPortletURL() { - final String TEST_PARAMETER = "TEST_PARAMETER"; - - // Call each constructor in sequence, do some basic checks - final MockPortalContext mockPortalContext = new MockPortalContext(); - final MockPortletURL mockPortletURL = new MockPortletURL(mockPortalContext, MockPortletURL.URL_TYPE_RENDER); - assertNull("MockPortletURL default portlet mode not null ?", mockPortletURL.getPortletMode()); - assertNull("MockPortletURL default window state not null ?", mockPortletURL.getWindowState()); - try { - mockPortletURL.setWindowState(WindowState.MAXIMIZED); - } catch (Exception ex) { - fail("MockPortletURL window state set failed. Exception: " + ex); - } - assertEquals("Window state does not match set value ?", WindowState.MAXIMIZED, mockPortletURL.getWindowState()); - try { - mockPortletURL.setPortletMode(PortletMode.VIEW); - } catch (Exception ex) { - fail("MockPortletURL portlet mode set failed. Exception: " + ex); - } - assertEquals("PortletMode.VIEW not set ?", PortletMode.VIEW, mockPortletURL.getPortletMode()); - final String portletURLAsString = mockPortletURL.toString(); - assertNotNull("MockPortletURL toString() result null ?", portletURLAsString); - assertTrue("MockPortletURL toString() result is empty ?", portletURLAsString.length() > 0); - mockPortletURL.removePublicRenderParameter(TEST_PARAMETER); // Just confirm no exception - } - - public void testMockRenderRequest() { - final MockPortletContext mockPortletContext = new MockPortletContext(); - final MockPortalContext mockPortalContext = new MockPortalContext(); - - // Call each constructor in sequence, do some basic checks - MockRenderRequest mockRenderRequest = new MockRenderRequest(); - assertNull("MockRenderRequest ETag not null ?", mockRenderRequest.getETag()); - mockRenderRequest = new MockRenderRequest(PortletMode.HELP); - assertEquals("MockRenderRequest portlet mode does not match constructor-set value ?", PortletMode.HELP, mockRenderRequest.getPortletMode()); - mockRenderRequest = new MockRenderRequest(PortletMode.HELP, WindowState.MAXIMIZED); - assertEquals("MockRenderRequest portlet mode does not match constructor-set value ?", PortletMode.HELP, mockRenderRequest.getPortletMode()); - assertEquals("MockRenderRequest window state does not match constructor-set value ?", WindowState.MAXIMIZED, mockRenderRequest.getWindowState()); - new MockRenderRequest(mockPortletContext); // Only test is to confirm constructor completes without exception - mockRenderRequest = new MockRenderRequest(mockPortalContext, mockPortletContext); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockRenderRequest.getPortalContext()); - } - - public void testMockRenderResponse() { - final String TEST_TITLE = "TEST_TITLE"; - - // Call each constructor in sequence, do some basic checks - final MockPortalContext mockPortalContext = new MockPortalContext(); - final MockRenderRequest mockRenderRequest = new MockRenderRequest(); - MockRenderResponse mockRenderResponse = new MockRenderResponse(); - assertNull("MockRenderResponse title not null ?", mockRenderResponse.getTitle()); - mockRenderResponse = new MockRenderResponse(mockPortalContext); // Only test is to confirm constructor completes without exception - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockRenderResponse.getPortalContext()); - mockRenderResponse = new MockRenderResponse(mockPortalContext, mockRenderRequest); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockRenderResponse.getPortalContext()); - mockRenderResponse.setTitle(TEST_TITLE); - assertEquals("Title does not match set value ?", TEST_TITLE, mockRenderResponse.getTitle()); - final Collection portletModes = new ArrayList<>(); - portletModes.add(PortletMode.EDIT); - portletModes.add(PortletMode.VIEW); - mockRenderResponse.setNextPossiblePortletModes(portletModes); - assertEquals("Next possible portlet modes not equal to set value ?", portletModes, mockRenderResponse.getNextPossiblePortletModes()); - } - - public void testMockResourceRequest() { - final String TEST_RESOURCEID = "TEST_RESOURCEID"; - final String TEST_CACHEABILITY = "TEST_CACHEABILITY"; - final String TEST_PARAM = "TEST_PARAM"; - final String TEST_PARAM2 = "TEST_PARAM2"; - final String TEST_PARAM_VALUE = "NORMALVALUE"; - final String[] TEST_PARAM_ARRAYVALUE = { "ARRAYVALUE1", "ARRAYVALUE2" }; - - // Call each constructor in sequence, do some basic checks - MockResourceRequest mockResourceRequest = new MockResourceRequest(); - assertNull("Default resource id not null ?", mockResourceRequest.getResourceID()); - assertNull("Default cacheability not null ?", mockResourceRequest.getCacheability()); - assertNull("Default ETag not null ?", mockResourceRequest.getETag()); - mockResourceRequest = new MockResourceRequest(TEST_RESOURCEID); - assertEquals("Resource id not set value ?", TEST_RESOURCEID, mockResourceRequest.getResourceID()); - final MockPortletContext mockPortletContext = new MockPortletContext(); - final MockPortalContext mockPortalContext = new MockPortalContext(); - final MockResourceURL mockResourceURL = new MockResourceURL(); - new MockResourceRequest(mockResourceURL); // Only test is to confirm constructor completes without exception - new MockResourceRequest(mockPortletContext); // Only test is to confirm constructor completes without exception - mockResourceRequest = new MockResourceRequest(mockPortalContext, mockPortletContext); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockResourceRequest.getPortalContext()); - mockResourceRequest.setCacheability(TEST_CACHEABILITY); - assertEquals("Cacheability does not match set value ?", TEST_CACHEABILITY, mockResourceRequest.getCacheability()); - mockResourceRequest.addPrivateRenderParameter(TEST_PARAM, TEST_PARAM_VALUE); - mockResourceRequest.addPrivateRenderParameter(TEST_PARAM2, TEST_PARAM_ARRAYVALUE); - final Map privateRenderParameterMap = mockResourceRequest.getPrivateRenderParameterMap(); - assertNotNull("Parameter map is null ?", privateRenderParameterMap); - assertTrue("Expected parameter not present ?", privateRenderParameterMap.containsKey(TEST_PARAM)); - assertTrue("Expected parameter not present ?", privateRenderParameterMap.containsKey(TEST_PARAM2)); - } - - public void testMockResourceResponse() { - final int TEST_CONTENT_LENGTH = 4096; - - // Call each constructor in sequence, do some basic checks - MockResourceResponse mockResourceRequest = new MockResourceResponse(); - assertEquals("MockResourceResponse initial content length not 0 ?", 0, mockResourceRequest.getContentLength()); - mockResourceRequest.setContentLength(TEST_CONTENT_LENGTH); - assertEquals("Content length not equal to set value ?", TEST_CONTENT_LENGTH, mockResourceRequest.getContentLength()); - } - - public void testMockResourceURL() { - final String TEST_RESOURCEID = "TEST_RESOURCEID"; - final String TEST_CACHEABILITY = "TEST_CACHEABILITY"; - - // Call each constructor in sequence, do some basic checks - MockResourceURL mockResourceURL = new MockResourceURL(); - assertNull("Default resource id not null ?", mockResourceURL.getResourceID()); - assertNull("Default cacheability not null ?", mockResourceURL.getCacheability()); - mockResourceURL.setResourceID(TEST_RESOURCEID); - assertEquals("Resource id not set value ?", TEST_RESOURCEID, mockResourceURL.getResourceID()); - mockResourceURL.setCacheability(TEST_CACHEABILITY); - assertEquals("Cacheability does not match set value ?", TEST_CACHEABILITY, mockResourceURL.getCacheability()); - final String resourceURLAsString = mockResourceURL.toString(); - assertNotNull("MockResourceURL toString() result null ?", resourceURLAsString); - assertTrue("MockResourceURL toString() result is empty ?", resourceURLAsString.length() > 0); - } - - public void testMockStateAwareResponse() { - final String TEST_PORTLETNAME = "TestPortletName"; - final String TEST_DEFAULTNAMESPACE = "Test_Default_Namespace"; - final String TEST_QNAME3_STRING = "TestQname3String"; - final QName TEST_QNAME = new QName(TEST_PORTLETNAME); - final QName TEST_QNAME2 = new QName(TEST_DEFAULTNAMESPACE); - final String TEST_QNAME_VALUE = "Test_Qname_Value"; - final String TEST_QNAME2_VALUE = "Test_Qname2_Value"; - final String TEST_QNAME3_VALUE = "Test_Qname3_Value"; - final String TEST_PARAM = "TEST_PARAM"; - final String TEST_PARAM2 = "TEST_PARAM2"; - final String TEST_PARAM3 = "TEST_PARAM3"; - final String TEST_PARAM_VALUE = "NORMALVALUE"; - final String[] TEST_PARAM_ARRAYVALUE = { "ARRAYVALUE1", "ARRAYVALUE2" }; - final String[] TEST_PARAM_ARRAYVALUE2 = { "ARRAYVALUE3", "ARRAYVALUE4" }; - - // Call each constructor in sequence, do some basic checks - MockStateAwareResponse mockStateAwareResponse = new MockStateAwareResponse(); - try { - mockStateAwareResponse.setPortletMode(PortletMode.VIEW); - } catch (Exception ex) { - fail("MockStateAwareResponse portlet mode set failed. Exception: " + ex); - } - assertEquals("PortletMode.VIEW not set ?", PortletMode.VIEW, mockStateAwareResponse.getPortletMode()); - try { - mockStateAwareResponse.setPortletMode(PortletMode.EDIT); - } catch (Exception ex) { - fail("MockStateAwareResponse portlet mode set failed. Exception: " + ex); - } - assertEquals("Portlet mode does not match set value ?", PortletMode.EDIT, mockStateAwareResponse.getPortletMode()); - try { - mockStateAwareResponse.setWindowState(WindowState.MAXIMIZED); - } catch (Exception ex) { - fail("MockStateAwareResponse portlet mode set failed. Exception: " + ex); - } - assertEquals("Window state does not match set value ?", WindowState.MAXIMIZED, mockStateAwareResponse.getWindowState()); - final MockPortalContext mockPortalContext = new MockPortalContext(); - mockStateAwareResponse = new MockStateAwareResponse(mockPortalContext); - assertEquals("Portal context does not match constructor-set value ?", mockPortalContext, mockStateAwareResponse.getPortalContext()); - - assertNull("Initial event already present ?", mockStateAwareResponse.getEvent(TEST_PORTLETNAME)); - assertNull("Initial event already present ?", mockStateAwareResponse.getEvent(TEST_QNAME)); - assertNull("Initial event already present ?", mockStateAwareResponse.getEvent(TEST_DEFAULTNAMESPACE)); - assertNull("Initial event already present ?", mockStateAwareResponse.getEvent(TEST_QNAME2)); - mockStateAwareResponse.setEvent(TEST_QNAME, TEST_QNAME_VALUE); - mockStateAwareResponse.setEvent(TEST_QNAME2, TEST_QNAME2_VALUE); - mockStateAwareResponse.setEvent(TEST_QNAME3_STRING, TEST_QNAME3_VALUE); - assertEquals("First event QName not set value ?", TEST_QNAME_VALUE, mockStateAwareResponse.getEvent(TEST_QNAME)); - assertEquals("Second event QName not set value ?", TEST_QNAME2_VALUE, mockStateAwareResponse.getEvent(TEST_QNAME2)); - assertEquals("Third event QName not set value ?", TEST_QNAME3_VALUE, mockStateAwareResponse.getEvent(TEST_QNAME3_STRING)); - final Iterator eventQNames = mockStateAwareResponse.getEventNames(); - assertNotNull("Event names iterator null ?", eventQNames); - while (eventQNames.hasNext()) { - QName currentQName = eventQNames.next(); - assertNotNull("Iterator QName entry null ?", currentQName); - assertTrue("Iterator QName name not one of two or three expected matches ?", currentQName.getLocalPart().equals(TEST_QNAME.getLocalPart()) || - currentQName.getLocalPart().equals(TEST_QNAME2.getLocalPart()) || - currentQName.getLocalPart().equals(TEST_QNAME3_STRING)); - } - - mockStateAwareResponse.setRenderParameter(TEST_PARAM, TEST_PARAM_VALUE); - mockStateAwareResponse.setRenderParameter(TEST_PARAM2, TEST_PARAM_ARRAYVALUE); - assertEquals("Portal test render parameter value not as expected ?", TEST_PARAM_VALUE, mockStateAwareResponse.getRenderParameter(TEST_PARAM)); - assertEquals("Portal test render parameter value not as expected ?", TEST_PARAM_ARRAYVALUE[0], mockStateAwareResponse.getRenderParameter(TEST_PARAM2)); - final Iterator renderParameterNames = mockStateAwareResponse.getRenderParameterNames(); - assertNotNull("Render parameter names iterator null ?", renderParameterNames); - while (renderParameterNames.hasNext()) { - String currentParameter = renderParameterNames.next(); - assertNotNull("Iterator parameter entry null ?", currentParameter); - assertTrue("Iterator parameter name not one of two or three expected matches ?", currentParameter.equals(TEST_PARAM) || - currentParameter.equals(TEST_PARAM2) || - currentParameter.equals(TEST_PARAM3)); - } - final String[] renderParameterValuesParam2 = mockStateAwareResponse.getRenderParameterValues(TEST_PARAM2); - assertArrayEquals("Render parameter value2 not as expected ?", TEST_PARAM_ARRAYVALUE, renderParameterValuesParam2); - final Map renderParametersMap = new LinkedHashMap<>(); - renderParametersMap.put(TEST_PARAM3, TEST_PARAM_ARRAYVALUE2); - mockStateAwareResponse.setRenderParameters(renderParametersMap); - assertNull("Portal test render parameter value not cleared as expected ?", mockStateAwareResponse.getRenderParameter(TEST_PARAM)); - assertNull("Portal test render parameter value not cleared as expected ?", mockStateAwareResponse.getRenderParameter(TEST_PARAM2)); - assertEquals("Portal test render parameter map value not as expected ?", renderParametersMap, mockStateAwareResponse.getRenderParameterMap()); - } - - public void testServletWrappingPortletContext() { - final String TEST_ATTRIBUTE = "TEST_ATTRIBUTE"; - final String TEST_ATTRIBUTE_VALUE = "Attribute_Value_1"; - final String TEST_ATTRIBUTE2 = "TEST_ATTRIBUTE2"; - final String TEST_ATTRIBUTE_VALUE2 = "Attribute_Value_2"; - final String TEST_INITPARAM = "TEST_INITPARAM"; - final String TEST_INITPARAM2 = "TEST_INITPARAM2"; - - // Call each constructor in sequence, do some basic checks - final MockServletContext mockServletContext = new MockServletContext(); - final ServletWrappingPortletContext servletWrappingPortletContext = new ServletWrappingPortletContext(mockServletContext); - assertNotNull("ServletWrappingPortletContext serverInfo null ?", servletWrappingPortletContext.getServerInfo()); - assertNull("ServletWrappingPortletContext PortletRequestDispatcher not null (illegal prefix) ?", servletWrappingPortletContext.getRequestDispatcher("IllegalPrefix")); - assertNull("ServletWrappingPortletContext PortletRequestDispatcher not null ?", servletWrappingPortletContext.getRequestDispatcher("/")); - assertNotNull("ServletWrappingPortletContext resource stream for / null ?", servletWrappingPortletContext.getResourceAsStream("/")); - assertNull("ServletWrappingPortletContext resource stream for /ThisDoesNotExist not null ?", servletWrappingPortletContext.getResourceAsStream("/ThisDoesNotExist")); - assertTrue("ServletWrappingPortletContext major version not >= 2 ?", servletWrappingPortletContext.getMajorVersion() >= 2); - assertTrue("ServletWrappingPortletContext minor version not >= 0 ?", servletWrappingPortletContext.getMajorVersion() >= 0); - try { - assertNull("ServletWrappingPortletContext MIME type for / not null ?", servletWrappingPortletContext.getMimeType("/")); - } catch (NoClassDefFoundError ncdfe) { - // If compiled with Spring 4.x the MockServletContext has a dependency on javax.activation. This will cause a runtime failure running under JDK 9+ due to removal - // of the javax.activation module. For that reason we will ignore the NoClassDefFoundError failure provided it is for the known FileTypeMap dependency. - if (!ncdfe.getMessage().contains("javax/activation/FileTypeMap")) { - fail("Unexpected exception: " + ncdfe); - } - } - assertNotNull("ServletWrappingPortletContext real path for / null ?", servletWrappingPortletContext.getRealPath("/")); - assertNull("ServletWrappingPortletContext real path for /ThisDoesNotExist not null ?", servletWrappingPortletContext.getRealPath("/ThisDoesNotExist")); - assertNull("ServletWrappingPortletContext resource paths for / not null ?", servletWrappingPortletContext.getResourcePaths("/")); - assertNull("ServletWrappingPortletContext resource paths for / null ?", servletWrappingPortletContext.getResourcePaths("/ThisDoesNotExist")); - try { - assertNotNull("ServletWrappingPortletContext resource URL for / null ?", servletWrappingPortletContext.getResource("/")); - } catch (MalformedURLException mue) { - fail("ServletWrappingPortletContext resource URL for / failed. Exception: " + mue); - } - try { - assertNull("ServletWrappingPortletContext resource URL for /ThisDoesNotExist not null ?", servletWrappingPortletContext.getResource("/ThisDoesNotExist")); - } catch (MalformedURLException mue) { - fail("ServletWrappingPortletContext resource URL for /ThisDoesNotExist failed. Exception: " + mue); - } - - assertNull(TEST_ATTRIBUTE + " present before set ?", servletWrappingPortletContext.getAttribute(TEST_ATTRIBUTE)); - assertNull(TEST_ATTRIBUTE2 + " present before set ?", servletWrappingPortletContext.getAttribute(TEST_ATTRIBUTE2)); - servletWrappingPortletContext.setAttribute(TEST_ATTRIBUTE, TEST_ATTRIBUTE_VALUE); - servletWrappingPortletContext.setAttribute(TEST_ATTRIBUTE2, TEST_ATTRIBUTE_VALUE2); - assertEquals("Retrieved atribute 1 does not match set value ?", TEST_ATTRIBUTE_VALUE, servletWrappingPortletContext.getAttribute(TEST_ATTRIBUTE)); - assertEquals("Retrieved atribute 2 does not match set value ?", TEST_ATTRIBUTE_VALUE2, servletWrappingPortletContext.getAttribute(TEST_ATTRIBUTE2)); - final Enumeration attributeNames = servletWrappingPortletContext.getAttributeNames(); - int attributeNameCount = 0; - assertNotNull("Attribute names null after additions ?", attributeNames); - assertTrue("Attribute names empty after additions ?", attributeNames.hasMoreElements()); - while (attributeNames.hasMoreElements()) { - attributeNameCount++; - String currentAttibuteName = attributeNames.nextElement(); - assertTrue("Attribute name not one of two or three expected matches ?", TEST_ATTRIBUTE.equals(currentAttibuteName) || - TEST_ATTRIBUTE2.equals(currentAttibuteName) || - WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE.equals(currentAttibuteName)); - } - assertTrue("Atribute names size not 2 or 3 ?", attributeNameCount >= 2 && attributeNameCount <= 3); - - assertNull(TEST_INITPARAM + " present before set ?", servletWrappingPortletContext.getInitParameter(TEST_INITPARAM)); - assertNull(TEST_INITPARAM2 + " present before set ?", servletWrappingPortletContext.getInitParameter(TEST_INITPARAM)); - servletWrappingPortletContext.log("Test logging call"); - servletWrappingPortletContext.log("Test logging call", new Exception("Fake Exception")); - assertEquals("Default portlet context name not as expected ?", "MockServletContext", servletWrappingPortletContext.getPortletContextName()); - assertFalse("Portlet runtime options not empty before set ?", servletWrappingPortletContext.getContainerRuntimeOptions().hasMoreElements()); - } - // -------- Continue writing tests here -------------- - - static class TestMockMultipartFile implements MultipartFile { - private final String name; - private final String originalFilename; - private final String contentType; - private final byte[] bytes; - - public TestMockMultipartFile(String name, String originalFilename, String contentType, byte[] bytes) { - this.name = name; - this.originalFilename = originalFilename; - this.contentType = contentType; - if (bytes != null) { - this.bytes = Arrays.copyOf(bytes, bytes.length); - } else { - this.bytes = null; - } - } - - @Override - public String getName() { - return name; - } - - @Override - public String getOriginalFilename() { - return this.originalFilename; - } - - @Override - public String getContentType() { - return contentType; - } - - @Override - public boolean isEmpty() { - return (bytes == null || bytes.length == 0); - } - - @Override - public long getSize() { - return (bytes != null ? bytes.length : 0); - } - - @Override - public byte[] getBytes() throws IOException { - return bytes; - } - - @Override - public InputStream getInputStream() throws IOException { - return new ByteArrayInputStream(bytes); - } - - @Override - public void transferTo(File file) throws IOException, IllegalStateException { - throw new UnsupportedOperationException("Not supported yet."); - } - } - - static class TetMockResourceBundle extends ResourceBundle { - - @Override - protected Object handleGetObject(String key) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Enumeration getKeys() { - throw new UnsupportedOperationException("Not supported yet."); - } - } - - class TestMockPrincipal implements Principal { - - @Override - public String getName() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean implies(Subject subject) { - return Principal.super.implies(subject); - } - } -} diff --git a/plugins/portlet-mocks/src/test/resources/applicationContext.xml b/plugins/portlet-mocks/src/test/resources/applicationContext.xml deleted file mode 100644 index 106fd6cf4..000000000 --- a/plugins/portlet-mocks/src/test/resources/applicationContext.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/plugins/portlet-tiles/README.md b/plugins/portlet-tiles/README.md deleted file mode 100644 index 5cff1590b..000000000 --- a/plugins/portlet-tiles/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Struts 2 Portlet Tiles plugin -This plugin is deprecated, and it will be removed soon, **please do not use it**! diff --git a/plugins/portlet-tiles/pom.xml b/plugins/portlet-tiles/pom.xml deleted file mode 100644 index c738a9b68..000000000 --- a/plugins/portlet-tiles/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - 4.0.0 - - org.apache.struts - struts2-plugins - 6.4.0-SNAPSHOT - - - struts2-portlet-tiles-plugin - jar - DEPRECATED: Struts 2 Portlet Tiles Plugin - since 6.0.0 - - - - org.apache.struts - struts2-tiles-plugin - - - org.apache.struts - struts2-portlet-plugin - - - javax.portlet - portlet-api - provided - - - org.easymock - easymock - test - - - - UTF-8 - - diff --git a/plugins/portlet-tiles/src/main/java/org/apache/struts2/views/tiles/PortletTilesResult.java b/plugins/portlet-tiles/src/main/java/org/apache/struts2/views/tiles/PortletTilesResult.java deleted file mode 100644 index ef1f82f76..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/struts2/views/tiles/PortletTilesResult.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * 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.views.tiles; - -import com.opensymphony.xwork2.ActionInvocation; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.context.PortletActionContext; -import org.apache.struts2.result.ServletDispatcherResult; -import org.apache.tiles.api.TilesContainer; -import org.apache.tiles.api.TilesException; -import org.apache.tiles.api.access.TilesAccess; -import org.apache.tiles.request.ApplicationContext; -import org.apache.tiles.request.Request; -import org.apache.tiles.request.portlet.RenderPortletRequest; - -import javax.portlet.ActionResponse; -import javax.portlet.PortletContext; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import java.util.Map; - -/** - * Dedicated Tile result to be used in Portlet environment - * - * WW-2749 - */ -public class PortletTilesResult extends ServletDispatcherResult { - - public static final String TILES_ACTION_NAME = "tilesDirect"; - - public PortletTilesResult() { - super(); - } - - public PortletTilesResult(String location) { - super(location); - } - - public void doExecute(String location, ActionInvocation invocation) throws Exception { - if (PortletActionContext.getPhase().isAction() || PortletActionContext.getPhase().isEvent()) { - executeActionResult(location, invocation); - } else { - executeRenderResult(location); - } - } - - protected void executeRenderResult(String location) throws TilesException { - setLocation(location); - - PortletContext portletContext = PortletActionContext.getPortletContext(); - RenderRequest request = PortletActionContext.getRenderRequest(); - RenderResponse response = PortletActionContext.getRenderResponse(); - - TilesContainer container = getCurrentContainer(request, portletContext); - ApplicationContext applicationContext = container.getApplicationContext(); - Request currentRequest = new RenderPortletRequest(applicationContext, portletContext, request, response); - - container.render(location, currentRequest); - } - - protected void executeActionResult(String location, ActionInvocation invocation) { - ActionResponse res = PortletActionContext.getActionResponse(); - - res.setRenderParameter(PortletConstants.ACTION_PARAM, TILES_ACTION_NAME); - - Map sessionMap = invocation.getInvocationContext().getSession(); - sessionMap.put(PortletConstants.RENDER_DIRECT_LOCATION, location); - - res.setRenderParameter(PortletConstants.MODE_PARAM, PortletActionContext.getRequest().getPortletMode().toString()); - } - - protected TilesContainer getCurrentContainer(javax.portlet.PortletRequest request, PortletContext context) { - - TilesContainer container = (TilesContainer) request.getAttribute(TilesAccess.CURRENT_CONTAINER_ATTRIBUTE_NAME); - - if (container == null) { - container = getContainer(context); - request.setAttribute(TilesAccess.CURRENT_CONTAINER_ATTRIBUTE_NAME, container); - } - - return container; - } - - protected TilesContainer getContainer(PortletContext context) { - return getContainer(context, TilesAccess.CONTAINER_ATTRIBUTE); - } - - protected TilesContainer getContainer(PortletContext context, String key) { - if (key == null) { - key = TilesAccess.CONTAINER_ATTRIBUTE; - } - return (TilesContainer) context.getAttribute(key); - } - -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/PortletRequest.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/PortletRequest.java deleted file mode 100644 index 6946776e4..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/PortletRequest.java +++ /dev/null @@ -1,344 +0,0 @@ -/* - * $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.tiles.request.portlet; - -import org.apache.tiles.request.AbstractClientRequest; -import org.apache.tiles.request.ApplicationContext; -import org.apache.tiles.request.attribute.Addable; -import org.apache.tiles.request.collection.HeaderValuesMap; -import org.apache.tiles.request.collection.ReadOnlyEnumerationMap; -import org.apache.tiles.request.collection.ScopeMap; -import org.apache.tiles.request.portlet.delegate.RequestDelegate; -import org.apache.tiles.request.portlet.delegate.ResponseDelegate; -import org.apache.tiles.request.portlet.extractor.HeaderExtractor; -import org.apache.tiles.request.portlet.extractor.RequestScopeExtractor; -import org.apache.tiles.request.portlet.extractor.SessionScopeExtractor; - -import javax.portlet.PortletContext; -import javax.portlet.PortletException; -import javax.portlet.PortletRequestDispatcher; -import javax.portlet.PortletResponse; -import javax.portlet.PortletSession; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.Writer; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -/** - * Portlet-based TilesApplicationContext implementation. - */ -public class PortletRequest extends AbstractClientRequest { - - /** - * The native available scopes. - */ - private static final List SCOPES = Collections.unmodifiableList(Arrays.asList(REQUEST_SCOPE, "portletSession", "session", APPLICATION_SCOPE)); - - /** - *

The lazily instantiated Map of header name-value - * combinations (immutable).

- */ - private Map header = null; - - - /** - *

The lazily instantiated Map of header name-value - * combinations (write-only).

- */ - private Addable responseHeaders = null; - - - /** - *

The lazily instantiated Map of header name-values - * combinations (immutable).

- */ - private Map headerValues = null; - - /** - * The PortletContext for this application. - */ - protected PortletContext context; - - /** - *

The PortletRequest for this request.

- */ - protected javax.portlet.PortletRequest request; - - /** - * The delegate to get information about parameters. - */ - protected RequestDelegate requestDelegate; - - - /** - *

The lazily instantiated Map of request scope - * attributes.

- */ - private Map requestScope = null; - - - /** - *

The PortletResponse for this request.

- */ - protected PortletResponse response; - - /** - * The delegate to get information from a response (output stream, writer, etc.). - */ - protected ResponseDelegate responseDelegate; - - - /** - *

The lazily instantiated Map of session scope - * attributes.

- */ - private Map sessionScope = null; - - /** - *

The lazily instantiated Map of portlet session scope - * attributes.

- */ - private Map portletSessionScope = null; - - - /** - * Creates a new instance of PortletTilesRequestContext. - * - * @param applicationContext The Tiles application context. - * @param context The portlet context to use. - * @param request The request object to use. - * @param response The response object to use. - * @param requestDelegate The request delegate. - * @param responseDelegate The response delegate. - */ - public PortletRequest(ApplicationContext applicationContext, - PortletContext context, javax.portlet.PortletRequest request, - PortletResponse response, RequestDelegate requestDelegate, ResponseDelegate responseDelegate) { - super(applicationContext); - - // Save the specified Portlet API object references - this.context = context; - this.request = request; - this.response = response; - this.requestDelegate = requestDelegate; - this.responseDelegate = responseDelegate; - } - - /** - *

Return the {@link PortletRequest} for this context.

- * - * @return The used portlet request. - */ - public javax.portlet.PortletRequest getRequest() { - return (this.request); - } - - /** - * Returns the portlet context. - * - * @return The portlet context. - */ - public PortletContext getPortletContext() { - return context; - } - - /** - * {@inheritDoc} - */ - public Map getHeader() { - if ((header == null) && (request != null)) { - header = new ReadOnlyEnumerationMap<>(new HeaderExtractor(request, null)); - } - return (header); - } - - /** - * {@inheritDoc} - */ - public Addable getResponseHeaders() { - if ((responseHeaders == null) && (request != null)) { - responseHeaders = new HeaderExtractor(null, response); - } - return (responseHeaders); - } - - /** - * {@inheritDoc} - */ - public Map getHeaderValues() { - if ((headerValues == null) && (request != null)) { - headerValues = new HeaderValuesMap(new HeaderExtractor(request, response)); - } - return (headerValues); - } - - /** - * {@inheritDoc} - */ - public Map getRequestScope() { - if ((requestScope == null) && (request != null)) { - requestScope = new ScopeMap(new RequestScopeExtractor(request)); - } - return (requestScope); - } - - /** - * {@inheritDoc} - */ - public Map getSessionScope() { - if ((sessionScope == null) && (request != null)) { - sessionScope = new ScopeMap(new SessionScopeExtractor(request, - PortletSession.APPLICATION_SCOPE)); - } - return (sessionScope); - } - - /** - * {@inheritDoc} - */ - public Map getPortletSessionScope() { - if ((portletSessionScope == null) && (request != null)) { - portletSessionScope = new ScopeMap(new SessionScopeExtractor( - request, PortletSession.APPLICATION_SCOPE)); - } - return (portletSessionScope); - } - - @Override - public List getAvailableScopes() { - return SCOPES; - } - - /** - * {@inheritDoc} - */ - public Locale getRequestLocale() { - return request.getLocale(); - } - - @Override - public Map getParam() { - return requestDelegate.getParam(); - } - - @Override - public Map getParamValues() { - return requestDelegate.getParamValues(); - } - - /** - * {@inheritDoc} - */ - public boolean isUserInRole(String role) { - return request.isUserInRole(role); - } - - @Override - public OutputStream getOutputStream() throws IOException { - return responseDelegate.getOutputStream(); - } - - @Override - public PrintWriter getPrintWriter() throws IOException { - return responseDelegate.getPrintWriter(); - } - - @Override - public Writer getWriter() throws IOException { - return responseDelegate.getWriter(); - } - - @Override - public boolean isResponseCommitted() { - return responseDelegate.isResponseCommitted(); - } - - @Override - public void setContentType(String contentType) { - responseDelegate.setContentType(contentType); - } - - /** - * {@inheritDoc} - */ - public void doForward(String path) throws IOException { - if (responseDelegate.isResponseCommitted()) { - doInclude(path); - return; - } - - try { - PortletRequestDispatcher rd = getPortletContext() - .getRequestDispatcher(path); - - if (rd == null) { - throw new IOException( - "No portlet request dispatcher returned for path '" - + path + "'"); - } - - rd.forward(request, response); - } catch (PortletException e) { - throw new IOException("PortletException while including path '" - + path + "'.", e); - } - } - - /** - * {@inheritDoc} - */ - public void doInclude(String path) throws IOException { - try { - PortletRequestDispatcher rd = getPortletContext() - .getRequestDispatcher(path); - - if (rd == null) { - throw new IOException( - "No portlet request dispatcher returned for path '" - + path + "'"); - } - - rd.include(request, response); - } catch (PortletException e) { - throw new IOException("PortletException while including path '" - + path + "'.", e); - } - } - - @Override - public Map getContext(String scope) { - if (REQUEST_SCOPE.equals(scope)) { - return getRequestScope(); - } else if ("session".equals(scope)) { - return getSessionScope(); - } else if ("portletSession".equals(scope)) { - return getPortletSessionScope(); - } else if (APPLICATION_SCOPE.equals(scope)) { - return getApplicationScope(); - } - throw new IllegalArgumentException(scope + " does not exist. Call getAvailableScopes() first to check."); - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/RenderPortletRequest.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/RenderPortletRequest.java deleted file mode 100644 index ea22c38a2..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/RenderPortletRequest.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * $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.tiles.request.portlet; - -import org.apache.tiles.request.ApplicationContext; -import org.apache.tiles.request.portlet.delegate.MimeResponseDelegate; -import org.apache.tiles.request.portlet.delegate.PortletRequestDelegate; - -import javax.portlet.PortletContext; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; - -/** - * Portlet request for a {@link RenderRequest}. - */ -public class RenderPortletRequest extends PortletRequest { - - /** - * Constructor. - * - * @param applicationContext The application context. - * @param context The portlet context. - * @param request The portlet request. - * @param response The portlet response. - */ - public RenderPortletRequest(ApplicationContext applicationContext, PortletContext context, RenderRequest request, RenderResponse response) { - super(applicationContext, context, request, response, new PortletRequestDelegate(request), new MimeResponseDelegate(response)); - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/MimeResponseDelegate.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/MimeResponseDelegate.java deleted file mode 100644 index 347873cf1..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/MimeResponseDelegate.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * $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.tiles.request.portlet.delegate; - -import javax.portlet.MimeResponse; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.Writer; - -/** - * Response delegate in case of {@link MimeResponse}. - */ -public class MimeResponseDelegate implements ResponseDelegate { - - /** - * The response. - */ - private final MimeResponse response; - - /** - * Constructor. - * - * @param response The response. - */ - public MimeResponseDelegate(MimeResponse response) { - this.response = response; - } - - /** {@inheritDoc} */ - public OutputStream getOutputStream() throws IOException { - return response.getPortletOutputStream(); - } - - /** {@inheritDoc} */ - public PrintWriter getPrintWriter() throws IOException { - return response.getWriter(); - } - - /** {@inheritDoc} */ - public Writer getWriter() throws IOException { - return response.getWriter(); - } - - /** {@inheritDoc} */ - public boolean isResponseCommitted() { - return response.isCommitted(); - } - - /** {@inheritDoc} */ - public void setContentType(String contentType) { - response.setContentType(contentType); - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/PortletRequestDelegate.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/PortletRequestDelegate.java deleted file mode 100644 index e5683d5a0..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/PortletRequestDelegate.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * $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.tiles.request.portlet.delegate; - -import org.apache.tiles.request.collection.ReadOnlyEnumerationMap; -import org.apache.tiles.request.portlet.extractor.ParameterExtractor; - -import javax.portlet.PortletRequest; -import java.util.Map; - -/** - * Request delegate in case of simple Portlet request. - */ -public class PortletRequestDelegate implements RequestDelegate { - - /** - * The request. - */ - private final PortletRequest request; - - /** - *

The lazily instantiated Map of request - * parameter name-value.

- */ - private Map param = null; - - /** - *

The lazily instantiated Map of request - * parameter name-values.

- */ - private Map paramValues = null; - - /** - * Constructor. - * - * @param request The request. - */ - public PortletRequestDelegate(PortletRequest request) { - this.request = request; - } - - /** - * {@inheritDoc} - */ - public Map getParam() { - if ((param == null) && (request != null)) { - param = new ReadOnlyEnumerationMap<>(new ParameterExtractor(request)); - } - return (param); - } - - /** - * {@inheritDoc} - */ - public Map getParamValues() { - if ((paramValues == null) && (request != null)) { - paramValues = request.getParameterMap(); - } - return (paramValues); - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/RequestDelegate.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/RequestDelegate.java deleted file mode 100644 index 03846cc72..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/RequestDelegate.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * $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.tiles.request.portlet.delegate; - -import java.util.Map; - -/** - * Exposes the parameters of a portlet request, if available. - */ -public interface RequestDelegate { - - /** - * The parameters, as single values. - * - * @return The parameters. - */ - Map getParam(); - - /** - * The parameters, with values as array of strings. - * - * @return The parameters. - */ - Map getParamValues(); -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/ResponseDelegate.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/ResponseDelegate.java deleted file mode 100644 index 92f46cef6..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/ResponseDelegate.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * $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.tiles.request.portlet.delegate; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.Writer; - -/** - * Exposes features of a response, if they are available. - */ -public interface ResponseDelegate { - - /** - * Returns the output stream. - * - * @return The output stream. - * @throws IOException If the underlying response causes a problem. - */ - OutputStream getOutputStream() throws IOException; - - /** - * Returns the print writer. - * - * @return The print writer. - * @throws IOException If the underlying response causes a problem. - */ - PrintWriter getPrintWriter() throws IOException; - - /** - * Returns the writer. - * - * @return The writer. - * @throws IOException If the underlying response causes a problem. - */ - Writer getWriter() throws IOException; - - /** - * Sets the content type of the response. - * - * @param contentType The content type. - */ - void setContentType(String contentType); - - /** - * Checks if the response is committed. - * - * @return true if the response is committed. - */ - boolean isResponseCommitted(); -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/package-info.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/package-info.java deleted file mode 100644 index 5080dc3e0..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/delegate/package-info.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * $Id: package-info.java 1049711 2010-12-15 21:12:00Z 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. - */ -/** - * Delegations to map all the different types of request and responses. - */ -package org.apache.tiles.request.portlet.delegate; diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/ApplicationScopeExtractor.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/ApplicationScopeExtractor.java deleted file mode 100644 index 590046cff..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/ApplicationScopeExtractor.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * $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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.attribute.AttributeExtractor; - -import javax.portlet.PortletContext; -import java.util.Enumeration; - -/** - * Extracts attributes from portlet application scope. - */ -public class ApplicationScopeExtractor implements AttributeExtractor { - - /** - * The portlet context. - */ - private final PortletContext context; - - /** - * Constructor. - * - * @param context The portlet context. - */ - public ApplicationScopeExtractor(PortletContext context) { - this.context = context; - } - - @Override - public void setValue(String name, Object value) { - context.setAttribute(name, value); - } - - @Override - public void removeValue(String name) { - context.removeAttribute(name); - } - - @Override - public Enumeration getKeys() { - return context.getAttributeNames(); - } - - @Override - public Object getValue(String key) { - return context.getAttribute(key); - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/HeaderExtractor.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/HeaderExtractor.java deleted file mode 100644 index 0c94fa90f..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/HeaderExtractor.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * $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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.attribute.EnumeratedValuesExtractor; - -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; -import java.util.Enumeration; - -/** - * Extracts and puts headers in portlet requests and responses. - */ -public class HeaderExtractor implements EnumeratedValuesExtractor { - - /** - * The request. - */ - private final PortletRequest request; - - /** - * The response. - */ - private final PortletResponse response; - - /** - * Constructor. - * - * @param request The request. - * @param response The response. - */ - public HeaderExtractor(PortletRequest request, PortletResponse response) { - this.request = request; - this.response = response; - } - - @Override - public Enumeration getKeys() { - return request.getPropertyNames(); - } - - @Override - public String getValue(String key) { - return request.getProperty(key); - } - - @Override - public Enumeration getValues(String key) { - return request.getProperties(key); - } - - @Override - public void setValue(String key, String value) { - response.setProperty(key, value); - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/InitParameterExtractor.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/InitParameterExtractor.java deleted file mode 100644 index f27fdf4f1..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/InitParameterExtractor.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * $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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.attribute.HasKeys; - -import javax.portlet.PortletContext; -import java.util.Enumeration; - -/** - * Extracts init parameters from a portlet context. - */ -public class InitParameterExtractor implements HasKeys { - - /** - * The portlet context. - */ - private final PortletContext context; - - /** - * Constructor. - * - * @param context The portlet context. - */ - public InitParameterExtractor(PortletContext context) { - this.context = context; - } - - @Override - public Enumeration getKeys() { - return context.getInitParameterNames(); - } - - @Override - public String getValue(String key) { - return context.getInitParameter(key); - } - -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/ParameterExtractor.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/ParameterExtractor.java deleted file mode 100644 index e412a84c6..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/ParameterExtractor.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * $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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.attribute.HasKeys; - -import javax.portlet.PortletRequest; -import java.util.Enumeration; - -/** - * Extracts parameters from a portlet request. - */ -public class ParameterExtractor implements HasKeys { - - /** - * The portlet request. - */ - private final PortletRequest request; - - /** - * Constructor. - * - * @param request The portlet request. - */ - public ParameterExtractor(PortletRequest request) { - this.request = request; - } - - @Override - public Enumeration getKeys() { - return request.getParameterNames(); - } - - @Override - public String getValue(String key) { - return request.getParameter(key); - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/RequestScopeExtractor.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/RequestScopeExtractor.java deleted file mode 100644 index edc72bc9e..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/RequestScopeExtractor.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * $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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.attribute.AttributeExtractor; - -import javax.portlet.PortletRequest; -import java.util.Enumeration; - -/** - * Extracts attributes from request scope of a portlet request. - */ -public class RequestScopeExtractor implements AttributeExtractor { - - /** - * The portlet request. - */ - private final PortletRequest request; - - /** - * Constructor. - * - * @param request The portlet request. - */ - public RequestScopeExtractor(PortletRequest request) { - this.request = request; - } - - @Override - public void setValue(String name, Object value) { - request.setAttribute(name, value); - } - - @Override - public void removeValue(String name) { - request.removeAttribute(name); - } - - @Override - public Enumeration getKeys() { - return request.getAttributeNames(); - } - - @Override - public Object getValue(String key) { - return request.getAttribute(key); - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/SessionScopeExtractor.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/SessionScopeExtractor.java deleted file mode 100644 index 9801454fa..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/SessionScopeExtractor.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * $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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.attribute.AttributeExtractor; - -import javax.portlet.PortletRequest; -import javax.portlet.PortletSession; -import java.util.Enumeration; - -/** - * Extracts attributes from the session scope of a portlet request. - */ -public class SessionScopeExtractor implements AttributeExtractor { - - /** - * The portlet request. - */ - private final PortletRequest request; - - /** - * The subscope (application or portlet). - */ - private final int scope; - - /** - * Constructor. - * - * @param request The request. - * @param scope The subscope (application or portlet). - */ - public SessionScopeExtractor(PortletRequest request, int scope) { - this.request = request; - if (scope != PortletSession.APPLICATION_SCOPE && scope != PortletSession.PORTLET_SCOPE) { - throw new IllegalArgumentException("The scope must be either APPLICATION_SCOPE or PORTLET_SCOPE"); - } - this.scope = scope; - } - - @Override - public void setValue(String name, Object value) { - request.getPortletSession().setAttribute(name, value, scope); - } - - @Override - public void removeValue(String name) { - PortletSession session = request.getPortletSession(false); - if (session != null) { - session.removeAttribute(name, scope); - } - } - - @Override - public Enumeration getKeys() { - PortletSession session = request.getPortletSession(false); - if (session != null) { - return session.getAttributeNames(scope); - } - return null; - } - - @Override - public Object getValue(String key) { - PortletSession session = request.getPortletSession(false); - if (session != null) { - return session.getAttribute(key, scope); - } - return null; - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/StateAwareParameterExtractor.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/StateAwareParameterExtractor.java deleted file mode 100644 index a14f53a7b..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/StateAwareParameterExtractor.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * $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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.attribute.HasAddableKeys; - -import javax.portlet.PortletRequest; -import javax.portlet.StateAwareResponse; - -/** - * Extracts parameters from a request and allows putting render parameters in a state aware response. - */ -public class StateAwareParameterExtractor extends ParameterExtractor implements HasAddableKeys { - - /** - * The portlet response. - */ - private final StateAwareResponse response; - - /** - * Constructor. - * - * @param request The portlet request. - * @param response The portlet response. - */ - public StateAwareParameterExtractor(PortletRequest request, StateAwareResponse response) { - super(request); - this.response = response; - } - - @Override - public void setValue(String key, String value) { - response.setRenderParameter(key, value); - } -} diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/package-info.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/package-info.java deleted file mode 100644 index a37ccbb9e..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/extractor/package-info.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * $Id: package-info.java 1049711 2010-12-15 21:12:00Z 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. - */ -/** - * Extractors to get scopes from Portlet requests. - */ -package org.apache.tiles.request.portlet.extractor; diff --git a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/package-info.java b/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/package-info.java deleted file mode 100644 index b9eb0d168..000000000 --- a/plugins/portlet-tiles/src/main/java/org/apache/tiles/request/portlet/package-info.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * $Id: package-info.java 1049711 2010-12-15 21:12:00Z 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. - */ -/** - * Support of Tiles requests to portlets. - */ -package org.apache.tiles.request.portlet; diff --git a/plugins/portlet-tiles/src/main/resources/LICENSE.txt b/plugins/portlet-tiles/src/main/resources/LICENSE.txt deleted file mode 100644 index c6055ec8f..000000000 --- a/plugins/portlet-tiles/src/main/resources/LICENSE.txt +++ /dev/null @@ -1,174 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/plugins/portlet-tiles/src/main/resources/NOTICE.txt b/plugins/portlet-tiles/src/main/resources/NOTICE.txt deleted file mode 100644 index 12fa3b83d..000000000 --- a/plugins/portlet-tiles/src/main/resources/NOTICE.txt +++ /dev/null @@ -1,5 +0,0 @@ -Apache Struts -Copyright 2000-2011 The Apache Software Foundation - -This product includes software developed by -The Apache Software Foundation (http://www.apache.org/). \ No newline at end of file diff --git a/plugins/portlet-tiles/src/main/resources/struts-plugin.xml b/plugins/portlet-tiles/src/main/resources/struts-plugin.xml deleted file mode 100644 index 9aa82ca5d..000000000 --- a/plugins/portlet-tiles/src/main/resources/struts-plugin.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - ${location} - - - - - diff --git a/plugins/portlet-tiles/src/site/site.xml b/plugins/portlet-tiles/src/site/site.xml deleted file mode 100644 index 54fdcf4f4..000000000 --- a/plugins/portlet-tiles/src/site/site.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - org.apache.maven.skins - maven-fluido-skin - ${fluido-skin.version} - - - Apache Software Foundation - http://www.apache.org/images/asf-logo.gif - http://www.apache.org/ - - - Apache Struts - http://struts.apache.org/img/struts-logo.svg - http://struts.apache.org/ - - - - - - - - - - - - -
- - Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project - logos are trademarks of The Apache Software Foundation. - ]]> -
- - diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/PortletRequestTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/PortletRequestTest.java deleted file mode 100644 index 130c8f5f6..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/PortletRequestTest.java +++ /dev/null @@ -1,424 +0,0 @@ -/* - * 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.tiles.request.portlet; - -import org.apache.tiles.request.ApplicationContext; -import org.apache.tiles.request.collection.HeaderValuesMap; -import org.apache.tiles.request.collection.ReadOnlyEnumerationMap; -import org.apache.tiles.request.collection.ScopeMap; -import org.apache.tiles.request.portlet.delegate.RequestDelegate; -import org.apache.tiles.request.portlet.delegate.ResponseDelegate; -import org.apache.tiles.request.portlet.extractor.HeaderExtractor; -import org.junit.Before; -import org.junit.Test; - -import javax.portlet.PortletContext; -import javax.portlet.PortletException; -import javax.portlet.PortletRequestDispatcher; -import javax.portlet.PortletResponse; -import jakarta.servlet.ServletOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Locale; -import java.util.Map; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.expectLastCall; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Tests {@link PortletRequest}. - */ -public class PortletRequestTest { - - /** - * The application context. - */ - private ApplicationContext applicationContext; - - /** - * The portlet context. - */ - private PortletContext portletContext; - - /** - * The request. - */ - private javax.portlet.PortletRequest request; - - /** - * The response. - */ - private PortletResponse response; - - /** - * The request to test. - */ - private PortletRequest req; - - /** - * The request delegate. - */ - private RequestDelegate requestDelegate; - - /** - * The response delegate. - */ - private ResponseDelegate responseDelegate; - - /** - * Sets up the test. - */ - @Before - public void setUp() { - applicationContext = createMock(ApplicationContext.class); - portletContext = createMock(PortletContext.class); - request = createMock(javax.portlet.PortletRequest.class); - response = createMock(PortletResponse.class); - requestDelegate = createMock(RequestDelegate.class); - responseDelegate = createMock(ResponseDelegate.class); - req = new PortletRequest(applicationContext, portletContext, request, - response, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#doForward(String)}. - * - * @throws IOException If something goes wrong. - * @throws PortletException If something goes wrong. - */ - @Test - public void testDoForward() throws PortletException, IOException { - PortletRequestDispatcher rd = createMock(PortletRequestDispatcher.class); - - expect(responseDelegate.isResponseCommitted()).andReturn(false); - expect(portletContext.getRequestDispatcher("/my/path")).andReturn(rd); - rd.forward(request, response); - - replay(applicationContext, portletContext, request, response, rd); - req.doForward("/my/path"); - verify(applicationContext, portletContext, request, response, rd); - } - - /** - * Test method for {@link PortletRequest#doForward(String)}. - * - * @throws IOException If something goes wrong. - */ - @Test(expected = IOException.class) - public void testDoForwardNoDispatcher() throws IOException { - expect(responseDelegate.isResponseCommitted()).andReturn(false); - expect(portletContext.getRequestDispatcher("/my/path")).andReturn(null); - - replay(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - try { - req.doForward("/my/path"); - } finally { - verify(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - } - } - - /** - * Test method for {@link PortletRequest#doForward(String)}. - * - * @throws IOException If something goes wrong. - * @throws PortletException If something goes wrong. - */ - @Test(expected = IOException.class) - public void testDoForwardPortletException() throws PortletException, IOException { - PortletRequestDispatcher rd = createMock(PortletRequestDispatcher.class); - - expect(responseDelegate.isResponseCommitted()).andReturn(false); - expect(portletContext.getRequestDispatcher("/my/path")).andReturn(rd); - rd.forward(request, response); - expectLastCall().andThrow(new PortletException()); - - replay(applicationContext, request, response, rd, portletContext, requestDelegate, responseDelegate); - try { - req.doForward("/my/path"); - } finally { - verify(applicationContext, request, response, rd, portletContext, requestDelegate, responseDelegate); - } - } - - /** - * Test method for {@link PortletRequest#doForward(String)}. - * - * @throws IOException If something goes wrong. - * @throws PortletException If something goes wrong. - */ - @Test - public void testDoForwardInclude() throws PortletException, IOException { - PortletRequestDispatcher rd = createMock(PortletRequestDispatcher.class); - - expect(responseDelegate.isResponseCommitted()).andReturn(true); - expect(portletContext.getRequestDispatcher("/my/path")).andReturn(rd); - rd.include(request, response); - - replay(applicationContext, request, response, rd, portletContext, requestDelegate, responseDelegate); - req.doForward("/my/path"); - verify(applicationContext, request, response, rd, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#doInclude(String)}. - * - * @throws IOException If something goes wrong. - * @throws PortletException If something goes wrong. - */ - @Test - public void testDoInclude() throws IOException, PortletException { - PortletRequestDispatcher rd = createMock(PortletRequestDispatcher.class); - - expect(portletContext.getRequestDispatcher("/my/path")).andReturn(rd); - rd.include(request, response); - - replay(applicationContext, request, response, rd, portletContext, requestDelegate, responseDelegate); - req.doInclude("/my/path"); - verify(applicationContext, request, response, rd, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#doInclude(String)}. - * - * @throws IOException If something goes wrong. - */ - @Test(expected = IOException.class) - public void testDoIncludeNoDispatcher() throws IOException { - expect(portletContext.getRequestDispatcher("/my/path")).andReturn(null); - - replay(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - try { - req.doInclude("/my/path"); - } finally { - verify(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - } - } - - /** - * Test method for {@link PortletRequest#doInclude(String)}. - * - * @throws IOException If something goes wrong. - * @throws PortletException If something goes wrong. - */ - @Test(expected = IOException.class) - public void testDoIncludePortletException() throws IOException, PortletException { - PortletRequestDispatcher rd = createMock(PortletRequestDispatcher.class); - - expect(portletContext.getRequestDispatcher("/my/path")).andReturn(rd); - rd.include(request, response); - expectLastCall().andThrow(new PortletException()); - - replay(applicationContext, request, response, rd, portletContext, requestDelegate, responseDelegate); - try { - req.doInclude("/my/path"); - } finally { - verify(applicationContext, request, response, rd, portletContext, requestDelegate, responseDelegate); - } - } - - /** - * Test method for {@link PortletRequest#getHeader()}. - */ - @Test - public void testGetHeader() { - assertTrue(req.getHeader() instanceof ReadOnlyEnumerationMap); - } - - /** - * Test method for {@link PortletRequest#getResponseHeaders()}. - */ - @Test - public void testGetResponseHeaders() { - assertTrue(req.getResponseHeaders() instanceof HeaderExtractor); - } - - /** - * Test method for {@link PortletRequest#getHeaderValues()}. - */ - @Test - public void testGetHeaderValues() { - assertTrue(req.getHeaderValues() instanceof HeaderValuesMap); - } - - /** - * Test method for {@link PortletRequest#getParam()}. - */ - @Test - public void testGetParam() { - Map map = createMock(Map.class); - - expect(requestDelegate.getParam()).andReturn(map); - - replay(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - assertEquals(map, req.getParam()); - verify(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#getParamValues()}. - */ - @Test - public void testGetParamValues() { - Map paramMap = createMock(Map.class); - - expect(requestDelegate.getParamValues()).andReturn(paramMap); - - replay(applicationContext, request, response, paramMap, portletContext, requestDelegate, responseDelegate); - assertEquals(paramMap, req.getParamValues()); - verify(applicationContext, request, response, paramMap, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#getRequestScope()}. - */ - @Test - public void testGetRequestScope() { - assertTrue(req.getRequestScope() instanceof ScopeMap); - } - - /** - * Test method for {@link PortletRequest#getSessionScope()}. - */ - @Test - public void testGetSessionScope() { - assertTrue(req.getSessionScope() instanceof ScopeMap); - } - - /** - * Test method for {@link PortletRequest#getPortletSessionScope()}. - */ - @Test - public void testGetPortletSessionScope() { - assertTrue(req.getPortletSessionScope() instanceof ScopeMap); - } - - /** - * Test method for {@link PortletRequest#getOutputStream()}. - * - * @throws IOException If something goes wrong. - */ - @Test - public void testGetOutputStream() throws IOException { - ServletOutputStream os = createMock(ServletOutputStream.class); - - expect(responseDelegate.getOutputStream()).andReturn(os); - - replay(applicationContext, request, response, os, portletContext, requestDelegate, responseDelegate); - assertEquals(req.getOutputStream(), os); - verify(applicationContext, request, response, os, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#getWriter()}. - * - * @throws IOException If something goes wrong. - */ - @Test - public void testGetWriter() throws IOException { - PrintWriter os = createMock(PrintWriter.class); - - expect(responseDelegate.getWriter()).andReturn(os); - - replay(applicationContext, request, response, os, portletContext, requestDelegate, responseDelegate); - assertEquals(req.getWriter(), os); - verify(applicationContext, request, response, os, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#getPrintWriter()}. - * - * @throws IOException If something goes wrong. - */ - @Test - public void testGetPrintWriter() throws IOException { - PrintWriter os = createMock(PrintWriter.class); - - expect(responseDelegate.getPrintWriter()).andReturn(os); - - replay(applicationContext, request, response, os, portletContext, requestDelegate, responseDelegate); - assertEquals(req.getPrintWriter(), os); - verify(applicationContext, request, response, os, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#isResponseCommitted()}. - */ - @Test - public void testIsResponseCommitted() { - expect(responseDelegate.isResponseCommitted()).andReturn(true); - - replay(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - assertTrue(req.isResponseCommitted()); - verify(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#setContentType(String)}. - */ - @Test - public void testSetContentType() { - responseDelegate.setContentType("text/html"); - - replay(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - req.setContentType("text/html"); - verify(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#getRequestLocale()}. - */ - @Test - public void testGetRequestLocale() { - Locale locale = Locale.ITALY; - - expect(request.getLocale()).andReturn(locale); - - replay(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - assertEquals(locale, req.getRequestLocale()); - verify(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#getRequest()}. - */ - @Test - public void testGetRequest() { - replay(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - assertEquals(request, req.getRequest()); - verify(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - } - - /** - * Test method for {@link PortletRequest#isUserInRole(String)}. - */ - @Test - public void testIsUserInRole() { - expect(request.isUserInRole("myrole")).andReturn(true); - - replay(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - assertTrue(req.isUserInRole("myrole")); - verify(applicationContext, request, response, portletContext, requestDelegate, responseDelegate); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/RenderPortletRequestTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/RenderPortletRequestTest.java deleted file mode 100644 index 5bba700fb..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/RenderPortletRequestTest.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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.tiles.request.portlet; - -import org.apache.tiles.request.ApplicationContext; -import org.apache.tiles.request.portlet.delegate.MimeResponseDelegate; -import org.apache.tiles.request.portlet.delegate.PortletRequestDelegate; -import org.junit.Test; - -import javax.portlet.PortletContext; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import java.lang.reflect.Field; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.junit.Assert.assertTrue; - -/** - * Tests {@link RenderPortletRequest}. - */ -public class RenderPortletRequestTest { - - /** - * Test method for - * {@link RenderPortletRequest#RenderPortletRequest(ApplicationContext, PortletContext, - * RenderRequest, RenderResponse)}. - * - * @throws NoSuchFieldException If something goes wrong. - * @throws SecurityException If something goes wrong. - * @throws IllegalAccessException If something goes wrong. - * @throws IllegalArgumentException If something goes wrong. - */ - @Test - public void testRenderPortletRequest() throws NoSuchFieldException, IllegalAccessException { - ApplicationContext applicationContext = createMock(ApplicationContext.class); - PortletContext portletContext = createMock(PortletContext.class); - RenderRequest request = createMock(RenderRequest.class); - RenderResponse response = createMock(RenderResponse.class); - - replay(applicationContext, portletContext, request, response); - RenderPortletRequest req = new RenderPortletRequest(applicationContext, - portletContext, request, response); - Class clazz = req.getClass(); - Field field = clazz.getSuperclass().getDeclaredField("requestDelegate"); - assertTrue(field.get(req) instanceof PortletRequestDelegate); - field = clazz.getSuperclass().getDeclaredField("responseDelegate"); - assertTrue(field.get(req) instanceof MimeResponseDelegate); - verify(applicationContext, portletContext, request, response); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/delegate/MimeResponseDelegateTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/delegate/MimeResponseDelegateTest.java deleted file mode 100644 index 25d653456..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/delegate/MimeResponseDelegateTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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.tiles.request.portlet.delegate; - -import org.junit.Before; -import org.junit.Test; - -import javax.portlet.MimeResponse; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Tests {@link MimeResponseDelegate}. - */ -public class MimeResponseDelegateTest { - - /** - * The response. - */ - private MimeResponse response; - - /** - * The delegate to test. - */ - private MimeResponseDelegate delegate; - - /** - * Sets up the test. - */ - @Before - public void setUp() { - response = createMock(MimeResponse.class); - delegate = new MimeResponseDelegate(response); - } - - /** - * Test method for {@link MimeResponseDelegate#getOutputStream()}. - * - * @throws IOException If something goes wrong. - */ - @Test - public void testGetOutputStream() throws IOException { - OutputStream os = createMock(OutputStream.class); - - expect(response.getPortletOutputStream()).andReturn(os); - - replay(response, os); - assertEquals(os, delegate.getOutputStream()); - verify(response, os); - } - - /** - * Test method for {@link MimeResponseDelegate#getPrintWriter()}. - * - * @throws IOException If something goes wrong. - */ - @Test - public void testGetPrintWriter() throws IOException { - PrintWriter os = createMock(PrintWriter.class); - - expect(response.getWriter()).andReturn(os); - - replay(response, os); - assertEquals(os, delegate.getPrintWriter()); - verify(response, os); - } - - /** - * Test method for {@link MimeResponseDelegate#getWriter()}. - * - * @throws IOException If something goes wrong. - */ - @Test - public void testGetWriter() throws IOException { - PrintWriter os = createMock(PrintWriter.class); - - expect(response.getWriter()).andReturn(os); - - replay(response, os); - assertEquals(os, delegate.getWriter()); - verify(response, os); - } - - /** - * Test method for {@link MimeResponseDelegate#isResponseCommitted()}. - */ - @Test - public void testIsResponseCommitted() { - expect(response.isCommitted()).andReturn(true); - - replay(response); - assertTrue(delegate.isResponseCommitted()); - verify(response); - } - - /** - * Test method for {@link MimeResponseDelegate#setContentType(String)}. - */ - @Test - public void testSetContentType() { - response.setContentType("text/html"); - - replay(response); - delegate.setContentType("text/html"); - verify(response); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/delegate/PortletRequestDelegateTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/delegate/PortletRequestDelegateTest.java deleted file mode 100644 index ce6d4e849..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/delegate/PortletRequestDelegateTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.tiles.request.portlet.delegate; - -import org.apache.tiles.request.collection.ReadOnlyEnumerationMap; -import org.junit.Before; -import org.junit.Test; - -import javax.portlet.PortletRequest; -import java.util.Map; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Tests {@link PortletRequestDelegate}. - */ -public class PortletRequestDelegateTest { - - /** - * The request. - */ - private PortletRequest request; - - /** - * The delegate to test. - */ - private PortletRequestDelegate delegate; - - /** - * Sets up the test. - */ - @Before - public void setUp() { - request = createMock(PortletRequest.class); - delegate = new PortletRequestDelegate(request); - } - - /** - * Test method for {@link PortletRequestDelegate#getParam()}. - */ - @Test - public void testGetParam() { - replay(request); - assertTrue(delegate.getParam() instanceof ReadOnlyEnumerationMap); - verify(request); - } - - /** - * Test method for {@link PortletRequestDelegate#getParamValues()}. - */ - @Test - public void testGetParamValues() { - Map params = createMock(Map.class); - - expect(request.getParameterMap()).andReturn(params); - - replay(request, params); - assertEquals(params, delegate.getParamValues()); - verify(request, params); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/ApplicationScopeExtractorTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/ApplicationScopeExtractorTest.java deleted file mode 100644 index 5ede84f69..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/ApplicationScopeExtractorTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.portlet.extractor.ApplicationScopeExtractor; -import org.junit.Before; -import org.junit.Test; - -import javax.portlet.PortletContext; -import java.util.Enumeration; - -import static org.easymock.EasyMock.*; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.assertEquals; - -/** - * Tests {@link ApplicationScopeExtractor}. - */ -public class ApplicationScopeExtractorTest { - - /** - * The portlet context. - */ - private PortletContext context; - - /** - * The extractot to test. - */ - private ApplicationScopeExtractor extractor; - - /** - * Sets up the test. - */ - @Before - public void setUp() { - context = createMock(PortletContext.class); - extractor = new ApplicationScopeExtractor(context); - } - - /** - * Test method for {@link ApplicationScopeExtractor#setValue(String, Object)}. - */ - @Test - public void testSetValue() { - context.setAttribute("attribute", "value"); - - replay(context); - extractor.setValue("attribute", "value"); - verify(context); - } - - /** - * Test method for {@link ApplicationScopeExtractor#removeValue(String)}. - */ - @Test - public void testRemoveValue() { - context.removeAttribute("attribute"); - - replay(context); - extractor.removeValue("attribute"); - verify(context); - } - - /** - * Test method for {@link ApplicationScopeExtractor#getKeys()}. - */ - @SuppressWarnings("unchecked") - @Test - public void testGetKeys() { - Enumeration keys = createMock(Enumeration.class); - expect(context.getAttributeNames()).andReturn(keys); - - replay(context, keys); - assertEquals(keys, extractor.getKeys()); - verify(context, keys); - } - - /** - * Test method for {@link ApplicationScopeExtractor#getValue(String)}. - */ - @Test - public void testGetValue() { - expect(context.getAttribute("attribute")).andReturn("value"); - - replay(context); - assertEquals("value", extractor.getValue("attribute")); - verify(context); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/HeaderExtractorTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/HeaderExtractorTest.java deleted file mode 100644 index 7f5054c02..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/HeaderExtractorTest.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * 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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.portlet.extractor.HeaderExtractor; -import org.junit.Before; -import org.junit.Test; - -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; -import java.util.Enumeration; - -import static org.easymock.EasyMock.*; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.assertEquals; - -/** - * Tests {@link HeaderExtractor}. - */ -public class HeaderExtractorTest { - - /** - * The request. - */ - private PortletRequest request; - - /** - * The response. - */ - private PortletResponse response; - - /** - * The extractor to test. - */ - private HeaderExtractor extractor; - - /** - * Sets up the test. - */ - @Before - public void setUp() { - request = createMock(PortletRequest.class); - response = createMock(PortletResponse.class); - extractor = new HeaderExtractor(request, response); - } - - /** - * Test method for {@link HeaderExtractor#getKeys()}. - */ - @SuppressWarnings("unchecked") - @Test - public void testGetKeys() { - Enumeration keys = createMock(Enumeration.class); - - expect(request.getPropertyNames()).andReturn(keys); - - replay(request, response, keys); - assertEquals(keys, extractor.getKeys()); - verify(request, response, keys); - } - - /** - * Test method for {@link HeaderExtractor#getValue(String)}. - */ - @Test - public void testGetValue() { - expect(request.getProperty("name")).andReturn("value"); - - replay(request, response); - assertEquals("value", extractor.getValue("name")); - verify(request, response); - } - - /** - * Test method for {@link HeaderExtractor#getValues(String)}. - */ - @SuppressWarnings("unchecked") - @Test - public void testGetValues() { - Enumeration keys = createMock(Enumeration.class); - - expect(request.getProperties("name")).andReturn(keys); - - replay(request, response, keys); - assertEquals(keys, extractor.getValues("name")); - verify(request, response, keys); - } - - /** - * Test method for {@link HeaderExtractor#setValue(String, String)}. - */ - @Test - public void testSetValue() { - response.setProperty("name", "value"); - - replay(request, response); - extractor.setValue("name", "value"); - verify(request, response); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/InitParameterExtractorTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/InitParameterExtractorTest.java deleted file mode 100644 index 66a1f9ea7..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/InitParameterExtractorTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.portlet.extractor.InitParameterExtractor; -import org.junit.Before; -import org.junit.Test; - -import javax.portlet.PortletContext; -import java.util.Enumeration; - -import static org.easymock.EasyMock.*; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.assertEquals; - -/** - * Tests {@link InitParameterExtractor}. - */ -public class InitParameterExtractorTest { - - /** - * The portlet context. - */ - private PortletContext context; - - /** - * The extractor to test. - */ - private InitParameterExtractor extractor; - - /** - * Sets up the test. - */ - @Before - public void setUp() { - context = createMock(PortletContext.class); - extractor = new InitParameterExtractor(context); - } - - /** - * Test method for {@link InitParameterExtractor#getKeys()}. - */ - @SuppressWarnings("unchecked") - @Test - public void testGetKeys() { - Enumeration keys = createMock(Enumeration.class); - - expect(context.getInitParameterNames()).andReturn(keys); - - replay(context, keys); - assertEquals(keys, extractor.getKeys()); - verify(context, keys); - } - - /** - * Test method for {@link InitParameterExtractor#getValue(String)}. - */ - @Test - public void testGetValue() { - expect(context.getInitParameter("name")).andReturn("value"); - - replay(context); - assertEquals("value", extractor.getValue("name")); - verify(context); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/ParameterExtractorTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/ParameterExtractorTest.java deleted file mode 100644 index 0e8005325..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/ParameterExtractorTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.portlet.extractor.ParameterExtractor; -import org.junit.Before; -import org.junit.Test; - -import javax.portlet.PortletRequest; -import java.util.Enumeration; - -import static org.easymock.EasyMock.*; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.assertEquals; - -/** - * Tests {@link ParameterExtractor}. - */ -public class ParameterExtractorTest { - - /** - * The request. - */ - private PortletRequest request; - - /** - * The extractor to test. - */ - private ParameterExtractor extractor; - - /** - * Sets up the test. - */ - @Before - public void setUp() { - request = createMock(PortletRequest.class); - extractor = new ParameterExtractor(request); - } - - /** - * Test method for {@link ParameterExtractor#getKeys()}. - */ - @SuppressWarnings("unchecked") - @Test - public void testGetKeys() { - Enumeration keys = createMock(Enumeration.class); - - expect(request.getParameterNames()).andReturn(keys); - - replay(request, keys); - assertEquals(keys, extractor.getKeys()); - verify(request, keys); - } - - /** - * Test method for {@link ParameterExtractor#getValue(String)}. - */ - @Test - public void testGetValue() { - expect(request.getParameter("name")).andReturn("value"); - - replay(request); - assertEquals("value", extractor.getValue("name")); - verify(request); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/RequestScopeExtractorTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/RequestScopeExtractorTest.java deleted file mode 100644 index df76a515e..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/RequestScopeExtractorTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.portlet.extractor.RequestScopeExtractor; -import org.junit.Before; -import org.junit.Test; - -import javax.portlet.PortletRequest; -import java.util.Enumeration; - -import static org.easymock.EasyMock.*; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.assertEquals; - -/** - * Tests {@link RequestScopeExtractor}. - */ -public class RequestScopeExtractorTest { - - /** - * The request to test. - */ - private PortletRequest request; - - /** - * The extractor to test. - */ - private RequestScopeExtractor extractor; - - /** - * Sets up the test. - */ - @Before - public void setUp() { - request = createMock(PortletRequest.class); - extractor = new RequestScopeExtractor(request); - } - - /** - * Test method for {@link RequestScopeExtractor#setValue(String, Object)}. - */ - @Test - public void testSetValue() { - request.setAttribute("name", "value"); - - replay(request); - extractor.setValue("name", "value"); - verify(request); - } - - /** - * Test method for {@link RequestScopeExtractor#removeValue(String)}. - */ - @Test - public void testRemoveValue() { - request.removeAttribute("name"); - - replay(request); - extractor.removeValue("name"); - verify(request); - } - - /** - * Test method for {@link RequestScopeExtractor#getKeys()}. - */ - @SuppressWarnings("unchecked") - @Test - public void testGetKeys() { - Enumeration keys = createMock(Enumeration.class); - - expect(request.getAttributeNames()).andReturn(keys); - - replay(request, keys); - assertEquals(keys, extractor.getKeys()); - verify(request, keys); - } - - /** - * Test method for {@link RequestScopeExtractor#getValue(String)}. - */ - @Test - public void testGetValue() { - expect(request.getAttribute("name")).andReturn("value"); - - replay(request); - assertEquals("value", extractor.getValue("name")); - verify(request); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/SessionScopeExtractorTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/SessionScopeExtractorTest.java deleted file mode 100644 index 09010ff0c..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/SessionScopeExtractorTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * 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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.portlet.extractor.SessionScopeExtractor; -import org.junit.Before; -import org.junit.Test; - -import javax.portlet.PortletRequest; -import javax.portlet.PortletSession; -import java.util.Enumeration; - -import static org.easymock.EasyMock.*; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -/** - * Tests {@link SessionScopeExtractor}. - */ -public class SessionScopeExtractorTest { - - /** - * The request. - */ - private PortletRequest request; - - /** - * The session. - */ - private PortletSession session; - - /** - * The scope to test. - */ - private SessionScopeExtractor extractor; - - /** - * Sets up the test. - */ - @Before - public void setUp() { - request = createMock(PortletRequest.class); - session = createMock(PortletSession.class); - extractor = new SessionScopeExtractor(request, PortletSession.PORTLET_SCOPE); - } - - - /** - * Tests {@link SessionScopeExtractor#SessionScopeExtractor(PortletRequest, int)}. - */ - @Test(expected = IllegalArgumentException.class) - public void testIllegalScope() { - replay(request, session); - new SessionScopeExtractor(request, 0); - verify(request, session); - } - - /** - * Test method for {@link SessionScopeExtractor#setValue(String, Object)}. - */ - @Test - public void testSetValue() { - expect(request.getPortletSession()).andReturn(session); - session.setAttribute("name", "value", PortletSession.PORTLET_SCOPE); - - replay(request, session); - extractor.setValue("name", "value"); - verify(request, session); - } - - /** - * Test method for {@link SessionScopeExtractor#removeValue(String)}. - */ - @Test - public void testRemoveValue() { - expect(request.getPortletSession(false)).andReturn(session); - session.removeAttribute("name", PortletSession.PORTLET_SCOPE); - - replay(request, session); - extractor.removeValue("name"); - verify(request, session); - } - - /** - * Test method for {@link SessionScopeExtractor#getKeys()}. - */ - @SuppressWarnings("unchecked") - @Test - public void testGetKeys() { - Enumeration keys = createMock(Enumeration.class); - - expect(request.getPortletSession(false)).andReturn(session); - expect(session.getAttributeNames(PortletSession.PORTLET_SCOPE)).andReturn(keys); - - replay(request, session, keys); - assertEquals(keys, extractor.getKeys()); - verify(request, session, keys); - } - - /** - * Test method for {@link SessionScopeExtractor#getKeys()}. - */ - @Test - public void testGetKeysNoSession() { - expect(request.getPortletSession(false)).andReturn(null); - - replay(request, session); - assertNull(extractor.getKeys()); - verify(request, session); - } - - /** - * Test method for {@link SessionScopeExtractor#getValue(String)}. - */ - @Test - public void testGetValue() { - expect(request.getPortletSession(false)).andReturn(session); - expect(session.getAttribute("name", PortletSession.PORTLET_SCOPE)).andReturn("value"); - - replay(request, session); - assertEquals("value", extractor.getValue("name")); - verify(request, session); - } - - /** - * Test method for {@link SessionScopeExtractor#getValue(String)}. - */ - @Test - public void testGetValueNoSession() { - expect(request.getPortletSession(false)).andReturn(null); - - replay(request, session); - assertNull(extractor.getValue("name")); - verify(request, session); - } - -} diff --git a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/StateAwareParameterExtractorTest.java b/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/StateAwareParameterExtractorTest.java deleted file mode 100644 index 5157b6fe6..000000000 --- a/plugins/portlet-tiles/src/test/java/org/apache/tiles/request/portlet/extractor/StateAwareParameterExtractorTest.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.tiles.request.portlet.extractor; - -import org.apache.tiles.request.portlet.extractor.StateAwareParameterExtractor; -import org.junit.Test; - -import javax.portlet.PortletRequest; -import javax.portlet.StateAwareResponse; - -import static org.easymock.EasyMock.*; - -/** - * Tests {@link StateAwareParameterExtractor}. - */ -public class StateAwareParameterExtractorTest { - - /** - * Test method for {@link StateAwareParameterExtractor#setValue(String, String)}. - */ - @Test - public void testSetValue() { - PortletRequest request = createMock(PortletRequest.class); - StateAwareResponse response = createMock(StateAwareResponse.class); - - response.setRenderParameter("name", "value"); - - replay(request, response); - StateAwareParameterExtractor extractor = new StateAwareParameterExtractor(request, response); - extractor.setValue("name", "value"); - verify(request, response); - } - -} diff --git a/plugins/portlet/README.md b/plugins/portlet/README.md deleted file mode 100644 index 69958edb0..000000000 --- a/plugins/portlet/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Struts 2 Portlet plugin -This plugin is deprecated, and it will be removed soon, **please do not use it**! diff --git a/plugins/portlet/pom.xml b/plugins/portlet/pom.xml deleted file mode 100644 index 8aed31c0b..000000000 --- a/plugins/portlet/pom.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - 4.0.0 - - org.apache.struts - struts2-plugins - 6.4.0-SNAPSHOT - - - struts2-portlet-plugin - jar - DEPRECATED: Struts 2 Portlet Plugin - since 6.0.0 - - - - org.apache.struts - struts2-portlet-mocks-plugin - test - - - - org.apache.struts - struts2-velocity-plugin - - - - - - org.springframework - spring-core - true - - - - - javax.portlet - portlet-api - - - - mockobjects - mockobjects-jdk1.3-j2ee1.3 - test - - - - org.easymock - easymock - test - - - jmock - jmock - test - - - - jmock - jmock-cglib - test - - - - mockobjects - mockobjects-core - test - - - - - org.springframework - spring-test - true - - - - - UTF-8 - - - diff --git a/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java b/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java deleted file mode 100644 index 754389f83..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * 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.ActionInvocation; -import com.opensymphony.xwork2.inject.Inject; -import org.apache.commons.lang3.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 org.apache.struts2.portlet.util.PortletUrlHelperJSR286; -import org.apache.struts2.url.QueryStringParser; -import org.apache.struts2.views.util.UrlHelper; - -import javax.portlet.PortletMode; -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 ServletUrlRenderer 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 - public void setActionMapper(ActionMapper actionMapper) { - servletRenderer.setActionMapper(actionMapper); - } - - @Inject - public void setUrlHelper(UrlHelper urlHelper) { - servletRenderer.setUrlHelper(urlHelper); - } - - @Inject - public void setQueryStringParser(QueryStringParser queryStringParser) { - this.servletRenderer.setQueryStringParser(queryStringParser); - } - - /** - * {@inheritDoc} - */ - public void renderUrl(Writer writer, UrlProvider urlComponent) { - if (PortletActionContext.getPortletContext() == null) { - servletRenderer.renderUrl(writer, urlComponent); - return; - } - String result; - if (isPortletModeChange(urlComponent, PortletActionContext.getRequest().getPortletMode()) - && StringUtils.isEmpty(urlComponent.getNamespace())) { - String mode = urlComponent.getPortletMode(); - PortletMode portletMode = new PortletMode(mode); - String action = urlComponent.getAction(); - if (StringUtils.isEmpty(action)) { - action = PortletActionContext.getModeActionMap().get(portletMode).getName(); - } - String modeNamespace = PortletActionContext.getModeNamespaceMap().get(portletMode); - result = portletUrlHelper.buildUrl(action, modeNamespace, urlComponent.getMethod(), - urlComponent.getParameters(), urlComponent.getPortletUrlType(), mode, urlComponent.getWindowState()); - - } else { - String namespace = urlComponent.determineNamespace(urlComponent.getNamespace(), urlComponent.getStack(), urlComponent.getHttpServletRequest()); - urlComponent.setNamespace(namespace); - if (onlyActionSpecified(urlComponent)) { - if (StringUtils.isNotEmpty(urlComponent.getAction())) { - String action = urlComponent.findString(urlComponent.getAction()); - result = portletUrlHelper.buildUrl(action, urlComponent.getNamespace(), urlComponent.getMethod(), - urlComponent.getParameters(), urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState()); - } else { - 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()); - } 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); - } - } - } - - boolean isPortletModeChange(UrlProvider urlComponent, PortletMode currentMode) { - if (StringUtils.isNotEmpty(urlComponent.getPortletMode())) { - PortletMode newPortletMode = new PortletMode(urlComponent.getPortletMode()); - return !(newPortletMode.equals(currentMode)); - } - return false; - } - - private String createDefaultUrl(UrlProvider urlComponent) { - ActionInvocation ai = urlComponent.getStack().getActionContext().getActionInvocation(); - String action = ai.getProxy().getActionName(); - return portletUrlHelper.buildUrl(action, urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(), - urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState()); - } - - 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); - return; - } - String namespace = formComponent.determineNamespace(formComponent.namespace, formComponent.getStack(), - formComponent.request); - String action; - if (formComponent.action != null) { - action = formComponent.findString(formComponent.action); - } else { - ActionInvocation ai = formComponent.getStack().getActionContext().getActionInvocation(); - 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); - } - String escapedId = formComponent.escape(id); - formComponent.addParameter("id", escapedId); - formComponent.addParameter("escapedId", escapedId); - } - } - } - - public void beforeRenderUrl(UrlProvider urlComponent) { - if (PortletActionContext.getPortletContext() == null) { - servletRenderer.beforeRenderUrl(urlComponent); - } - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java deleted file mode 100644 index 701deb004..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * 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 javax.portlet.PortletContext; -import java.io.Serializable; -import java.util.AbstractMap; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * 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 final PortletContext context; - private Set> 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. - */ - @Override - 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. - */ - @Override - public Set> entrySet() { - if (entries == null) { - entries = new HashSet>(); - - // 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 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 String getKey() { - return key; - } - - public Object getValue() { - return value; - } - - public Object setValue(Object obj) { - context.setAttribute(key, 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 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 String getKey() { - return key; - } - - public Object getValue() { - return value; - } - - public Object setValue(Object obj) { - context.setAttribute(key, obj); - - return value; - } - }); - } - } - - return entries; - } - - /** - * Returns the portlet context attribute or init parameter based on the - * given key. If the entry is not found, null is returned. - * - * @param key - * the entry key. - * @return the portlet context attribute or init parameter or null - * if the entry is not found. - */ - @Override - public Object get(Object key) { - if (key == null) { - return null; - } - // Try context attributes first, then init params - // This gives the proper shadowing effects - Object value = context.getAttribute(key.toString()); - - return (value == null) ? context.getInitParameter(key.toString()) : 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. - */ - @Override - public Object put(String key, Object value) { - entries = null; - context.setAttribute(key, 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(String key) { - entries = null; - - Object value = get(key); - context.removeAttribute(key); - - return value; - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletConstants.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletConstants.java deleted file mode 100644 index a3e08def8..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletConstants.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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; - -public class PortletConstants { - /** - * Default action name to use when no default action has been configured in the portlet - * init parameters. - */ - public static String DEFAULT_ACTION_NAME = "default"; - - /** - * Action name parameter name - */ - public static String ACTION_PARAM = "struts.portlet.action"; - - /** - * Key for parameter holding the last executed portlet mode. - */ - public static String MODE_PARAM = "struts.portlet.mode"; - - /** - * Key used for looking up and storing the portlet phase - */ - public static String PHASE = "struts.portlet.phase"; - - /** - * Key used for looking up and storing the - * {@link javax.portlet.PortletRequest} - */ - public static String REQUEST = "struts.portlet.request"; - - /** - * Key used for looking up and storing the - * {@link javax.portlet.PortletResponse} - */ - public static String RESPONSE = "struts.portlet.response"; - - /** - * Key used for looking up and storing the action that was invoked in the action or event phase. - */ - public static String EVENT_ACTION = "struts.portlet.eventAction"; - - /** - * Key used for looking up and storing the - * {@link javax.portlet.PortletConfig} - */ - public static String PORTLET_CONFIG = "struts.portlet.config"; - - /** - * Name of the action used as error handler - */ - public static String ERROR_ACTION = "errorHandler"; - - /** - * Key for the portlet namespace stored in the - * {@link org.apache.struts2.portlet.context.PortletActionContext}. - */ - public static String PORTLET_NAMESPACE = "struts.portlet.portletNamespace"; - - /** - * Key for the mode-to-namespace map stored in the - * {@link org.apache.struts2.portlet.context.PortletActionContext}. - */ - public static String MODE_NAMESPACE_MAP = "struts.portlet.modeNamespaceMap"; - - /** - * Key for the mode-to-default-action map stored in the - * {@link org.apache.struts2.portlet.context.PortletActionContext}. - */ - public static String DEFAULT_ACTION_MAP = "struts.portlet.modeActionMap"; - - /** - * Key for the default action name for the portlet, stored in the - * {@link org.apache.struts2.portlet.context.PortletActionContext}. - */ - public static String DEFAULT_ACTION_FOR_MODE = "struts.portlet.defaultActionForMode"; - - /** - * Key for request attribute indicating if the action has been reset. - */ - public static String ACTION_RESET = "struts.portlet.actionReset"; - - /** - * Key for session attribute indicating the location of the render direct action. - */ - public static String RENDER_DIRECT_LOCATION = "struts.portlet.renderDirectLocation"; - - /** - * Namespace use for executing the renderDirect action. Necessary to get the namespaces on s:urls correct. - */ - public static String RENDER_DIRECT_NAMESPACE = "struts.portlet.renderDirectNamespace"; - - /** - * Key for the dispatch instruction for the {@link DispatcherServlet} - */ - public static String DISPATCH_TO = "struts.portlet.dispatchTo"; - - /** - * Session key where the value stack from the event phase is stored. - */ - public static String STACK_FROM_EVENT_PHASE = "struts.portlet.valueStackFromEventPhase"; - - /** - * Default name of dispatcher servlet in web.xml - */ - public static String DEFAULT_DISPATCHER_SERVLET_NAME = "Struts2PortletDispatcherServlet"; - - /** - * Key for the action mapping in the context - */ - public static String ACTION_MAPPING = ServletActionContext.ACTION_MAPPING; - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletPhase.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletPhase.java deleted file mode 100644 index a130cd358..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletPhase.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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; - -/** - * Defines phases of portlet processing per the portlet specification. - */ -public enum PortletPhase { - - /** - * Constant used for the render phase ( - * {@link javax.portlet.Portlet#render(javax.portlet.RenderRequest, javax.portlet.RenderResponse)}) - */ - RENDER_PHASE, - - /** - * Constant used for the action phase ( - * {@link javax.portlet.Portlet#processAction(javax.portlet.ActionRequest, javax.portlet.ActionResponse)}) - */ - ACTION_PHASE, - - /** - * Constant used for the event phase - */ - EVENT_PHASE, - - /** - * Constant used for the serve resource phase that was added with the 2.0 portlet specification. - */ - SERVE_RESOURCE_PHASE; - - public boolean isRender() { - return this.equals(RENDER_PHASE); - } - - public boolean isAction() { - return this.equals(ACTION_PHASE); - } - - public boolean isEvent() { - return this.equals(EVENT_PHASE); - } - - public boolean isResource() { - return this.equals(SERVE_RESOURCE_PHASE); - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java deleted file mode 100644 index cf4d727db..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * 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 javax.portlet.PortletRequest; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Set; - -/** - * A simple implementation of the {@link java.util.Map} interface to handle a collection of request attributes. - * - */ -public class PortletRequestMap extends AbstractMap { - - private Set> 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(); - ArrayList keyStrings = new ArrayList<>(); - // Depending on the underlying collection, a ConcurrentModificationException may occur if we attempt - // to remove attributes while iterating over the keys Enumeration. Instead use an interim collection to - // gather all the keys and then remove them. - while (keys.hasMoreElements()) { - keyStrings.add((String) keys.nextElement()); - } - for (String key : keyStrings){ - 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>(); - - Enumeration enumeration = request.getAttributeNames(); - - while (enumeration.hasMoreElements()) { - final String key = enumeration.nextElement(); - 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 String 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 - * null if it doesn't exist. - * - * @param key the name of the request attribute. - * @return the request attribute or null if it doesn't exist. - */ - public Object get(Object key) { - if (key == null) { - return null; - } - 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(String key, Object value) { - entries = null; - request.setAttribute(key, 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 null 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; - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java deleted file mode 100644 index 600079a9e..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * 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 javax.portlet.PortletRequest; -import javax.portlet.PortletSession; -import java.util.AbstractMap; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * 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 final PortletSession session; - private Set> 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>(); - - Enumeration enumeration = session.getAttributeNames(); - - while (enumeration.hasMoreElements()) { - final String key = enumeration.nextElement().toString(); - final Object value = session.getAttribute(key); - entries.add(new 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 String 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 - * null if it doesn't exist. - * - * @param key the name of the session attribute. - * @return the session attribute or null if it doesn't exist. - */ - public Object get(Object key) { - synchronized (session) { - return session.getAttribute(key != null ? key.toString() : null); - } - } - - /** - * 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(String key, Object value) { - synchronized (session) { - entries = null; - session.setAttribute(key, 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 null 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; - } - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletContextAware.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletContextAware.java deleted file mode 100644 index 38a9f6f62..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletContextAware.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.action; - -import javax.portlet.PortletContext; - -/** - * @since 6.0.0 - */ -public interface PortletContextAware { - - void withPortletContext(PortletContext portletContext); - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletPreferencesAware.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletPreferencesAware.java deleted file mode 100644 index 0bc1723e5..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletPreferencesAware.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.action; - -import javax.portlet.PortletPreferences; - - -/** - * All Actions that want to have access to the portlet preferences should - * implement this interface. If running in a servlet environment, an - * appropriate testing implementation will be provided. - * - * @since 6.0.0 - */ -public interface PortletPreferencesAware { - - /** - * Sets the HTTP request object in implementing classes. - * - * @param preferences the portlet preferences. - */ - void withPortletPreferences(PortletPreferences preferences); -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletRequestAware.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletRequestAware.java deleted file mode 100644 index 53eb3bc1b..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletRequestAware.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.action; - -import javax.portlet.PortletRequest; - -/** - * @since 6.0.0 - */ -public interface PortletRequestAware { - - void withPortletRequest(PortletRequest request); - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletResponseAware.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletResponseAware.java deleted file mode 100644 index 1a30072fb..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletResponseAware.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.action; - -import javax.portlet.PortletResponse; - -/** - * @since 6.0.0 - */ -public interface PortletResponseAware { - - void withPortletResponse(PortletResponse response); - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java deleted file mode 100644 index 89826190b..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * 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 com.opensymphony.xwork2.ActionContext; -import org.apache.struts2.StrutsStatics; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; - -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; -import javax.portlet.PortletConfig; -import javax.portlet.PortletContext; -import javax.portlet.PortletMode; -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import javax.portlet.ResourceResponse; -import java.util.Map; - -import static org.apache.struts2.portlet.PortletConstants.DEFAULT_ACTION_FOR_MODE; -import static org.apache.struts2.portlet.PortletConstants.MODE_NAMESPACE_MAP; -import static org.apache.struts2.portlet.PortletConstants.PHASE; -import static org.apache.struts2.portlet.PortletConstants.PORTLET_CONFIG; -import static org.apache.struts2.portlet.PortletConstants.PORTLET_NAMESPACE; -import static org.apache.struts2.portlet.PortletConstants.REQUEST; -import static org.apache.struts2.portlet.PortletConstants.RESPONSE; - -/** - * PortletActionContext. ActionContext thread local for the portlet environment. - * - * @version $Revision: 564279 $ $Date: 2007-08-09 19:00:49 +0200 (Thu, 09 Aug 2007) $ - */ -public class PortletActionContext { - - /** - * 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 (!getPhase().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 (!getPhase().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 (!getPhase().isAction()) { - 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 (!getPhase().isAction()) { - throw new IllegalStateException("ActionResponse cannot be obtained in render phase"); - } - return (ActionResponse) getContext().get(RESPONSE); - } - - /** - * Get the ResourceResponse. Can only be invoked in the resource phase. - * - * @return The current ResourceResponse. - * @throws IllegalStateException If the method is invoked in the wrong phase. - */ - public static ResourceResponse getResourceResponse() { - if (!getPhase().isResource()) { - throw new IllegalStateException("ResourceResponse cannot be obtained in event phase"); - } - return (ResourceResponse) 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 portlet.xml and struts.xml - */ - 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); - } - - /** - * Get the current PortletResponse - * - * @return The current PortletResponse. - */ - public static PortletResponse getResponse() { - return (PortletResponse) getContext().get(RESPONSE); - } - - /** - * Get the phase that the portlet is executing in. - * - * @return {@link PortletPhase#RENDER_PHASE} in render phase, and - * {@link PortletPhase#ACTION_PHASE} in the event phase. - */ - public static PortletPhase getPhase() { - return (PortletPhase) getContext().get(PHASE); - } - - /** - * @return The current ActionContext. - */ - private static ActionContext getContext() { - return ActionContext.getContext(); - } - - /** - * Check to see if the current request is a portlet request. - * - * @return true 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. - */ - @SuppressWarnings("unchecked") - public static Map getModeNamespaceMap() { - return (Map) getContext().get(MODE_NAMESPACE_MAP); - } - - /** - * Get the mode to default action mappings. - * - * @return The map of default action mapping for each mode - */ - @SuppressWarnings("unchecked") - public static Map getModeActionMap() { - return (Map) getContext().get(PortletConstants.DEFAULT_ACTION_MAP); - } - - /** - * Get the portlet context. - * - * @return The portlet context. - */ - public static PortletContext getPortletContext() { - return (PortletContext) getContext().get(StrutsStatics.STRUTS_PORTLET_CONTEXT); - } - - /** - * Whether JSR286 features are supported. - * - * @return true if {@link javax.portlet.PortletContext#getMajorVersion()} returns a value greater than 1 - */ - public static boolean isJSR268Supported() { - PortletContext ctx = getPortletContext(); - if (ctx == null) { - return false; // fallback to old behaviour, check WW-3763 - } - return ctx.getMajorVersion() > 1; - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java deleted file mode 100644 index 628404fb0..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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 org.apache.struts2.action.SessionAware; -import org.apache.struts2.portlet.PortletConstants; - -import java.io.Serializable; -import java.util.Map; - -/** - *

- * When a portlet is targetted for an event, the portlet will receive two - * portlet requests, one for the event phase, and then followed by a render - * operation. When in the event 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. - *

- * - *

- * 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, 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; - } - - @Override - public void withSession(Map session) { - location = (String)session.get(PortletConstants.RENDER_DIRECT_LOCATION); - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/DispatcherServlet.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/DispatcherServlet.java deleted file mode 100644 index 94127a192..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/DispatcherServlet.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.lang3.StringUtils; -import org.apache.struts2.dispatcher.StrutsRequestWrapper; -import org.apache.struts2.portlet.PortletConstants; - -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import java.io.IOException; - -public class DispatcherServlet extends HttpServlet { - - private static final long serialVersionUID = -266147033645951967L; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String dispatchTo = (String) request.getAttribute(PortletConstants.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; - } - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java deleted file mode 100644 index d728e3e35..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java +++ /dev/null @@ -1,674 +0,0 @@ -/* - * 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.ActionContext; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.ActionProxyFactory; -import com.opensymphony.xwork2.config.ConfigurationException; -import com.opensymphony.xwork2.inject.Container; -import org.apache.commons.lang3.LocaleUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.message.ParameterizedMessage; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.StrutsException; -import org.apache.struts2.StrutsStatics; -import org.apache.struts2.dispatcher.ApplicationMap; -import org.apache.struts2.dispatcher.Dispatcher; -import org.apache.struts2.dispatcher.DispatcherConstants; -import org.apache.struts2.dispatcher.HttpParameters; -import org.apache.struts2.dispatcher.RequestMap; -import org.apache.struts2.dispatcher.SessionMap; -import org.apache.struts2.dispatcher.mapper.ActionMapper; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; -import org.apache.struts2.portlet.PortletApplicationMap; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; -import org.apache.struts2.portlet.PortletRequestMap; -import org.apache.struts2.portlet.PortletSessionMap; -import org.apache.struts2.portlet.context.PortletActionContext; -import org.apache.struts2.portlet.servlet.PortletServletContext; -import org.apache.struts2.portlet.servlet.PortletServletRequest; -import org.apache.struts2.portlet.servlet.PortletServletResponse; -import org.apache.struts2.dispatcher.AttributeMap; - -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; -import javax.portlet.GenericPortlet; -import javax.portlet.PortletConfig; -import javax.portlet.PortletException; -import javax.portlet.PortletMode; -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import javax.portlet.WindowState; -import jakarta.servlet.ServletContext; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -import static org.apache.struts2.portlet.PortletConstants.ACTION_PARAM; -import static org.apache.struts2.portlet.PortletConstants.ACTION_RESET; -import static org.apache.struts2.portlet.PortletConstants.DEFAULT_ACTION_FOR_MODE; -import static org.apache.struts2.portlet.PortletConstants.DEFAULT_ACTION_NAME; -import static org.apache.struts2.portlet.PortletConstants.MODE_NAMESPACE_MAP; -import static org.apache.struts2.portlet.PortletConstants.MODE_PARAM; -import static org.apache.struts2.portlet.PortletConstants.PORTLET_CONFIG; -import static org.apache.struts2.portlet.PortletConstants.PORTLET_NAMESPACE; -import static org.apache.struts2.portlet.PortletConstants.REQUEST; -import static org.apache.struts2.portlet.PortletConstants.RESPONSE; - -/** - * - *

- * Struts JSR-168 portlet dispatcher. Similar to the WW2 Servlet dispatcher, - * but adjusted to a portal environment. The portlet is configured through the portlet.xml - * descriptor. Examples and descriptions follow below: - *

- * - * - * @author Nils-Helge Garli - * @author Rainer Hermanns - * - *

Init parameters

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
NameDescriptionDefault value
portletNamespaceThe namespace for the portlet in the xwork configuration. This - * namespace is prepended to all action lookups, and makes it possible to host multiple - * portlets in the same portlet application. If this parameter is set, the complete namespace - * will be /portletNamespace/modeNamespace/actionNameThe default namespace
viewNamespaceBase namespace in the xwork configuration for the view portlet - * modeThe default namespace
editNamespaceBase namespace in the xwork configuration for the edit portlet - * modeThe default namespace
helpNamespaceBase namespace in the xwork configuration for the help portlet - * modeThe default namespace
defaultViewActionDefault action to invoke in the view portlet mode if no action is - * specifieddefault
defaultEditActionDefault action to invoke in the edit portlet mode if no action is - * specifieddefault
defaultHelpActionDefault action to invoke in the help portlet mode if no action is - * specifieddefault
- * - *

Example:

- *
- * 
- *
- * <init-param>
- *     <!-- The view mode namespace. Maps to a namespace in the xwork config file -->
- *     <name>viewNamespace</name>
- *     <value>/view</value>
- * </init-param>
- * <init-param>
- *    <!-- The default action to invoke in view mode -->
- *    <name>defaultViewAction</name>
- *    <value>index</value>
- * </init-param>
- * <init-param>
- *     <!-- The view mode namespace. Maps to a namespace in the xwork config file -->
- *     <name>editNamespace</name>
- *     <value>/edit</value>
- * </init-param>
- * <init-param>
- *     <!-- The default action to invoke in view mode -->
- *     <name>defaultEditAction</name>
- *     <value>index</value>
- * </init-param>
- * <init-param>
- *     <!-- The view mode namespace. Maps to a namespace in the xwork config file -->
- *     <name>helpNamespace</name>
- *     <value>/help</value>
- * </init-param>
- * <init-param>
- *     <!-- The default action to invoke in view mode -->
- *     <name>defaultHelpAction</name>
- *     <value>index</value>
- * </init-param>
- *
- * 
- * 
- */ -public class Jsr168Dispatcher extends GenericPortlet implements StrutsStatics { - - private static final Logger LOG = LogManager.getLogger(Jsr168Dispatcher.class); - - protected String portletNamespace = null; - - private ActionProxyFactory factory = null; - private Map modeMap = new HashMap(3); - private Map actionMap = new HashMap(3); - private Dispatcher dispatcherUtils; - private ActionMapper actionMapper; - private Container container; - private ServletContext servletContext; - - /** - * Initialize the portlet with the init parameters from portlet.xml - * - * @param cfg portlet configuration - * @throws PortletException in case of errors - */ - public void init(PortletConfig cfg) throws PortletException { - super.init(cfg); - LOG.debug("Initializing portlet {}", getPortletName()); - - Map params = new HashMap(); - for (Enumeration e = cfg.getInitParameterNames(); e.hasMoreElements(); ) { - String name = (String) e.nextElement(); - String value = cfg.getInitParameter(name); - params.put(name, value); - } - - servletContext = new PortletServletContext(cfg.getPortletContext()); - dispatcherUtils = new Dispatcher(servletContext, params); - dispatcherUtils.init(); - - // For testability - if (factory == null) { - factory = dispatcherUtils.getContainer().getInstance(ActionProxyFactory.class); - } - portletNamespace = cfg.getInitParameter("portletNamespace"); - LOG.debug("PortletNamespace: {}", portletNamespace); - - parseModeConfig(actionMap, cfg, PortletMode.VIEW, "viewNamespace", - "defaultViewAction"); - parseModeConfig(actionMap, cfg, PortletMode.EDIT, "editNamespace", - "defaultEditAction"); - parseModeConfig(actionMap, cfg, PortletMode.HELP, "helpNamespace", - "defaultHelpAction"); - parseModeConfig(actionMap, cfg, new PortletMode("config"), "configNamespace", - "defaultConfigAction"); - parseModeConfig(actionMap, cfg, new PortletMode("about"), "aboutNamespace", - "defaultAboutAction"); - parseModeConfig(actionMap, cfg, new PortletMode("print"), "printNamespace", - "defaultPrintAction"); - parseModeConfig(actionMap, cfg, new PortletMode("preview"), "previewNamespace", - "defaultPreviewAction"); - parseModeConfig(actionMap, cfg, new PortletMode("edit_defaults"), - "editDefaultsNamespace", "defaultEditDefaultsAction"); - if (StringUtils.isEmpty(portletNamespace)) { - portletNamespace = ""; - } - - container = dispatcherUtils.getContainer(); - actionMapper = container.getInstance(ActionMapper.class); - } - - /** - * Parse the mode to namespace mappings configured in portlet.xml - * - * @param actionMap The map with mode <-> default action mapping. - * @param portletConfig The PortletConfig. - * @param portletMode The PortletMode. - * @param nameSpaceParam Name of the init parameter where the namespace for the mode - * is configured. - * @param defaultActionParam Name of the init parameter where the default action to - * execute for the mode is configured. - */ - void parseModeConfig(Map actionMap, PortletConfig portletConfig, - PortletMode portletMode, String nameSpaceParam, - String defaultActionParam) { - String namespace = portletConfig.getInitParameter(nameSpaceParam); - if (StringUtils.isEmpty(namespace)) { - namespace = ""; - } - modeMap.put(portletMode, namespace); - String defaultAction = portletConfig.getInitParameter(defaultActionParam); - String method = null; - if (StringUtils.isEmpty(defaultAction)) { - defaultAction = DEFAULT_ACTION_NAME; - } - if (defaultAction.indexOf('!') >= 0) { - method = defaultAction.substring(defaultAction.indexOf('!') + 1); - defaultAction = defaultAction.substring(0, defaultAction.indexOf('!')); - } - StringBuilder fullPath = new StringBuilder(); - if (StringUtils.isNotEmpty(portletNamespace)) { - fullPath.append(portletNamespace); - } - if (StringUtils.isNotEmpty(namespace)) { - fullPath.append(namespace).append("/"); - } else { - fullPath.append("/"); - } - fullPath.append(defaultAction); - ActionMapping mapping = new ActionMapping(); - mapping.setName(getActionName(fullPath.toString())); - mapping.setNamespace(getNamespace(fullPath.toString())); - if (method != null) { - mapping.setMethod(method); - } - actionMap.put(portletMode, mapping); - } - - /** - * Service an action from the event phase. - * - * @param request action request - * @param response action response - * @throws PortletException in case of errors - * @throws IOException in case of IO errors - * @see javax.portlet.Portlet#processAction(javax.portlet.ActionRequest, - * javax.portlet.ActionResponse) - */ - public void processAction(ActionRequest request, ActionResponse response) - throws PortletException, IOException { - if (LOG.isDebugEnabled()) { - LOG.debug("Entering processAction in mode ", request.getPortletMode().toString()); - } - resetActionContext(); - try { - serviceAction(request, response, getRequestMap(request), getParameterMap(request), - getSessionMap(request), getApplicationMap(), - portletNamespace, PortletPhase.ACTION_PHASE); - if (LOG.isDebugEnabled()) LOG.debug("Leaving processAction"); - } finally { - ActionContext.clear(); - } - } - - /** - * Service an action from the render phase. - * - * @param request render request - * @param response render response - * @throws PortletException in case of errors - * @throws IOException in case of IO errors - * @see javax.portlet.Portlet#render(javax.portlet.RenderRequest, - * javax.portlet.RenderResponse) - */ - public void render(RenderRequest request, RenderResponse response) - throws PortletException, IOException { - - if (LOG.isDebugEnabled()) { - LOG.debug("Entering render in mode ", request.getPortletMode().toString()); - } - resetActionContext(); - response.setTitle(getTitle(request)); - if (!request.getWindowState().equals(WindowState.MINIMIZED)) { - try { - // Check to see if an event set the render to be included directly - serviceAction(request, response, getRequestMap(request), getParameterMap(request), - getSessionMap(request), getApplicationMap(), - portletNamespace, PortletPhase.RENDER_PHASE); - if (LOG.isDebugEnabled()) LOG.debug("Leaving render"); - } finally { - resetActionContext(); - } - } - } - - /** - * Reset the action context. - */ - void resetActionContext() { - ActionContext.clear(); - } - - /** - * Merges all application and portlet attributes into a single - * HashMap to represent the entire Action context. - * - * @param requestMap a Map of all request attributes. - * @param parameterMap a Map of all request parameters. - * @param sessionMap a Map of all session attributes. - * @param applicationMap a Map of all servlet context attributes. - * @param request the PortletRequest object. - * @param response the PortletResponse object. - * @param servletRequest the HttpServletRequest object. - * @param servletResponse the HttpServletResponse object. - * @param servletContext the ServletContext object. - * @param portletConfig the PortletConfig object. - * @param phase The portlet phase (render or action, see - * {@link PortletConstants}) - * @return a HashMap representing the Action context. - * @throws IOException in case of IO errors - */ - public Map createContextMap(Map requestMap, Map parameterMap, - Map sessionMap, Map applicationMap, - PortletRequest request, PortletResponse response, HttpServletRequest servletRequest, - HttpServletResponse servletResponse, ServletContext servletContext, - PortletConfig portletConfig, PortletPhase phase) throws IOException { - - // TODO Must put http request/response objects into map for use with - container.inject(servletRequest); - - // ServletActionContext - Map extraContext = ActionContext.of(new HashMap<>()) - .withServletRequest(servletRequest) - .withServletResponse(servletResponse) - .withServletContext(servletContext) - .withParameters(HttpParameters.create(parameterMap).build()) - .withSession(sessionMap) - .withApplication(applicationMap) - .withLocale(getLocale(request)) - .with(StrutsStatics.STRUTS_PORTLET_CONTEXT, getPortletContext()) - .with(REQUEST, request) - .with(RESPONSE, response) - .with(PORTLET_CONFIG, portletConfig) - .with(PORTLET_NAMESPACE, portletNamespace) - .with(DEFAULT_ACTION_FOR_MODE, actionMap.get(request.getPortletMode())) - // helpers to get access to request/session/application scope - .with(DispatcherConstants.REQUEST, requestMap) - .with(DispatcherConstants.SESSION, sessionMap) - .with(DispatcherConstants.APPLICATION, applicationMap) - .with(DispatcherConstants.PARAMETERS, parameterMap) - .with(MODE_NAMESPACE_MAP, modeMap) - .with(PortletConstants.DEFAULT_ACTION_MAP, actionMap) - .with(PortletConstants.PHASE, phase) - .getContextMap(); - - AttributeMap attrMap = new AttributeMap(extraContext); - extraContext.put("attr", attrMap); - - return extraContext; - } - - protected Locale getLocale(PortletRequest request) { - String defaultLocale = container.getInstance(String.class, StrutsConstants.STRUTS_LOCALE); - Locale locale; - if (defaultLocale != null) { - try { - locale = LocaleUtils.toLocale(defaultLocale); - } catch (IllegalArgumentException e) { - LOG.warn(new ParameterizedMessage("Cannot convert 'struts.locale' = [{}] to proper locale, defaulting to request locale [{}]", - defaultLocale, request.getLocale()), e); - locale = request.getLocale(); - } - } else { - locale = request.getLocale(); - } - return locale; - } - - /** - * Loads the action and executes it. This method first creates the action - * context from the given parameters then loads an ActionProxy - * from the given action name and namespace. After that, the action is - * executed and output channels throught the response object. - * - * @param request the HttpServletRequest object. - * @param response the HttpServletResponse object. - * @param requestMap a Map of request attributes. - * @param parameterMap a Map of request parameters. - * @param sessionMap a Map of all session attributes. - * @param applicationMap a Map of all application attributes. - * @param portletNamespace the namespace or context of the action. - * @param phase The portlet phase (render or action, see {@link PortletConstants}) - * @throws PortletException in case of errors - */ - public void serviceAction(PortletRequest request, PortletResponse response, Map requestMap, Map parameterMap, - Map sessionMap, Map applicationMap, String portletNamespace, - PortletPhase phase) throws PortletException { - if (LOG.isDebugEnabled()) LOG.debug("serviceAction"); - Dispatcher.setInstance(dispatcherUtils); - String actionName = null; - String namespace; - try { - HttpServletRequest servletRequest = new PortletServletRequest(request, getPortletContext()); - HttpServletResponse servletResponse = createPortletServletResponse(response); - if (phase.isAction()) { - servletRequest = dispatcherUtils.wrapRequest(servletRequest); - if (servletRequest instanceof MultiPartRequestWrapper) { - // Multipart request. Request parameters are encoded in the multipart data, - // so we need to manually add them to the parameter map. - parameterMap.putAll(servletRequest.getParameterMap()); - } - } - container.inject(servletRequest); - ActionMapping mapping = getActionMapping(request, servletRequest); - actionName = mapping.getName(); - if ("renderDirect".equals(actionName)) { - namespace = request.getParameter(PortletConstants.RENDER_DIRECT_NAMESPACE); - } else { - namespace = mapping.getNamespace(); - } - Map extraContext = createContextMap(requestMap, parameterMap, - sessionMap, applicationMap, request, response, servletRequest, servletResponse, - servletContext, getPortletConfig(), phase); - extraContext.put(PortletConstants.ACTION_MAPPING, mapping); - if (LOG.isDebugEnabled()) { - LOG.debug("Creating action proxy for name = " + actionName + ", namespace = " + namespace); - } - ActionProxy proxy = factory.createActionProxy(namespace, actionName, mapping.getMethod(), extraContext); - request.setAttribute("struts.valueStack", proxy.getInvocation().getStack()); - proxy.execute(); - } catch (ConfigurationException e) { - if (LOG.isErrorEnabled()) { - LOG.error("Could not find action", e); - } - throw new PortletException("Could not find action " + actionName, e); - } catch (Exception e) { - if (LOG.isErrorEnabled()) { - LOG.error("Could not execute action", e); - } - throw new PortletException("Error executing action " + actionName, e); - } finally { - Dispatcher.setInstance(null); - } - } - - /** - * Returns a Map of all application attributes. Copies all attributes from - * the {@link PortletActionContext}into an {@link ApplicationMap}. - * - * @return a Map of all application attributes. - */ - protected Map getApplicationMap() { - return new PortletApplicationMap(getPortletContext()); - } - - /** - * Gets the namespace of the action from the request. The namespace is the - * same as the portlet mode. E.g, view mode is mapped to namespace - * view, and edit mode is mapped to the namespace - * edit - * - * @param portletRequest the PortletRequest object. - * @param servletRequest the ServletRequest to use - * @return the namespace of the action. - */ - protected ActionMapping getActionMapping(final PortletRequest portletRequest, final HttpServletRequest servletRequest) { - ActionMapping mapping; - String actionPath = getDefaultActionPath(portletRequest); - if (resetAction(portletRequest)) { - mapping = actionMap.get(portletRequest.getPortletMode()); - } else { - actionPath = servletRequest.getParameter(ACTION_PARAM); - if (StringUtils.isEmpty(actionPath)) { - mapping = actionMap.get(portletRequest.getPortletMode()); - } else { - - // Use the usual action mapper, but it is expecting an action extension - // on the uri, so we add the default one, which should be ok as the - // portlet is a portlet first, a servlet second - mapping = actionMapper.getMapping(servletRequest, dispatcherUtils.getConfigurationManager()); - } - } - - if (mapping == null) { - throw new StrutsException("Unable to locate action mapping for request, probably due to an invalid action path: " + actionPath); - } - return mapping; - } - - protected String getDefaultActionPath(PortletRequest portletRequest) { - return null; - } - - /** - * Get the namespace part of the action path. - * - * @param actionPath Full path to action - * @return The namespace part. - */ - String getNamespace(String actionPath) { - int idx = actionPath.lastIndexOf('/'); - String namespace = ""; - if (idx >= 0) { - namespace = actionPath.substring(0, idx); - } - return namespace; - } - - /** - * Get the action name part of the action path. - * - * @param actionPath Full path to action - * @return The action name. - */ - String getActionName(String actionPath) { - int idx = actionPath.lastIndexOf('/'); - String action = actionPath; - if (idx >= 0) { - action = actionPath.substring(idx + 1); - } - return action; - } - - /** - * Returns a Map of all request parameters. This implementation just calls - * {@link PortletRequest#getParameterMap()}. - * - * @param request the PortletRequest object. - * @return a Map of all request parameters. - * @throws IOException if an exception occurs while retrieving the parameter - * map. - */ - protected Map getParameterMap(PortletRequest request) throws IOException { - return new HashMap(request.getParameterMap()); - } - - /** - * Returns a Map of all request attributes. The default implementation is to - * wrap the request in a {@link RequestMap}. Override this method to - * customize how request attributes are mapped. - * - * @param request the PortletRequest object. - * @return a Map of all request attributes. - */ - protected Map getRequestMap(PortletRequest request) { - return new PortletRequestMap(request); - } - - /** - * Returns a Map of all session attributes. The default implementation is to - * wrap the reqeust in a {@link SessionMap}. Override this method to - * customize how session attributes are mapped. - * - * @param request the PortletRequest object. - * @return a Map of all session attributes. - */ - protected Map getSessionMap(PortletRequest request) { - return new PortletSessionMap(request); - } - - /** - * Convenience method to ease testing. - * - * @param factory action proxy factory - */ - protected void setActionProxyFactory(ActionProxyFactory factory) { - this.factory = factory; - } - - /** - * Check to see if the action parameter is valid for the current portlet mode. If the portlet - * mode has been changed with the portal widgets, the action name is invalid, since the - * action name belongs to the previous executing portlet mode. If this method evaluates to - * true the default<Mode>Action is used instead. - * - * @param request The portlet request. - * @return true if the action should be reset. - */ - private boolean resetAction(PortletRequest request) { - boolean reset = false; - Map paramMap = request.getParameterMap(); - String[] modeParam = (String[]) paramMap.get(MODE_PARAM); - if (modeParam != null && modeParam.length == 1) { - String originatingMode = modeParam[0]; - String currentMode = request.getPortletMode().toString(); - if (!currentMode.equals(originatingMode)) { - reset = true; - } - } - if (reset) { - request.setAttribute(ACTION_RESET, Boolean.TRUE); - } else { - request.setAttribute(ACTION_RESET, Boolean.FALSE); - } - return reset; - } - - public void destroy() { - if (dispatcherUtils != null) { - dispatcherUtils.cleanup(); - } else { - if (LOG.isWarnEnabled()) { - LOG.warn("Something is seriously wrong, DispatcherUtil is not initialized (null) "); - } - } - } - - /** - * @param actionMapper the actionMapper to set - */ - public void setActionMapper(ActionMapper actionMapper) { - 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); - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java deleted file mode 100644 index cd39b7f62..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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.ActionContext; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; -import org.apache.struts2.portlet.PortletPhase; -import org.apache.struts2.portlet.servlet.PortletServletResponse; -import org.apache.struts2.portlet.servlet.PortletServletResponseJSR286; - -import javax.portlet.EventRequest; -import javax.portlet.EventResponse; -import javax.portlet.PortletException; -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; -import javax.portlet.ResourceRequest; -import javax.portlet.ResourceResponse; -import java.io.IOException; - -public class Jsr286Dispatcher extends Jsr168Dispatcher { - - private final static Logger LOG = LogManager.getLogger(Jsr286Dispatcher.class); - - - @Override - public void processEvent(EventRequest request, EventResponse response) throws PortletException, IOException { - if (LOG.isDebugEnabled()) { - LOG.debug("Entering processEvent"); - } - resetActionContext(); - try { - // We'll use the event name as the "action" - serviceAction(request, response, - getRequestMap(request), getParameterMap(request), - getSessionMap(request), getApplicationMap(), - portletNamespace, PortletPhase.EVENT_PHASE); - if (LOG.isDebugEnabled()) LOG.debug("Leaving processEvent"); - } finally { - ActionContext.clear(); - } - } - - @Override - public void serveResource(ResourceRequest request, ResourceResponse response) - throws PortletException, IOException { - if (LOG.isDebugEnabled()) { - LOG.debug("Entering serveResource"); - } - resetActionContext(); - try { - serviceAction(request, response, - getRequestMap(request), getParameterMap(request), - getSessionMap(request), getApplicationMap(), - portletNamespace, PortletPhase.SERVE_RESOURCE_PHASE); - } finally { - ActionContext.clear(); - } - } - - @Override - protected String getDefaultActionPath(PortletRequest portletRequest) { - if (portletRequest instanceof EventRequest) { - return ((EventRequest) portletRequest).getEvent().getName(); - } - return super.getDefaultActionPath(portletRequest); - } - - @Override - protected PortletServletResponse createPortletServletResponse(PortletResponse response) { - return new PortletServletResponseJSR286(response); - } - -} 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 deleted file mode 100644 index ca41bb7f7..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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 com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.interceptor.AbstractInterceptor; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.struts2.StrutsStatics; -import org.apache.struts2.action.PrincipalAware; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.action.PortletContextAware; -import org.apache.struts2.portlet.action.PortletPreferencesAware; -import org.apache.struts2.portlet.action.PortletRequestAware; -import org.apache.struts2.portlet.action.PortletResponseAware; - -import javax.portlet.PortletContext; -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; - -public class PortletAwareInterceptor extends AbstractInterceptor implements StrutsStatics { - - private static final long serialVersionUID = 2476509721059587700L; - - private static final Logger LOG = LogManager.getLogger(PortletAwareInterceptor.class); - - /** - * Sets action properties based on the interfaces an action implements. Things like application properties, - * parameters, session attributes, etc are set based on the implementing interface. - * - * @param invocation an encapsulation of the action execution state. - * @throws Exception if an error occurs when setting action properties. - */ - public String intercept(ActionInvocation invocation) throws Exception { - final Object action = invocation.getAction(); - final ActionContext context = invocation.getInvocationContext(); - - if (action instanceof PortletRequestAware) { - PortletRequest request = (PortletRequest) context.get(PortletConstants.REQUEST); - ((PortletRequestAware) action).withPortletRequest(request); - } - - if (action instanceof PortletResponseAware) { - PortletResponse response = (PortletResponse) context.get(PortletConstants.RESPONSE); - ((PortletResponseAware) action).withPortletResponse(response); - } - - if (action instanceof PrincipalAware) { - PortletRequest request = (PortletRequest) context.get(PortletConstants.REQUEST); - ((PrincipalAware) action).withPrincipalProxy(new PortletPrincipalProxy(request)); - } - - if (action instanceof PortletContextAware) { - PortletContext portletContext = (PortletContext) context.get(StrutsStatics.STRUTS_PORTLET_CONTEXT); - ((PortletContextAware) action).withPortletContext(portletContext); - } - - if (action instanceof PortletPreferencesAware) { - PortletRequest request = (PortletRequest) context.get(PortletConstants.REQUEST); - - // Check if running in a servlet environment - if (request == null) { - LOG.warn("This portlet preferences implementation should only be used during development"); - ((PortletPreferencesAware) action).withPortletPreferences(new ServletPortletPreferences(ActionContext.getContext().getSession())); - } else { - ((PortletPreferencesAware) action).withPortletPreferences(request.getPreferences()); - } - } - - return invocation.invoke(); - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java deleted file mode 100644 index 06dd8a898..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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 org.apache.struts2.interceptor.PrincipalProxy; - -import javax.portlet.PortletRequest; -import jakarta.servlet.http.HttpServletRequest; -import java.security.Principal; - -/** - * PrincipalProxy implementation for using PortletRequest Principal related methods. - */ -public class PortletPrincipalProxy implements PrincipalProxy { - - private PortletRequest request; - - /** - * Constructs a proxy - * - * @param request The underlying request - */ - public PortletPrincipalProxy(PortletRequest request) { - this.request = request; - } - - /** - * True if the user is in the given role - * - * @param role The role - * @return True if the user is in that role - */ - public boolean isUserInRole(String role) { - return request.isUserInRole(role); - } - - /** - * Gets the user principal - * - * @return The principal - */ - public Principal getUserPrincipal() { - return request.getUserPrincipal(); - } - - /** - * Gets the user id - * - * @return The user id - */ - public String getRemoteUser() { - return request.getRemoteUser(); - } - - /** - * Is the request using https? - * - * @return True if using https - */ - public boolean isRequestSecure() { - return request.isSecure(); - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptor.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptor.java deleted file mode 100644 index e3d1db92c..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptor.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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 com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.interceptor.AbstractInterceptor; -import com.opensymphony.xwork2.util.CompoundRoot; -import com.opensymphony.xwork2.util.ValueStack; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; -import org.apache.commons.lang3.StringUtils; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; -import org.apache.struts2.portlet.dispatcher.DirectRenderFromEventAction; - -import javax.portlet.ActionResponse; -import javax.portlet.RenderRequest; -import java.util.Map; - -import static org.apache.struts2.portlet.PortletConstants.*; - -public class PortletStateInterceptor extends AbstractInterceptor { - - private final static Logger LOG = LogManager.getLogger(PortletStateInterceptor.class); - - private static final long serialVersionUID = 6138452063353911784L; - - @Override - public String intercept(ActionInvocation invocation) throws Exception { - PortletPhase phase = (PortletPhase) invocation.getInvocationContext().get(PortletConstants.PHASE); - if (phase.isRender()) { - restoreStack(invocation); - return invocation.invoke(); - } else if (phase.isAction()) { - try { - return invocation.invoke(); - } finally { - saveStack(invocation); - } - } else { - return invocation.invoke(); - } - } - - @SuppressWarnings("unchecked") - private void saveStack(ActionInvocation invocation) { - Map session = invocation.getInvocationContext().getSession(); - session.put(STACK_FROM_EVENT_PHASE, invocation.getStack()); - ActionResponse actionResponse = (ActionResponse) invocation.getInvocationContext().get(RESPONSE); - actionResponse.setRenderParameter(EVENT_ACTION, "true"); - } - - @SuppressWarnings("unchecked") - private void restoreStack(ActionInvocation invocation) { - RenderRequest request = (RenderRequest) invocation.getInvocationContext().get(REQUEST); - if (StringUtils.isNotEmpty(request.getParameter(EVENT_ACTION))) { - if(!isProperPrg(invocation)) { - if (LOG.isDebugEnabled()) LOG.debug("Restoring value stack from event phase"); - ValueStack oldStack = (ValueStack) invocation.getInvocationContext().getSession().get( - STACK_FROM_EVENT_PHASE); - if (oldStack != null) { - CompoundRoot oldRoot = oldStack.getRoot(); - ValueStack currentStack = invocation.getStack(); - CompoundRoot root = currentStack.getRoot(); - root.addAll(0, oldRoot); - if (LOG.isDebugEnabled()) LOG.debug("Restored stack"); - } - } - else { - if (LOG.isDebugEnabled()) LOG.debug("Won't restore stack from event phase since it's a proper PRG request"); - } - } - } - - private boolean isProperPrg(ActionInvocation invocation) { - return !(invocation.getAction() instanceof DirectRenderFromEventAction); - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/ServletPortletPreferences.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/ServletPortletPreferences.java deleted file mode 100644 index 53a2e848b..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/ServletPortletPreferences.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * 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 java.io.IOException; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Map; -import java.util.Vector; - -import javax.portlet.PortletPreferences; -import javax.portlet.ReadOnlyException; -import javax.portlet.ValidatorException; - -/** - * Simple portlet preferences implementation that uses a map in the Session - * as storage. - */ -public class ServletPortletPreferences implements PortletPreferences { - - private Map session; - private String PREFERENCES_KEY = "_portlet-preferences"; - - public ServletPortletPreferences(Map session) { - this.session = session; - } - - public Map getMap() { - Map map = (Map) session.get(PREFERENCES_KEY); - if (map == null) { - map = new HashMap(); - session.put(PREFERENCES_KEY, map); - } - return map; - } - - public Enumeration getNames() { - return new Vector(getMap().keySet()).elements(); - } - - public String getValue(String key, String def) { - String val = (String) getMap().get(key); - if (val == null) { - val = def; - } - return val; - } - - public String[] getValues(String key, String[] def) { - String[] val = (String[]) getMap().get(key); - if (val == null) { - val = def; - } - return val; - } - - public boolean isReadOnly(String arg0) { - return false; - } - - public void reset(String arg0) throws ReadOnlyException { - session.put(PREFERENCES_KEY, new HashMap()); - } - - public void setValue(String key, String value) throws ReadOnlyException { - getMap().put(key, value); - } - - public void setValues(String key, String[] value) throws ReadOnlyException { - getMap().put(key, value); - } - - public void store() throws IOException, ValidatorException { - - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletActionRedirectResult.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletActionRedirectResult.java deleted file mode 100644 index c970c4189..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletActionRedirectResult.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * 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.result; - -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.config.entities.ResultConfig; -import com.opensymphony.xwork2.inject.Inject; -import org.apache.struts2.dispatcher.mapper.ActionMapper; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.result.ServletActionRedirectResult; -import org.apache.struts2.url.QueryStringBuilder; - -import javax.portlet.PortletMode; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * Portlet modification of the {@link ServletActionRedirectResult}. - *

- * - *

- * This result uses the {@link ActionMapper} provided by the - * ActionMapperFactory to instruct the render phase to invoke the - * specified action and (optional) namespace. This is better than the - * {@link PortletResult} because it does not require you to encode the URL - * patterns processed by the {@link ActionMapper} in to your struts.xml - * configuration files. This means you can change your URL patterns at any point - * and your application will still work. It is strongly recommended that if you - * are redirecting to another action, you use this result rather than the - * standard redirect result. - *

- * See examples below for an example of how request parameters could be passed - * in. - *

- * - *

- * This result type takes the following parameters: - *

- * - * - *

    - * - *
  • actionName (default) - the name of the action that will be - * redirect to
  • - * - *
  • namespace - used to determine which namespace the action is in - * that we're redirecting to . If namespace is null, this defaults to the - * current namespace
  • - * - *
- *

- * - *

- * Example: - * - *

- * <!-- START SNIPPET: example -->
- *  <package name="public" extends="struts-default">
- *      <action name="login" class="...">
- *          <!-- Redirect to another namespace -->
- *          <result type="redirect-action">
- *              <param name="actionName">dashboard</param>
- *              <param name="namespace">/secure</param>
- *          </result>
- *      </action>
- *  </package>
- *
- *  <package name="secure" extends="struts-default" namespace="/secure">
- *      <-- Redirect to an action in the same namespace -->
- *      <action name="dashboard" class="...">
- *          <result>dashboard.jsp</result>
- *          <result name="error" type="redirect-action">error</result>
- *      </action>
- *
- *      <action name="error" class="...">
- *          <result>error.jsp</result>
- *      </action>
- *  </package>
- *
- *  <package name="passingRequestParameters" extends="struts-default" namespace="/passingRequestParameters">
- *     <-- Pass parameters (reportType, width and height) -->
- *     <!--
- *     The redirect-action url generated will be :
- *     /genReport/generateReport.action?reportType=pie&width=100&height=100
- *     -->
- *     <action name="gatherReportInfo" class="...">
- *        <result name="showReportResult" type="redirect-action">
- *           <param name="actionName">generateReport</param>
- *           <param name="namespace">/genReport</param>
- *           <param name="reportType">pie</param>
- *           <param name="width">100</param>
- *           <param name="height">100</param>
- *        </result>
- *     </action>
- *  </package>
- *
- *
- *  <!-- END SNIPPET: example -->
- * 
- * - * @see ActionMapper - */ -public class PortletActionRedirectResult extends PortletResult { - - private static final long serialVersionUID = -7627388936683562557L; - - /** - * The default parameter - */ - public static final String DEFAULT_PARAM = "actionName"; - - protected String actionName; - protected String namespace; - protected String method; - - private final Map requestParameters = new LinkedHashMap<>(); - - private ActionMapper actionMapper; - private QueryStringBuilder queryStringBuilder; - - public PortletActionRedirectResult() { - super(); - } - - public PortletActionRedirectResult(String actionName) { - this(null, actionName, null); - } - - public PortletActionRedirectResult(String actionName, String method) { - this(null, actionName, method); - } - - public PortletActionRedirectResult(String namespace, String actionName, String method) { - super(null); - this.namespace = namespace; - this.actionName = actionName; - this.method = method; - } - - protected List prohibitedResultParam = Arrays.asList(DEFAULT_PARAM, "namespace", "method", "encode", "parse", - "location", "prependServletContext"); - - @Inject - public void setActionMapper(ActionMapper actionMapper) { - this.actionMapper = actionMapper; - } - - @Inject - public void setQueryStringBuilder(QueryStringBuilder queryStringBuilder) { - this.queryStringBuilder = queryStringBuilder; - } - - /** - * @see com.opensymphony.xwork2.Result#execute(com.opensymphony.xwork2.ActionInvocation) - */ - public void execute(ActionInvocation invocation) throws Exception { - if (invocation == null) { - throw new IllegalArgumentException("Invocation cannot be null!"); - } - - actionName = conditionalParse(actionName, invocation); - parseLocation = false; - - String portletNamespace = (String) invocation.getInvocationContext().get(PortletConstants.PORTLET_NAMESPACE); - if (portletMode != null) { - Map namespaceMap = getNamespaceMap(invocation); - namespace = namespaceMap.get(portletMode); - } - if (namespace == null) { - namespace = invocation.getProxy().getNamespace(); - } else { - namespace = conditionalParse(namespace, invocation); - } - if (method == null) { - method = ""; - } else { - method = conditionalParse(method, invocation); - } - - String resultCode = invocation.getResultCode(); - if (resultCode != null) { - ResultConfig resultConfig = invocation.getProxy().getConfig().getResults().get(resultCode); - Map resultConfigParams = resultConfig.getParams(); - for (Map.Entry e : resultConfigParams.entrySet()) { - if (!prohibitedResultParam.contains(e.getKey())) { - requestParameters.put(e.getKey(), e.getValue() == null ? "" : conditionalParse(e.getValue(), invocation)); - } - } - } - - ActionMapping actionMapping = new ActionMapping(actionName, (portletNamespace == null ? namespace : portletNamespace + namespace), method, null); - StringBuilder tmpLocation = new StringBuilder(actionMapper.getUriFromActionMapping(actionMapping)); - queryStringBuilder.build(requestParameters, tmpLocation, "&"); - - setLocation(tmpLocation.toString()); - - super.execute(invocation); - } - - @SuppressWarnings("unchecked") - private Map getNamespaceMap(ActionInvocation invocation) { - return (Map) invocation.getInvocationContext().get(PortletConstants.MODE_NAMESPACE_MAP); - } - - /** - * Sets the action name - * - * @param actionName The name - */ - public void setActionName(String actionName) { - this.actionName = actionName; - } - - /** - * Sets the namespace - * - * @param namespace The namespace - */ - public void setNamespace(String namespace) { - this.namespace = namespace; - } - - /** - * Sets the method - * - * @param method The method - */ - public void setMethod(String method) { - this.method = method; - } - - /** - * Adds a request parameter to be added to the redirect url - * - * @param key The parameter name - * @param value The parameter value - * @return the portlet action redirect result - */ - public PortletActionRedirectResult addParameter(String key, Object value) { - requestParameters.put(key, String.valueOf(value)); - return this; - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResult.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResult.java deleted file mode 100644 index b0bc5db38..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResult.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * 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.result; - -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.inject.Inject; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; -import org.apache.commons.lang3.StringUtils; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.result.StrutsResultSupport; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; -import org.apache.struts2.portlet.context.PortletActionContext; - -import javax.portlet.PortletContext; -import javax.portlet.PortletException; -import javax.portlet.PortletMode; -import javax.portlet.PortletRequest; -import javax.portlet.PortletRequestDispatcher; -import javax.portlet.PortletResponse; -import javax.portlet.RenderResponse; -import jakarta.servlet.ServletContext; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Map; -import java.util.StringTokenizer; - -/** - * Result type that includes a JSP to render. - * - */ -public class PortletResult extends StrutsResultSupport { - - private static final long serialVersionUID = 434251393926178567L; - - private static final Logger LOG = LogManager.getLogger(PortletResult.class); - - private boolean useDispatcherServlet; - - private String dispatcherServletName = PortletConstants.DEFAULT_DISPATCHER_SERVLET_NAME; - - - private String contentType = "text/html"; - - private String title; - - 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 - * {@link PortletActionContext}and includes the JSP. - * - * @param finalLocation the final location - * @param actionInvocation the action invocation - * - * @throws Exception in case of any errors - * - * @see com.opensymphony.xwork2.Result#execute(com.opensymphony.xwork2.ActionInvocation) - */ - public void doExecute(String finalLocation, ActionInvocation actionInvocation) throws Exception { - - PortletPhase phase = PortletActionContext.getPhase(); - if (phase.isRender() || phase.isResource()) { - executeMimeResult(finalLocation); - } else if (phase.isAction() || phase.isEvent()) { - executeActionResult(finalLocation, actionInvocation); - } else { - executeRegularServletResult(finalLocation, actionInvocation); - } - } - - /** - * Executes the regular servlet result. - * - * @param finalLocation the final location - * @param actionInvocation the action invocation - * - * @throws ServletException in case of any Servlet errors - * @throws IOException in case of any IO errors - */ - private void executeRegularServletResult(String finalLocation, ActionInvocation actionInvocation) - throws ServletException, IOException { - ServletContext ctx = ServletActionContext.getServletContext(); - HttpServletRequest req = ServletActionContext.getRequest(); - HttpServletResponse res = ServletActionContext.getResponse(); - try { - ctx.getRequestDispatcher(finalLocation).include(req, res); - } catch (ServletException e) { - LOG.error("ServletException including " + finalLocation, e); - throw e; - } catch (IOException e) { - LOG.error("IOException while including result '" + finalLocation + "'", e); - throw e; - } - } - - /** - * Executes the action result. - * - * @param finalLocation the final location - * @param invocation the action invocation - * - * @throws Exception in case of any errors - */ - protected void executeActionResult(String finalLocation, ActionInvocation invocation) throws Exception { - String location = finalLocation; - String namespace = invocation.getProxy().getNamespace(); - if (LOG.isDebugEnabled()) { - LOG.debug("Executing result in {} phase", (PortletActionContext.getPhase().isEvent()) ? "Event" : "Action"); - LOG.debug("Setting event render parameter location : {}", location); - LOG.debug("Setting event render parameter namespace: {}", namespace); - } - Map sessionMap = invocation.getInvocationContext().getSession(); - if (location.indexOf('?') != -1) { - convertQueryParamsToRenderParams(location.substring(location.indexOf('?') + 1)); - location = location.substring(0, location.indexOf('?')); - } - PortletResponse response = PortletActionContext.getResponse(); - if (location.endsWith(".action")) { - // View is rendered with a view action...luckily... - location = location.substring(0, location.lastIndexOf(".")); - resultHelper.setRenderParameter(response, PortletConstants.ACTION_PARAM, location); - } else { - // View is rendered outside an action...uh oh... - resultHelper.setRenderParameter(response, PortletConstants.ACTION_PARAM, "renderDirect"); - sessionMap.put(PortletConstants.RENDER_DIRECT_LOCATION, location); - } - resultHelper.setRenderParameter(response, PortletConstants.RENDER_DIRECT_NAMESPACE, namespace); - if(portletMode != null) { - resultHelper.setPortletMode(response, portletMode); - resultHelper.setRenderParameter(response, PortletConstants.MODE_PARAM, portletMode.toString()); - } - else { - resultHelper.setRenderParameter(response, PortletConstants.MODE_PARAM, PortletActionContext.getRequest().getPortletMode() - .toString()); - } - } - - /** - * Converts the query params to render params. - * - * @param queryParams query parameter - */ - 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); - resultHelper.setRenderParameter(PortletActionContext.getResponse(), key, value); - } - } - - /** - * Executes the render result. - * - * @param finalLocation the final location - * - * @throws PortletException in case of any Portlet errors - * @throws IOException in case of any IO errors - */ - protected void executeMimeResult(final String finalLocation) throws PortletException, IOException { - if (LOG.isDebugEnabled()) LOG.debug("Executing mime result"); - PortletContext ctx = PortletActionContext.getPortletContext(); - PortletRequest req = PortletActionContext.getRequest(); - 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(PortletConstants.DISPATCH_TO, finalLocation); - dispatcher = ctx.getNamedDispatcher(dispatcherServletName); - if(dispatcher == null) { - throw new PortletException("Could not locate dispatcher servlet \"" + dispatcherServletName + "\". Please configure it in your web.xml file"); - } - } else { - dispatcher = ctx.getRequestDispatcher(finalLocation); - if (dispatcher == null) { - throw new PortletException("Could not locate dispatcher for '" + finalLocation + "'"); - } - } - resultHelper.include( dispatcher, contentType, req, res ); - } - - /** - * Sets the content type. - * - * @param contentType - * The content type to set. - */ - public void setContentType(String contentType) { - this.contentType = contentType; - } - - /** - * Sets the title. - * - * @param title - * The title to set. - */ - public void setTitle(String title) { - this.title = title; - } - - public void setPortletMode(String portletMode) { - if(portletMode != null) { - this.portletMode = new PortletMode(portletMode); - } - } - - @Inject("struts.portlet.useDispatcherServlet") - public void setUseDispatcherServlet(String useDispatcherServlet) { - this.useDispatcherServlet = "true".equalsIgnoreCase(useDispatcherServlet); - } - - @Inject("struts.portlet.dispatcherServletName") - public void setDispatcherServletName(String dispatcherServletName) { - this.dispatcherServletName = dispatcherServletName; - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java deleted file mode 100644 index 6fba31a0e..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.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. - * - * @throws PortletModeException in case of errors during setting of portlet mode - */ - 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 - * - * @throws IOException in case of any I/O errors - * @throws PortletException in case of any portlet errors - */ - void include( PortletRequestDispatcher dispatcher, String contentType, PortletRequest request, - PortletResponse response ) throws IOException, PortletException; -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java deleted file mode 100644 index 29958340f..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * 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.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 diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java deleted file mode 100644 index d3906bf30..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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.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. This implementation assumes that the given - * response is a {@link javax.portlet.StateAwareResponse}, as JSR286 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 ) { - ((StateAwareResponse) response).setRenderParameter(key, value); - } - - /** - * Set a portlet mode, abstracted from the used Portlet API version. This implementation assumes that the given - * response is a {@link javax.portlet.StateAwareResponse}, as JSR286 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 { - ((StateAwareResponse) response).setPortletMode(portletMode); - } - - /** - * Call a dispatcher's include method, abstracted from the used Portlet API version. This implementation assumes - * that the response is a {@link javax.portlet.MimeResponse}, as JSR286 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 { - MimeResponse res = (MimeResponse) response; - res.setContentType(contentType); - dispatcher.include(request, res); - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java deleted file mode 100644 index d4d795b28..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java +++ /dev/null @@ -1,270 +0,0 @@ -/* - * 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.result; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.inject.Inject; -import com.opensymphony.xwork2.util.ValueStack; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.result.StrutsResultSupport; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; -import org.apache.struts2.portlet.context.PortletActionContext; -import org.apache.struts2.views.JspSupportServlet; -import org.apache.struts2.views.velocity.VelocityManager; -import org.apache.velocity.Template; -import org.apache.velocity.app.VelocityEngine; -import org.apache.velocity.context.Context; - -import javax.portlet.ActionResponse; -import jakarta.servlet.Servlet; -import jakarta.servlet.ServletContext; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.jsp.JspFactory; -import jakarta.servlet.jsp.PageContext; -import java.io.OutputStreamWriter; -import java.io.Writer; - -/** - * - * - * Using the Servlet container's {@link JspFactory}, this result mocks a JSP - * execution environment and then displays a Velocity template that will be - * streamed directly to the servlet output. - * - * - *

This result type takes the following parameters:

- * - * - * - *
    - * - *
  • location (default) - the location of the template to process. - *
  • - * - *
  • parse - true by default. If set to false, the location param - * will not be parsed for Ognl expressions.
  • - * - *
- *

- * This result follows the same rules from {@link StrutsResultSupport}. - *

- * - * - * - *

Example:

- * - *
- * <!-- START SNIPPET: example -->
- *  <result name="success" type="velocity">
- *    <param name="location">foo.vm</param>
- *  </result>
- *  <!-- END SNIPPET: example -->
- * 
- * - */ -public class PortletVelocityResult extends StrutsResultSupport { - - private static final long serialVersionUID = -8241086555872212274L; - - private static final Logger LOG = LogManager.getLogger(PortletVelocityResult.class); - - private String defaultEncoding; - private VelocityManager velocityManager; - private JspFactory jspFactory = JspFactory.getDefaultFactory(); - - public PortletVelocityResult() { - super(); - } - - public PortletVelocityResult(String location) { - super(location); - } - - @Inject - public void setVelocityManager(VelocityManager mgr) { - this.velocityManager = mgr; - } - - @Inject(StrutsConstants.STRUTS_I18N_ENCODING) - public void setDefaultEncoding(String encoding) { - this.defaultEncoding = encoding; - } - - /* (non-Javadoc) - * @see org.apache.struts2.result.StrutsResultSupport#doExecute(java.lang.String, com.opensymphony.xwork2.ActionInvocation) - */ - public void doExecute(String location, ActionInvocation invocation) throws Exception { - PortletPhase phase = PortletActionContext.getPhase(); - if (phase.isAction()) { - executeActionResult(location, invocation); - } else if (phase.isRender()) { - executeRenderResult(location, invocation); - } - } - - /** - * Executes the result - * - * @param location The location string - * @param invocation The action invocation - */ - private void executeActionResult(String location, ActionInvocation invocation) { - ActionResponse res = PortletActionContext.getActionResponse(); - // View is rendered outside an action...uh oh... - res.setRenderParameter(PortletConstants.ACTION_PARAM, "freemarkerDirect"); - res.setRenderParameter("location", location); - res.setRenderParameter(PortletConstants.MODE_PARAM, PortletActionContext.getRequest().getPortletMode().toString()); - } - - /** - * Creates a Velocity context from the action, loads a Velocity template and - * executes the template. Output is written to the servlet output stream. - * - * @param finalLocation the location of the Velocity template - * @param invocation an encapsulation of the action execution state. - * @throws Exception if an error occurs when creating the Velocity context, - * loading or executing the template or writing output to the - * servlet response stream. - */ - public void executeRenderResult(String finalLocation, ActionInvocation invocation) throws Exception { - ValueStack stack = ActionContext.getContext().getValueStack(); - - HttpServletRequest request = ServletActionContext.getRequest(); - HttpServletResponse response = ServletActionContext.getResponse(); - ServletContext servletContext = ServletActionContext.getServletContext(); - Servlet servlet = JspSupportServlet.jspSupportServlet; - - velocityManager.init(servletContext); - - boolean usedJspFactory = false; - PageContext pageContext = ActionContext.getContext().getPageContext(); - - if (pageContext == null && servlet != null) { - pageContext = jspFactory.getPageContext(servlet, request, response, null, true, 8192, true); - ActionContext.getContext().withPageContext(pageContext); - usedJspFactory = true; - } - - try { - String encoding = getEncoding(finalLocation); - String contentType = getContentType(finalLocation); - - if (encoding != null) { - contentType = contentType + ";charset=" + encoding; - } - response.setContentType(contentType); - Template t = getTemplate(stack, velocityManager.getVelocityEngine(), invocation, finalLocation, encoding); - - Context context = createContext(velocityManager, stack, request, response, finalLocation); - Writer writer = new OutputStreamWriter(response.getOutputStream(), encoding); - - t.merge(context, writer); - - // always flush the writer (we used to only flush it if this was a - // jspWriter, but someone asked - // to do it all the time (WW-829). Since Velocity support is being - // deprecated, we'll oblige :) - writer.flush(); - } catch (Exception e) { - LOG.error("Unable to render Velocity Template, '" + finalLocation + "'", e); - throw e; - } finally { - if (usedJspFactory) { - jspFactory.releasePageContext(pageContext); - } - } - } - - /** - * Retrieve the content type for this template.
People can override - * this method if they want to provide specific content types for specific - * templates (eg text/xml). - * - * @param templateLocation location of templates - * - * @return The content type associated with this template (default - * "text/html") - */ - protected String getContentType(String templateLocation) { - return "text/html"; - } - - /** - * Retrieve the encoding for this template.
People can override this - * method if they want to provide specific encodings for specific templates. - * - * @param templateLocation location of templates - * - * @return The encoding associated with this template (defaults to the value - * of 'struts.i18n.encoding' property) - */ - protected String getEncoding(String templateLocation) { - String encoding = defaultEncoding; - if (encoding == null) { - encoding = System.getProperty("file.encoding"); - } - if (encoding == null) { - encoding = "UTF-8"; - } - return encoding; - } - - /** - * Given a value stack, a Velocity engine, and an action invocation, this - * method returns the appropriate Velocity template to render. - * - * @param stack the value stack to resolve the location again (when parse - * equals true) - * @param velocity the velocity engine to process the request against - * @param invocation an encapsulation of the action execution state. - * @param location the location of the template - * @param encoding the charset encoding of the template - * @return the template to render - * @throws Exception when the requested template could not be found - */ - protected Template getTemplate(ValueStack stack, VelocityEngine velocity, ActionInvocation invocation, - String location, String encoding) throws Exception { - if (!location.startsWith("/")) { - location = invocation.getProxy().getNamespace() + "/" + location; - } - return velocity.getTemplate(location, encoding); - } - - /** - * Creates the VelocityContext that we'll use to render this page. - * - * @param velocityManager a reference to the velocityManager to use - * @param stack the value stack to resolve the location against (when parse - * equals true) - * @param request servlet request - * @param response servlet response - * @param location the name of the template that is being used - * @return the a minted Velocity context. - */ - protected Context createContext(VelocityManager velocityManager, ValueStack stack, HttpServletRequest request, - HttpServletResponse response, String location) { - return velocityManager.createContext(stack, request, response); - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletHttpSession.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletHttpSession.java deleted file mode 100644 index 07deeb951..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletHttpSession.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * 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.servlet; - -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; - -import javax.portlet.PortletSession; -import jakarta.servlet.ServletContext; -import jakarta.servlet.http.HttpSession; - -/** - * Wrapper object exposing a {@link PortletSession} as a {@link HttpSession} instance. - * Clients accessing this session object will in fact operate on the - * {@link PortletSession} object wrapped by this session object. - */ -public class PortletHttpSession implements HttpSession { - - private PortletSession portletSession; - - public PortletHttpSession(PortletSession portletSession) { - this.portletSession = portletSession; - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#getAttribute(java.lang.String) - */ - public Object getAttribute(String name) { - return portletSession.getAttribute(name); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#getAttributeNames() - */ - public Enumeration getAttributeNames() { - return portletSession.getAttributeNames(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#getCreationTime() - */ - public long getCreationTime() { - return portletSession.getCreationTime(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#getId() - */ - public String getId() { - return portletSession.getId(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#getLastAccessedTime() - */ - public long getLastAccessedTime() { - return portletSession.getLastAccessedTime(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#getMaxInactiveInterval() - */ - public int getMaxInactiveInterval() { - return portletSession.getMaxInactiveInterval(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#getServletContext() - */ - public ServletContext getServletContext() { - return new PortletServletContext(portletSession.getPortletContext()); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#getValue(java.lang.String) - */ - public Object getValue(String name) { - return getAttribute(name); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#getValueNames() - */ - public String[] getValueNames() { - List names = new ArrayList(); - Enumeration attrNames = getAttributeNames(); - while (attrNames.hasMoreElements()) { - names.add((String) attrNames.nextElement()); - } - return names.toArray(new String[0]); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#invalidate() - */ - public void invalidate() { - portletSession.invalidate(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#isNew() - */ - public boolean isNew() { - return portletSession.isNew(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#putValue(java.lang.String, - * java.lang.Object) - */ - public void putValue(String name, Object value) { - setAttribute(name, value); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#removeAttribute(java.lang.String) - */ - public void removeAttribute(String name) { - portletSession.removeAttribute(name); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#removeValue(java.lang.String) - */ - public void removeValue(String name) { - removeAttribute(name); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#setAttribute(java.lang.String, - * java.lang.Object) - */ - public void setAttribute(String name, Object value) { - portletSession.setAttribute(name, value); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpSession#setMaxInactiveInterval(int) - */ - public void setMaxInactiveInterval(int interval) { - portletSession.setMaxInactiveInterval(interval); - } - - /** - * Get the wrapped portlet session. - * - * @return The wrapped portlet session. - */ - public PortletSession getPortletSession() { - return portletSession; - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletConfig.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletConfig.java deleted file mode 100644 index 5a3b55378..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletConfig.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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.servlet; - -import java.util.Enumeration; - -import javax.portlet.PortletConfig; -import javax.portlet.PortletContext; -import jakarta.servlet.ServletConfig; -import jakarta.servlet.ServletContext; - -/** - * Wrapper object exposing a {@link PortletConfig} as a {@link ServletConfig} instance. - * Clients accessing this config object will in fact operate on the - * {@link PortletConfig} object wrapped by this config object. - */ -public class PortletServletConfig implements ServletConfig { - - private PortletConfig portletConfig; - - public PortletServletConfig(PortletConfig portletConfig) { - this.portletConfig = portletConfig; - } - - /* (non-Javadoc) - * @see javax.servlet.ServletConfig#getInitParameter(java.lang.String) - */ - public String getInitParameter(String name) { - return portletConfig.getInitParameter(name); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletConfig#getInitParameterNames() - */ - public Enumeration getInitParameterNames() { - return portletConfig.getInitParameterNames(); - } - - /** - * Get the {@link PortletContext} as a {@link PortletServletContext} instance. - * @see javax.servlet.ServletConfig#getServletContext() - */ - public ServletContext getServletContext() { - return new PortletServletContext(portletConfig.getPortletContext()); - } - - /** - * Will return the portlet name. - * @see javax.servlet.ServletConfig#getServletName() - */ - public String getServletName() { - return portletConfig.getPortletName(); - } - - /** - * Get the wrapped {@link PortletConfig} instance. - * @return The wrapped {@link PortletConfig} instance. - */ - public PortletConfig getPortletConfig() { - return portletConfig; - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletContext.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletContext.java deleted file mode 100644 index 84f620d81..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletContext.java +++ /dev/null @@ -1,385 +0,0 @@ -/* - * 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.servlet; - -import javax.portlet.PortletContext; -import javax.portlet.PortletRequestDispatcher; -import jakarta.servlet.Filter; -import jakarta.servlet.FilterRegistration; -import jakarta.servlet.RequestDispatcher; -import jakarta.servlet.Servlet; -import jakarta.servlet.ServletContext; -import jakarta.servlet.ServletException; -import jakarta.servlet.ServletRegistration; -import jakarta.servlet.SessionCookieConfig; -import jakarta.servlet.SessionTrackingMode; -import jakarta.servlet.descriptor.JspConfigDescriptor; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Enumeration; -import java.util.EventListener; -import java.util.Map; -import java.util.Set; - -/** - * Wrapper object exposing a {@link PortletContext} as a {@link ServletContext} instance. - * Clients accessing this context object will in fact operate on the - * {@link PortletContext} object wrapped by this context object. - */ -public class PortletServletContext implements ServletContext { - - private PortletContext portletContext; - - public PortletServletContext(PortletContext portletContext) { - this.portletContext = portletContext; - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getAttribute(java.lang.String) - */ - public Object getAttribute(String name) { - return portletContext.getAttribute(name); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getAttributeNames() - */ - public Enumeration getAttributeNames() { - return portletContext.getAttributeNames(); - } - - /** - * @throws IllegalStateException Not supported in a portlet. - * @see javax.servlet.ServletContext#getContext(java.lang.String) - */ - public ServletContext getContext(String uripath) { - throw new IllegalStateException("Not supported in a portlet"); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getContextPath() - */ - public String getContextPath() { - throw new IllegalStateException("Not supported in a portlet"); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getInitParameter(java.lang.String) - */ - public String getInitParameter(String name) { - return portletContext.getInitParameter(name); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getInitParameterNames() - */ - public Enumeration getInitParameterNames() { - return portletContext.getInitParameterNames(); - } - - @Override - public boolean setInitParameter(String name, String value) { - return false; - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getMajorVersion() - */ - public int getMajorVersion() { - return portletContext.getMajorVersion(); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getMimeType(java.lang.String) - */ - public String getMimeType(String file) { - return portletContext.getMimeType(file); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getMinorVersion() - */ - public int getMinorVersion() { - return portletContext.getMinorVersion(); - } - - @Override - public int getEffectiveMajorVersion() { - return 0; - } - - @Override - public int getEffectiveMinorVersion() { - return 0; - } - - /** - * Returns a {@link PortletServletRequestDispatcher} wrapping the {@link PortletRequestDispatcher} - * as a {@link RequestDispatcher} instance. - * - * @return PortletServletRequestDispatcher - * @see javax.servlet.ServletContext#getNamedDispatcher(java.lang.String) - */ - public RequestDispatcher getNamedDispatcher(String name) { - return new PortletServletRequestDispatcher(portletContext.getNamedDispatcher(name)); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getRealPath(java.lang.String) - */ - public String getRealPath(String path) { - return portletContext.getRealPath(path); - } - - /** - * Returns a {@link PortletServletRequestDispatcher} wrapping the {@link PortletRequestDispatcher} - * as a {@link RequestDispatcher} instance. - * - * @return PortletServletRequestDispatcher - * @see javax.servlet.ServletContext#getNamedDispatcher(java.lang.String) - */ - public RequestDispatcher getRequestDispatcher(String path) { - return new PortletServletRequestDispatcher(portletContext.getRequestDispatcher(path)); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getResource(java.lang.String) - */ - public URL getResource(String path) throws MalformedURLException { - return portletContext.getResource(path); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getResourceAsStream(java.lang.String) - */ - public InputStream getResourceAsStream(String path) { - return portletContext.getResourceAsStream(path); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getResourcePaths(java.lang.String) - */ - public Set getResourcePaths(String path) { - return portletContext.getResourcePaths(path); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getServerInfo() - */ - public String getServerInfo() { - return portletContext.getServerInfo(); - } - - /** - * @throws IllegalStateException Not supported in a portlet. - * @see javax.servlet.ServletContext#getServlet(java.lang.String) - */ - public Servlet getServlet(String name) throws ServletException { - throw new IllegalStateException("Not allowed in a portlet"); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#getServletContextName() - */ - public String getServletContextName() { - return portletContext.getPortletContextName(); - } - - @Override - public ServletRegistration.Dynamic addServlet(String servletName, String className) { - return null; - } - - @Override - public ServletRegistration.Dynamic addServlet(String servletName, Servlet servlet) { - return null; - } - - @Override - public ServletRegistration.Dynamic addServlet(String servletName, Class servletClass) { - return null; - } - - @Override - public T createServlet(Class clazz) throws ServletException { - return null; - } - - @Override - public ServletRegistration getServletRegistration(String servletName) { - return null; - } - - @Override - public Map getServletRegistrations() { - return null; - } - - @Override - public FilterRegistration.Dynamic addFilter(String filterName, String className) { - return null; - } - - @Override - public FilterRegistration.Dynamic addFilter(String filterName, Filter filter) { - return null; - } - - @Override - public FilterRegistration.Dynamic addFilter(String filterName, Class filterClass) { - return null; - } - - @Override - public T createFilter(Class clazz) throws ServletException { - return null; - } - - @Override - public FilterRegistration getFilterRegistration(String filterName) { - return null; - } - - @Override - public Map getFilterRegistrations() { - return null; - } - - @Override - public SessionCookieConfig getSessionCookieConfig() { - return null; - } - - @Override - public void setSessionTrackingModes(Set sessionTrackingModes) { - - } - - @Override - public Set getDefaultSessionTrackingModes() { - return null; - } - - @Override - public Set getEffectiveSessionTrackingModes() { - return null; - } - - @Override - public void addListener(String className) { - - } - - @Override - public void addListener(T t) { - - } - - @Override - public void addListener(Class listenerClass) { - - } - - @Override - public T createListener(Class clazz) throws ServletException { - return null; - } - - @Override - public JspConfigDescriptor getJspConfigDescriptor() { - return null; - } - - @Override - public ClassLoader getClassLoader() { - return null; - } - - @Override - public void declareRoles(String... roleNames) { - - } - - @Override - public String getVirtualServerName() { - return null; - } - - /** - * @throws IllegalStateException Not supported in a portlet. - * @see javax.servlet.ServletContext#getServletNames() - */ - public Enumeration getServletNames() { - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * @throws IllegalStateException Not supported in a portlet. - * @see javax.servlet.ServletContext#getServlets() - */ - public Enumeration getServlets() { - throw new IllegalStateException("Not allowed in a portlet"); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#log(java.lang.String) - */ - public void log(String msg) { - portletContext.log(msg); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#log(java.lang.Exception, java.lang.String) - */ - public void log(Exception exception, String msg) { - log(msg, exception); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#log(java.lang.String, java.lang.Throwable) - */ - public void log(String message, Throwable throwable) { - portletContext.log(message, throwable); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#removeAttribute(java.lang.String) - */ - public void removeAttribute(String name) { - portletContext.removeAttribute(name); - } - - /* (non-Javadoc) - * @see javax.servlet.ServletContext#setAttribute(java.lang.String, java.lang.Object) - */ - public void setAttribute(String name, Object object) { - portletContext.setAttribute(name, object); - } - - /** - * Get the wrapped {@link PortletContext} instance. - * - * @return The wrapped {@link PortletContext} instance. - */ - public PortletContext getPortletContext() { - return portletContext; - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletInputStream.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletInputStream.java deleted file mode 100644 index 1bad86836..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletInputStream.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * 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.servlet; - -import java.io.IOException; -import java.io.InputStream; - -import jakarta.servlet.ReadListener; -import jakarta.servlet.ServletInputStream; - -/** - * Wrapper object exposing a {@link InputStream} from a portlet as a {@link ServletInputStream} instance. - * Clients accessing this stream object will in fact operate on the - * {@link InputStream} object wrapped by this stream object. - */ -public class PortletServletInputStream extends ServletInputStream { - - private InputStream portletInputStream; - - public PortletServletInputStream(InputStream portletInputStream) { - this.portletInputStream = portletInputStream; - } - - /* (non-Javadoc) - * @see java.io.InputStream#read() - */ - @Override - public int read() throws IOException { - return portletInputStream.read(); - } - - /* (non-Javadoc) - * @see java.io.InputStream#available() - */ - @Override - public int available() throws IOException { - return portletInputStream.available(); - } - - /* (non-Javadoc) - * @see java.io.InputStream#close() - */ - @Override - public void close() throws IOException { - portletInputStream.close(); - } - - /* (non-Javadoc) - * @see java.io.InputStream#mark(int) - */ - @Override - public synchronized void mark(int readlimit) { - portletInputStream.mark(readlimit); - } - - /* (non-Javadoc) - * @see java.io.InputStream#markSupported() - */ - @Override - public boolean markSupported() { - return portletInputStream.markSupported(); - } - - /* (non-Javadoc) - * @see java.io.InputStream#read(byte[], int, int) - */ - @Override - public int read(byte[] b, int off, int len) throws IOException { - return portletInputStream.read(b, off, len); - } - - /* (non-Javadoc) - * @see java.io.InputStream#read(byte[]) - */ - @Override - public int read(byte[] b) throws IOException { - return portletInputStream.read(b); - } - - /* (non-Javadoc) - * @see java.io.InputStream#reset() - */ - @Override - public synchronized void reset() throws IOException { - portletInputStream.reset(); - } - - /* (non-Javadoc) - * @see java.io.InputStream#skip(long) - */ - @Override - public long skip(long n) throws IOException { - return portletInputStream.skip(n); - } - - /** - * Get the wrapped {@link InputStream} instance. - * @return The wrapped {@link InputStream} instance. - */ - public InputStream getInputStream() { - return portletInputStream; - } - - @Override - public boolean isFinished() { - return true; - } - - @Override - public boolean isReady() { - return true; - } - - @Override - public void setReadListener(ReadListener readListener) { - // no-op - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletOutputStream.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletOutputStream.java deleted file mode 100644 index c43e058eb..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletOutputStream.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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.servlet; - -import java.io.IOException; -import java.io.OutputStream; - -import jakarta.servlet.ServletOutputStream; -import jakarta.servlet.WriteListener; - -/** - * Wrapper object exposing a {@link OutputStream} from a portlet as a {@link ServletOutputStream} instance. - * Clients accessing this stream object will in fact operate on the - * {@link OutputStream} object wrapped by this stream object. - */ -public class PortletServletOutputStream extends ServletOutputStream { - - private OutputStream portletOutputStream; - - public PortletServletOutputStream(OutputStream portletOutputStream) { - this.portletOutputStream = portletOutputStream; - } - - /* (non-Javadoc) - * @see java.io.OutputStream#write(int) - */ - @Override - public void write(int ch) throws IOException { - portletOutputStream.write(ch); - } - - /* (non-Javadoc) - * @see java.io.OutputStream#close() - */ - @Override - public void close() throws IOException { - portletOutputStream.close(); - } - - /* (non-Javadoc) - * @see java.io.OutputStream#flush() - */ - @Override - public void flush() throws IOException { - portletOutputStream.flush(); - } - - /* (non-Javadoc) - * @see java.io.OutputStream#write(byte[]) - */ - @Override - public void write(byte[] b) throws IOException { - portletOutputStream.write(b); - } - - /* (non-Javadoc) - * @see java.io.OutputStream#write(byte[], int, int) - */ - @Override - public void write(byte[] b, int off, int len) throws IOException { - portletOutputStream.write(b, off, len); - } - - /** - * Get the wrapped {@link OutputStream} instance. - * @return The wrapped {@link OutputStream} instance. - */ - public OutputStream getOutputStream() { - return portletOutputStream; - } - - @Override - public boolean isReady() { - return true; - } - - @Override - public void setWriteListener(WriteListener writeListener) { - // no-op - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequest.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequest.java deleted file mode 100644 index 3ea0e0050..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequest.java +++ /dev/null @@ -1,767 +0,0 @@ -/* - * 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.servlet; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.security.Principal; -import java.util.Collection; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Locale; -import java.util.Map; - -import javax.portlet.ActionRequest; -import javax.portlet.ClientDataRequest; -import javax.portlet.PortletContext; -import javax.portlet.PortletRequest; -import javax.portlet.PortletRequestDispatcher; -import javax.portlet.PortletSession; -import jakarta.servlet.AsyncContext; -import jakarta.servlet.DispatcherType; -import jakarta.servlet.RequestDispatcher; -import jakarta.servlet.ServletContext; -import jakarta.servlet.ServletException; -import jakarta.servlet.ServletInputStream; -import jakarta.servlet.ServletRequest; -import jakarta.servlet.ServletResponse; -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpSession; -import jakarta.servlet.http.HttpUpgradeHandler; -import jakarta.servlet.http.Part; - -import static org.apache.struts2.portlet.PortletConstants.*; - -/** - * Wrapper object exposing a {@link PortletRequest} as a - * {@link HttpServletRequest} instance. Clients accessing this request object - * will in fact operate on the {@link PortletRequest} object wrapped by this - * request object. - */ -public class PortletServletRequest implements HttpServletRequest { - - private PortletRequest portletRequest; - - private PortletContext portletContext; - - private Map extraParams; - - public PortletServletRequest(PortletRequest portletRequest, - PortletContext portletContext) { - this(portletRequest, portletContext, Collections.EMPTY_MAP); - } - - public PortletServletRequest(PortletRequest portletRequest, - PortletContext portletContext, Map extraParams) { - this.portletContext = portletContext; - this.portletRequest = portletRequest; - this.extraParams = extraParams; - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#getAuthType() - */ - public String getAuthType() { - return portletRequest.getAuthType(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#getContextPath() - */ - public String getContextPath() { - return portletRequest.getContextPath(); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public Cookie[] getCookies() { - if (portletRequest instanceof HttpServletRequest) { - return ((HttpServletRequest) portletRequest).getCookies(); - } - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public long getDateHeader(String name) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Gets a property from the {@link PortletRequest}. Note that a - * {@link PortletRequest} is not guaranteed to map properties to headers. - * - * @see PortletRequest#getProperty(String) - * @see javax.servlet.http.HttpServletRequest#getHeader(java.lang.String) - */ - public String getHeader(String name) { - return portletRequest.getProperty(name); - } - - /** - * Gets the property names from the {@link PortletRequest}. Note that a - * {@link PortletRequest} is not guaranteed to map properties to headers. - * - * @see PortletRequest#getPropertyNames() - * @see javax.servlet.http.HttpServletRequest#getHeaderNames() - */ - public Enumeration getHeaderNames() { - return portletRequest.getPropertyNames(); - } - - /** - * Gets the values for the specified property from the - * {@link PortletRequest}. Note that a {@link PortletRequest} is not - * guaranteed to map properties to headers. - * - * @see PortletRequest#getProperties(String) - * @see HttpServletRequest#getHeaders(String) - */ - public Enumeration getHeaders(String name) { - return portletRequest.getProperties(name); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public int getIntHeader(String name) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#getMethod() - */ - public String getMethod() { - if (portletRequest instanceof ClientDataRequest) { - return ((ClientDataRequest) portletRequest).getMethod(); - } - else { - return null; - } - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#getPathInfo() - */ - public String getPathInfo() { - return null; - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#getPathTranslated() - */ - public String getPathTranslated() { - return null; - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#getQueryString() - */ - public String getQueryString() { - return null; - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#getRemoteUser() - */ - public String getRemoteUser() { - return portletRequest.getRemoteUser(); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public String getRequestURI() { - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public StringBuffer getRequestURL() { - throw new IllegalStateException("Not allowed in a portlet"); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#getRequestedSessionId() - */ - public String getRequestedSessionId() { - return portletRequest.getRequestedSessionId(); - } - - /** - * A {@link PortletRequest} has no servlet path. But for compatibility with - * Struts 2 components and interceptors, the action parameter on the request - * is mapped to the servlet path. - * - * @see javax.servlet.http.HttpServletRequest#getServletPath() - */ - public String getServletPath() { - String actionPath = getParameter(ACTION_PARAM); - if (actionPath != null && !actionPath.endsWith(".action")) { - actionPath += ".action"; - } - return actionPath; - } - - /** - * Get the {@link PortletSession} as a {@link PortletHttpSession} instance. - * - * @see javax.servlet.http.HttpServletRequest#getSession() - */ - public HttpSession getSession() { - return new PortletHttpSession(portletRequest.getPortletSession()); - } - - @Override - public String changeSessionId() { - return null; - } - - /** - * Get the {@link PortletSession} as a {@link PortletHttpSession} instance. - * - * @see javax.servlet.http.HttpServletRequest#getSession(boolean) - */ - public HttpSession getSession(boolean create) { - return new PortletHttpSession(portletRequest.getPortletSession(create)); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() - */ - public Principal getUserPrincipal() { - return portletRequest.getUserPrincipal(); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public boolean isRequestedSessionIdFromCookie() { - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public boolean isRequestedSessionIdFromURL() { - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public boolean isRequestedSessionIdFromUrl() { - throw new IllegalStateException("Not allowed in a portlet"); - } - - @Override - public boolean authenticate(HttpServletResponse response) throws IOException, ServletException { - return false; - } - - @Override - public void login(String username, String password) throws ServletException { - - } - - @Override - public void logout() throws ServletException { - - } - - @Override - public Collection getParts() throws IOException, ServletException { - return null; - } - - @Override - public Part getPart(String name) throws IOException, ServletException { - return null; - } - - @Override - public T upgrade(Class handlerClass) throws IOException, ServletException { - return null; - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdValid() - */ - public boolean isRequestedSessionIdValid() { - return portletRequest.isRequestedSessionIdValid(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequest#isUserInRole(java.lang.String) - */ - public boolean isUserInRole(String role) { - return portletRequest.isUserInRole(role); - } - - /** - * Gets an attribute value on the {@link PortletRequest}. If the attribute - * name is javax.servlet.include.servlet_path, it returns the - * same as {@link PortletServletRequest#getServletPath()} - * - * @see javax.servlet.ServletRequest#getAttribute(java.lang.String) - */ - public Object getAttribute(String name) { - if ("javax.servlet.include.servlet_path".equals(name)) { - return getServletPath(); - } else { - return portletRequest.getAttribute(name); - } - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getAttributeNames() - */ - public Enumeration getAttributeNames() { - return portletRequest.getAttributeNames(); - } - - /** - * Can only be invoked in the event phase. - * - * @see ServletRequest#getCharacterEncoding() - * @throws IllegalStateException - * If the portlet is not in the event phase. - */ - public String getCharacterEncoding() { - if (portletRequest instanceof ActionRequest) { - return ((ActionRequest) portletRequest).getCharacterEncoding(); - } else { - throw new IllegalStateException("Not allowed in render phase"); - } - } - - /** - * Can only be invoked in the event phase. - * - * @see ServletRequest#getContentLength() - * @throws IllegalStateException - * If the portlet is not in the event phase. - */ - public int getContentLength() { - if (portletRequest instanceof ActionRequest) { - return ((ActionRequest) portletRequest).getContentLength(); - } else { - throw new IllegalStateException("Not allowed in render phase"); - } - } - - @Override - public long getContentLengthLong() { - return 0; - } - - /** - * Can only be invoked in the event phase. - * - * @see ServletRequest#getContentType() - * @throws IllegalStateException - * If the portlet is not in the event phase. - */ - public String getContentType() { - if (portletRequest instanceof ActionRequest) { - return ((ActionRequest) portletRequest).getContentType(); - } else { - throw new IllegalStateException("Not allowed in render phase"); - } - } - - /** - * Can only be invoked in the event phase. When invoked in the event phase, - * it will wrap the portlet's {@link InputStream} as a - * {@link PortletServletInputStream}. - * - * @see ServletRequest#getInputStream() - * @throws IllegalStateException - * If the portlet is not in the event phase. - */ - public ServletInputStream getInputStream() throws IOException { - if (portletRequest instanceof ActionRequest) { - return new PortletServletInputStream( - ((ActionRequest) portletRequest).getPortletInputStream()); - } else { - throw new IllegalStateException("Not allowed in render phase"); - } - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public String getLocalAddr() { - if (portletRequest instanceof HttpServletRequest) { - return ((HttpServletRequest) portletRequest).getLocalAddr(); - } - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public String getLocalName() { - if (portletRequest instanceof HttpServletRequest) { - return ((HttpServletRequest) portletRequest).getLocalName(); - } - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public int getLocalPort() { - if (portletRequest instanceof HttpServletRequest) { - return ((HttpServletRequest) portletRequest).getLocalPort(); - } - throw new IllegalStateException("Not allowed in a portlet"); - } - - @Override - public ServletContext getServletContext() { - return null; - } - - @Override - public AsyncContext startAsync() throws IllegalStateException { - return null; - } - - @Override - public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { - return null; - } - - @Override - public boolean isAsyncStarted() { - return false; - } - - @Override - public boolean isAsyncSupported() { - return false; - } - - @Override - public AsyncContext getAsyncContext() { - return null; - } - - @Override - public DispatcherType getDispatcherType() { - return null; - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getLocale() - */ - public Locale getLocale() { - return portletRequest.getLocale(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getLocales() - */ - public Enumeration getLocales() { - return portletRequest.getLocales(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getParameter(java.lang.String) - */ - public String getParameter(String name) { - // Check if the parameter is overriden in the extra params - if (extraParams.containsKey(name)) { - String[] values = extraParams.get(name); - if (values != null && values.length > 0) { - return values[0]; - } - } - return portletRequest.getParameter(name); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getParameterMap() - */ - public Map getParameterMap() { - return portletRequest.getParameterMap(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getParameterNames() - */ - public Enumeration getParameterNames() { - return portletRequest.getParameterNames(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getParameterValues(java.lang.String) - */ - public String[] getParameterValues(String name) { - return portletRequest.getParameterValues(name); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public String getProtocol() { - if (portletRequest instanceof HttpServletRequest) { - return ((HttpServletRequest) portletRequest).getProtocol(); - } - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Can only be invoked in the event phase. - * - * @see ServletRequest#getReader() - * @throws IllegalStateException - * If the portlet is not in the event phase. - */ - public BufferedReader getReader() throws IOException { - if (portletRequest instanceof ActionRequest) { - return ((ActionRequest) portletRequest).getReader(); - } else { - throw new IllegalStateException("Not allowed in render phase"); - } - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getRealPath(java.lang.String) - */ - public String getRealPath(String path) { - return portletContext.getRealPath(path); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public String getRemoteAddr() { - if (portletRequest instanceof HttpServletRequest) { - return ((HttpServletRequest) portletRequest).getRemoteAddr(); - } - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public String getRemoteHost() { - if (portletRequest instanceof HttpServletRequest) { - return ((HttpServletRequest) portletRequest).getRemoteHost(); - } - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public int getRemotePort() { - if (portletRequest instanceof HttpServletRequest) { - return ((HttpServletRequest) portletRequest).getRemotePort(); - } - throw new IllegalStateException("Not allowed in a portlet"); - } - - /** - * Get the {@link PortletRequestDispatcher} as a - * {@link PortletServletRequestDispatcher} instance. - * - * @see javax.servlet.ServletRequest#getRequestDispatcher(java.lang.String) - */ - public RequestDispatcher getRequestDispatcher(String path) { - return new PortletServletRequestDispatcher(portletContext - .getRequestDispatcher(path)); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getScheme() - */ - public String getScheme() { - return portletRequest.getScheme(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#getServerName() - */ - public String getServerName() { - return portletRequest.getServerName(); - } - - /** - * Not allowed in a portlet. - * - * @throws IllegalStateException - * Not allowed in a portlet. - */ - public int getServerPort() { - if (portletRequest instanceof HttpServletRequest) { - return ((HttpServletRequest) portletRequest).getServerPort(); - } - throw new IllegalStateException("Not allowed in a portlet"); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#isSecure() - */ - public boolean isSecure() { - return portletRequest.isSecure(); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#removeAttribute(java.lang.String) - */ - public void removeAttribute(String name) { - portletRequest.removeAttribute(name); - } - - /* - * (non-Javadoc) - * - * @see javax.servlet.ServletRequest#setAttribute(java.lang.String, - * java.lang.Object) - */ - public void setAttribute(String name, Object o) { - portletRequest.setAttribute(name, o); - } - - /** - * Can only be invoked in the event phase. - * - * @see ServletRequest#setCharacterEncoding(String) - * @throws IllegalStateException - * If the portlet is not in the event phase. - */ - public void setCharacterEncoding(String env) - throws UnsupportedEncodingException { - if (portletRequest instanceof ActionRequest) { - ((ActionRequest) portletRequest).setCharacterEncoding(env); - } else { - throw new IllegalStateException("Not allowed in render phase"); - } - } - - /** - * Get the wrapped {@link PortletRequest} instance. - * - * @return The wrapped {@link PortletRequest} instance. - */ - public PortletRequest getPortletRequest() { - return portletRequest; - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequestDispatcher.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequestDispatcher.java deleted file mode 100644 index 1bfc00d68..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequestDispatcher.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.servlet; - -import java.io.IOException; - -import javax.portlet.PortletException; -import javax.portlet.PortletRequest; -import javax.portlet.PortletRequestDispatcher; -import javax.portlet.PortletResponse; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import jakarta.servlet.RequestDispatcher; -import jakarta.servlet.ServletException; -import jakarta.servlet.ServletRequest; -import jakarta.servlet.ServletResponse; - -public class PortletServletRequestDispatcher implements RequestDispatcher { - - private PortletRequestDispatcher portletRequestDispatcher; - - public PortletServletRequestDispatcher(PortletRequestDispatcher portletRequestDispatcher) { - this.portletRequestDispatcher = portletRequestDispatcher; - } - - public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException { - throw new IllegalStateException("Not allowed in a portlet"); - - } - - public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException { - if(request instanceof PortletServletRequest && response instanceof PortletServletResponse) { - PortletRequest req = ((PortletServletRequest)request).getPortletRequest(); - PortletResponse resp = ((PortletServletResponse)response).getPortletResponse(); - if(req instanceof RenderRequest && resp instanceof RenderResponse) { - try { - portletRequestDispatcher.include((RenderRequest)req, (RenderResponse)resp); - } - catch(PortletException e) { - throw new ServletException(e); - } - } - else { - throw new IllegalStateException("Can only be invoked in the render phase"); - } - } - else { - throw new IllegalStateException("Can only be invoked in a portlet"); - } - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java deleted file mode 100644 index ce40946f5..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * 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.servlet; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Collection; -import java.util.Locale; - -import javax.portlet.PortletResponse; -import javax.portlet.RenderResponse; -import jakarta.servlet.ServletOutputStream; -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletResponse; - -public class PortletServletResponse implements HttpServletResponse { - - protected PortletResponse portletResponse; - - public PortletServletResponse(PortletResponse portletResponse) { - this.portletResponse = portletResponse; - } - - public void addCookie(Cookie cookie) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void addDateHeader(String name, long date) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void addHeader(String name, String value) { - portletResponse.addProperty(name, value); - } - - public void addIntHeader(String name, int value) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public boolean containsHeader(String name) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public String encodeRedirectURL(String url) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public String encodeRedirectUrl(String url) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public String encodeURL(String url) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public String encodeUrl(String url) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void sendError(int sc) throws IOException { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void sendError(int sc, String msg) throws IOException { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void sendRedirect(String location) throws IOException { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void setDateHeader(String name, long date) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void setHeader(String name, String value) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void setIntHeader(String name, int value) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void setStatus(int sc) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - public void setStatus(int sc, String sm) { - throw new IllegalStateException("Not allowed in a portlet"); - } - - @Override - public int getStatus() { - return 0; - } - - @Override - public String getHeader(String name) { - return null; - } - - @Override - public Collection getHeaders(String name) { - return null; - } - - @Override - public Collection getHeaderNames() { - return null; - } - - 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"); - } - - @Override - public void setContentLengthLong(long len) { - - } - - 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; - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java deleted file mode 100644 index a2e028568..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * 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.servlet; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Locale; - -import javax.portlet.MimeResponse; -import javax.portlet.PortletResponse; -import javax.portlet.ResourceResponse; -import jakarta.servlet.ServletOutputStream; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - -/** - * PortletServletResponseJSR286. - * - * @author Rene Gielen - */ -public class PortletServletResponseJSR286 extends PortletServletResponse { - - private static final Logger LOG = LogManager.getLogger(PortletServletResponseJSR286.class); - - 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); - } - else { - throw new IllegalStateException("Only allowed in resource phase"); - } - } - - public void setContentLength(int len) { - if(portletResponse instanceof ResourceResponse) { - ((ResourceResponse)portletResponse).setContentLength(len); - } - else { - 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); - } - else { - throw new IllegalStateException("Only allowed in resource phase"); - } - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/package.html b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/package.html deleted file mode 100644 index 926aff1a2..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/package.html +++ /dev/null @@ -1,25 +0,0 @@ - - - Portlet wrapper objects for some of the servlet api objects. The wrappers simply delegate to the - underlying, corresponding portlet objects. The portlet wrapper objects makes it easier to reuse - interceptors and components from struts2 core. - \ No newline at end of file diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java deleted file mode 100644 index 52447edf3..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java +++ /dev/null @@ -1,346 +0,0 @@ -/* - * 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.util; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; -import org.apache.commons.lang3.StringUtils; -import org.apache.struts2.StrutsException; -import org.apache.struts2.portlet.context.PortletActionContext; - -import javax.portlet.PortletMode; -import javax.portlet.PortletRequest; -import javax.portlet.PortletSecurityException; -import javax.portlet.PortletURL; -import javax.portlet.RenderResponse; -import javax.portlet.WindowState; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.StringTokenizer; - -import static org.apache.struts2.portlet.PortletConstants.ACTION_PARAM; -import static org.apache.struts2.portlet.PortletConstants.MODE_PARAM; - -/** - * 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 - * container and must therefore be programatically constructed using the - * {@link javax.portlet.MimeResponse#createActionURL()} and - * {@link javax.portlet.MimeResponse#createRenderURL()} APIs. - * - */ -public class PortletUrlHelper { - public static final String ENCODING = "UTF-8"; - - private static final Logger LOG = LogManager.getLogger(PortletUrlHelper.class); - - protected static final String PORTLETMODE_NAME_EDIT = "edit"; - protected static final String PORTLETMODE_NAME_VIEW = "view"; - protected static final String PORTLETMODE_NAME_HELP = "help"; - - protected static final String URLTYPE_NAME_ACTION = "action"; - protected static final String URLTYPE_NAME_RESOURCE = "resource"; - - /** - * Create a portlet URL with for the specified action and namespace. - * - * @param action The action the URL should invoke. - * @param namespace The namespace of the action to invoke. - * @param method The method of the action to invoke. - * @param params The parameters of the URL. - * @param type The type of the url, either action or render - * @param mode The PortletMode of the URL. - * @param state The WindowState of the URL. - * @return The URL String. - */ - public String buildUrl(String action, String namespace, String method, Map params, - String type, String mode, String state) { - return buildUrl(action, namespace, method, params, null, type, mode, state, - true, true); - } - - /** - * Create a portlet URL with for the specified action and namespace. - * - * @param action The action the URL should invoke. - * @param namespace The namespace of the action to invoke. - * @param method The method of the action to invoke. - * @param params The parameters of the URL. - * @param type The type of the url, either action or render - * @param scheme The scheme of the URL. - * @param portletMode The Portlet Mode of the URL. - * @param windowState The Window State - * @param includeContext true for including context - * @param encodeResult true for encode of the result - * - * @return The URL String. - * - * @see #buildUrl(String, String, String, java.util.Map, String, String, String) - */ - public String buildUrl(String action, String namespace, String method, Map params, - String scheme, String type, String portletMode, String windowState, - boolean includeContext, boolean encodeResult) { - StringBuilder resultingAction = new StringBuilder(); - PortletRequest request = PortletActionContext.getRequest(); - LOG.debug("Creating url. Action = " + action + ", Namespace = " - + namespace + ", Type = " + type); - namespace = prependNamespace(namespace, portletMode, false); - if (StringUtils.isEmpty(portletMode)) { - portletMode = PortletActionContext.getRequest().getPortletMode().toString(); - } - int paramStartIndex = action.indexOf('?'); - if (paramStartIndex > 0) { - String value = action; - action = value.substring(0, value.indexOf('?')); - String queryStr = value.substring(paramStartIndex + 1); - StringTokenizer tok = new StringTokenizer(queryStr, "&"); - while (tok.hasMoreTokens()) { - String paramVal = tok.nextToken(); - String key = paramVal.substring(0, paramVal.indexOf('=')); - String val = paramVal.substring(paramVal.indexOf('=') + 1); - params.put(key, new String[] { val }); - } - } - if (StringUtils.isNotEmpty(namespace)) { - resultingAction.append(namespace); - if(!action.startsWith("/") && !namespace.endsWith("/")) { - resultingAction.append("/"); - } - } - resultingAction.append(action); - if(StringUtils.isNotEmpty(method)) { - resultingAction.append("!").append(method); - } - if (LOG.isDebugEnabled()) LOG.debug("Resulting actionPath: " + resultingAction); - params.put(ACTION_PARAM, new String[] { resultingAction.toString() }); - params.put(MODE_PARAM, new String[]{portletMode}); - final Map portletParams = ensureParamsAreStringArrays(params); - - Object url = createUrl(scheme, type, portletParams); - if(url instanceof PortletURL) { - try { - final PortletURL portletUrl = (PortletURL) url; - portletUrl.setPortletMode(getPortletMode(request, portletMode)); - portletUrl.setWindowState(getWindowState(request, windowState)); - } catch (Exception e) { - LOG.error("Unable to set mode or state:" + e.getMessage(), e); - } - } - - String result = url.toString(); - // TEMP BUG-WORKAROUND FOR DOUBLE ESCAPING OF AMPERSAND - if(result.contains("&")) { - result = result.replace("&", "&"); - } - return result; - - } - - protected Object createUrl( String scheme, String type, Map portletParams ) { - RenderResponse response = PortletActionContext.getRenderResponse(); - PortletURL url; - if (URLTYPE_NAME_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. - * - * @param namespace The base namespace. - * @param portletMode The PortletMode. - * @param prependModeNamespace In JSR286, the new URL type resource was added, which does not operate in the context - * of a portlet mode. If the URL to create is of type resource, this parameter should be - * set to false. Set it to true in any other case. - * @return prepended namespace. - */ - private String prependNamespace(String namespace, String portletMode, boolean prependModeNamespace) { - StringBuilder sb = new StringBuilder(); - String modeNamespace; - if (prependModeNamespace) { - PortletMode mode = PortletActionContext.getRequest().getPortletMode(); - if(StringUtils.isNotEmpty(portletMode)) { - mode = new PortletMode(portletMode); - } - modeNamespace = PortletActionContext.getModeNamespaceMap().get(mode); - } else { - modeNamespace = null; - } - String portletNamespace = PortletActionContext.getPortletNamespace(); - if (LOG.isDebugEnabled()) { - LOG.debug("PortletNamespace: " + portletNamespace + ", modeNamespace: " - + (modeNamespace!=null ? modeNamespace : "IGNORED")); - } - if(StringUtils.isNotEmpty(portletNamespace)) { - sb.append(portletNamespace); - } - if(StringUtils.isNotEmpty(modeNamespace)) { - if(!modeNamespace.startsWith("/")) { - sb.append("/"); - } - sb.append(modeNamespace); - } - if(StringUtils.isNotEmpty(namespace)) { - if(!namespace.startsWith("/")) { - sb.append("/"); - } - sb.append(namespace); - } - if (LOG.isDebugEnabled()) LOG.debug("Resulting namespace: " + sb); - return sb.toString(); - } - - /** - * Encode an url to a non Struts action resource, like stylesheet, image or - * servlet. - * - * @param value base url - * @param params url parameters - * @return encoded url to non Struts action resources. - */ - public String buildResourceUrl(String value, Map params) { - StringBuffer sb = new StringBuffer(); - // Relative URLs are not allowed in a portlet - if (!value.startsWith("/")) { - sb.append("/"); - } - sb.append(value); - if(params != null && params.size() > 0) { - sb.append("?"); - Iterator it = params.keySet().iterator(); - try { - while(it.hasNext()) { - String key = (String)it.next(); - String val = (String)params.get(key); - - sb.append(URLEncoder.encode(key, ENCODING)).append("="); - sb.append(URLEncoder.encode(val, ENCODING)); - if(it.hasNext()) { - sb.append("&"); - } - } - } catch (UnsupportedEncodingException e) { - throw new StrutsException("Encoding "+ENCODING+" not found"); - } - } - 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()); - } - - /** - * Will ensure that all entries in params are String arrays, - * as requried by the setParameters on the PortletURL. - * - * @param params The parameters to the URL. - * @return A Map with all parameters as String arrays. - */ - public static Map ensureParamsAreStringArrays(Map params) { - Map result = null; - if (params != null) { - result = new LinkedHashMap(params.size()); - for (Map.Entry entry : params.entrySet() ) { - String key = entry.getKey(); - Object val = entry.getValue(); - if (val instanceof String[]) { - result.put(key, (String[]) val); - } else { - result.put(key, new String[]{val.toString()}); - } - } - } - return result; - } - - /** - * Convert the given String to a WindowState object. - * - * @param portletReq The PortletRequest. - * @param windowState The WindowState as a String. - * @return The WindowState that mathces the windowState String, or if - * the String is blank, the current WindowState. - */ - private WindowState getWindowState(PortletRequest portletReq, - String windowState) { - WindowState state = portletReq.getWindowState(); - if (StringUtils.isNotEmpty(windowState)) { - if ("maximized".equalsIgnoreCase(windowState)) { - state = WindowState.MAXIMIZED; - } else if ("normal".equalsIgnoreCase(windowState)) { - state = WindowState.NORMAL; - } else if ("minimized".equalsIgnoreCase(windowState)) { - state = WindowState.MINIMIZED; - } - } - if(state == null) { - state = WindowState.NORMAL; - } - return state; - } - - /** - * Convert the given String to a PortletMode object. - * - * @param portletReq The PortletRequest. - * @param portletMode The PortletMode as a String. - * @return The PortletMode that mathces the portletMode String, or if - * the String is blank, the current PortletMode. - */ - private PortletMode getPortletMode(PortletRequest portletReq, - String portletMode) { - PortletMode mode = portletReq.getPortletMode(); - - if (StringUtils.isNotEmpty(portletMode)) { - if (PORTLETMODE_NAME_EDIT.equalsIgnoreCase(portletMode)) { - mode = PortletMode.EDIT; - } else if (PORTLETMODE_NAME_VIEW.equalsIgnoreCase(portletMode)) { - mode = PortletMode.VIEW; - } else if (PORTLETMODE_NAME_HELP.equalsIgnoreCase(portletMode)) { - mode = PortletMode.HELP; - } - } - if(mode == null) { - mode = PortletMode.VIEW; - } - return mode; - } -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java deleted file mode 100644 index 1973886c3..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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.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 org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - -/** - * PortletUrlJSR286Helper. - * - * @author Rene Gielen - */ -public class PortletUrlHelperJSR286 extends PortletUrlHelper { - - private static final Logger LOG = LogManager.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 portletParams ) { - MimeResponse response = (MimeResponse) PortletActionContext.getResponse(); - BaseURL url; - if (URLTYPE_NAME_ACTION.equalsIgnoreCase(type)) { - if (LOG.isDebugEnabled()) LOG.debug("Creating action url"); - url = response.createActionURL(); - } - else if(URLTYPE_NAME_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; - } - -} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java b/plugins/portlet/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java deleted file mode 100644 index f58c0fd93..000000000 --- a/plugins/portlet/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java +++ /dev/null @@ -1,326 +0,0 @@ -/* - * 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.views.freemarker; - -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.inject.Inject; -import com.opensymphony.xwork2.util.ValueStack; -import freemarker.template.Configuration; -import freemarker.template.ObjectWrapper; -import freemarker.template.Template; -import freemarker.template.TemplateException; -import freemarker.template.TemplateModel; -import freemarker.template.TemplateModelException; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.result.StrutsResultSupport; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; -import org.apache.struts2.portlet.context.PortletActionContext; -import org.apache.struts2.views.util.ResourceUtil; - -import javax.portlet.ActionResponse; -import javax.portlet.PortletException; -import javax.portlet.ResourceResponse; -import jakarta.servlet.ServletContext; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.Writer; -import java.util.Locale; - -public class PortletFreemarkerResult extends StrutsResultSupport { - - private static final long serialVersionUID = -5570612389289887543L; - - protected ActionInvocation invocation; - - protected Configuration configuration; - - protected ObjectWrapper wrapper; - protected FreemarkerManager freemarkerManager; - - /* - * Struts results are constructed for each result execeution - * - * the current context is availible to subclasses via these protected fields - */ - protected String location; - - private String pContentType = "text/html"; - - public PortletFreemarkerResult() { - super(); - } - - public PortletFreemarkerResult(String location) { - super(location); - } - - @Inject - public void setFreemarkerManager(FreemarkerManager mgr) { - this.freemarkerManager = mgr; - } - - public void setContentType(String aContentType) { - pContentType = aContentType; - } - - /** - * allow parameterization of the contentType the default being text/html - * - * @return content type - */ - public String getContentType() { - return pContentType; - } - - /** - *

- * Execute this result, using the specified template location.
The - * template location has already been interpolated for any variable - * substitutions
this method obtains the freemarker configuration and - * the object wrapper from the provided hooks. It them implements the - * template processing workflow by calling the hooks for preTemplateProcess - * and postTemplateProcess - *

- * - * @param location template location - * @param invocation the action invocation - * - * @throws IOException in case of I/O related errors - * @throws TemplateException in case of freemarker templates related errors - * @throws PortletException in case of portlet related errors - */ - public void doExecute(String location, ActionInvocation invocation) - throws IOException, TemplateException, PortletException { - PortletPhase phase = PortletActionContext.getPhase(); - if (phase.isAction()) { - executeActionResult(location, invocation); - } else if (phase.isRender()) { - executeRenderResult(location, invocation); - } else if (phase.isResource()){ - executeResourceResult(location, invocation); - } - } - - private void executeActionResult(String location, ActionInvocation invocation) { - ActionResponse res = PortletActionContext.getActionResponse(); - // View is rendered outside an action...uh oh... - invocation.getInvocationContext().getSession().put(PortletConstants.RENDER_DIRECT_LOCATION, location); - res.setRenderParameter(PortletConstants.ACTION_PARAM, "freemarkerDirect"); - res.setRenderParameter("location", location); - res.setRenderParameter(PortletConstants.MODE_PARAM, PortletActionContext.getRequest().getPortletMode().toString()); - - } - - private void executeRenderResult(String location, ActionInvocation invocation) - throws TemplateException, IOException, PortletException { - this.location = location; - this.invocation = invocation; - this.configuration = getConfiguration(); - this.wrapper = getObjectWrapper(); - - HttpServletRequest req = ServletActionContext.getRequest(); - - if (!location.startsWith("/")) { - String base = ResourceUtil.getResourceBase(req); - location = base + "/" + location; - } - - Template template = configuration.getTemplate(location, deduceLocale()); - TemplateModel model = createModel(); - // Give subclasses a chance to hook into preprocessing - if (preTemplateProcess(template, model)) { - try { - // Process the template - PortletActionContext.getRenderResponse().setContentType(pContentType); - template.process(model, getWriter()); - } finally { - // Give subclasses a chance to hook into postprocessing - postTemplateProcess(template, model); - } - } - } - - private void executeResourceResult(String location, ActionInvocation invocation) - throws TemplateException, IOException, PortletException { - this.location = location; - this.invocation = invocation; - this.configuration = getConfiguration(); - this.wrapper = getObjectWrapper(); - - HttpServletRequest req = ServletActionContext.getRequest(); - - if (!location.startsWith("/")) { - String base = ResourceUtil.getResourceBase(req); - location = base + "/" + location; - } - - Template template = configuration.getTemplate(location, deduceLocale()); - TemplateModel model = createModel(); - // Give subclasses a chance to hook into preprocessing - if (preTemplateProcess(template, model)) { - try { - // Process the template - ResourceResponse response = PortletActionContext.getResourceResponse(); - response.setContentType(pContentType); - template.process(model, response.getWriter()); - } finally { - // Give subclasses a chance to hook into postprocessing - postTemplateProcess(template, model); - } - } - } - - /** - * This method is called from {@link #doExecute(String, ActionInvocation)} - * to obtain the FreeMarker configuration object that this result will use - * for template loading. This is a hook that allows you to custom-configure - * the configuration object in a subclass, or to fetch it from an IoC - * container.
The default implementation obtains the configuration - * from the ConfigurationManager instance. - * - * @return configuration - * - * @throws TemplateException in case of freemarker templates related errors - */ - protected Configuration getConfiguration() throws TemplateException { - return freemarkerManager.getConfiguration(ServletActionContext.getServletContext()); - } - - /** - * This method is called from {@link #doExecute(String, ActionInvocation)} - * to obtain the FreeMarker object wrapper object that this result will use - * for adapting objects into template models. This is a hook that allows you - * to custom-configure the wrapper object in a subclass.
The default - * implementation returns {@link Configuration#getObjectWrapper()} - * - * @return object wrapper - */ - protected ObjectWrapper getObjectWrapper() { - return configuration.getObjectWrapper(); - } - - /** - * The default writer writes directly to the response writer. - * - * @return response writer - * - * @throws IOException in case of I/O related errors - */ - protected Writer getWriter() throws IOException { - return PortletActionContext.getRenderResponse().getWriter(); - } - - /** - *

- * Build the instance of the ScopesHashModel, including JspTagLib support - *

- * - *

Objects added to the model are:

- * - *
    - *
  • Application - servlet context attributes hash model - *
  • JspTaglibs - jsp tag lib factory model - *
  • Request - request attributes hash model - *
  • Session - session attributes hash model - *
  • request - the HttpServletRequst object for direct access - *
  • response - the HttpServletResponse object for direct access - *
  • stack - the OgnLValueStack instance for direct access - *
  • action - the action itself - *
  • exception - optional : the JSP or Servlet exception as per the - * servlet spec (for JSP Exception pages) - *
  • struts - instance of the StrutsUtil class - *
- * - * @return freemarker template model - * - * @throws TemplateModelException in case of template model errors - */ - protected TemplateModel createModel() throws TemplateModelException { - ServletContext servletContext = ServletActionContext.getServletContext(); - HttpServletRequest request = ServletActionContext.getRequest(); - HttpServletResponse response = ServletActionContext.getResponse(); - ValueStack stack = ServletActionContext.getActionContext().getValueStack(); - return freemarkerManager.buildTemplateModel(stack, invocation.getAction(), servletContext, request, response, wrapper); - } - - /** - * @return the locale used for the - * {@link Configuration#getTemplate(String, Locale)}call. The base - * implementation simply returns the locale setting of the configuration. - * Override this method to provide different behaviour, - */ - protected Locale deduceLocale() { - return configuration.getLocale(); - } - - /** - * the default implementation of postTemplateProcess applies the contentType - * parameter - * - * @param template freemarker template - * @param data model data - * - * @throws IOException in case of I/O related errors - */ - protected void postTemplateProcess(Template template, TemplateModel data) throws IOException { - } - - /** - * Called before the execution is passed to template.process(). This is a - * generic hook you might use in subclasses to perform a specific action - * before the template is processed. By default does nothing. A typical - * action to perform here is to inject application-specific objects into the - * model root - * - * @param template freemarker template - * @param model model data - * - * @return true to process the template, false to suppress template - * processing. - * - * @throws IOException in case of I/O related errors - */ - protected boolean preTemplateProcess(Template template, TemplateModel model) throws IOException { - Object attrContentType = template.getCustomAttribute("content_type"); - - if (attrContentType != null) { - ServletActionContext.getResponse().setContentType( - attrContentType.toString()); - } else { - String contentType = getContentType(); - - if (contentType == null) { - contentType = "text/html"; - } - - String encoding = template.getEncoding(); - - if (encoding != null) { - contentType = contentType + "; charset=" + encoding; - } - - ServletActionContext.getResponse().setContentType(contentType); - } - - return true; - } -} - diff --git a/plugins/portlet/src/main/resources/LICENSE.txt b/plugins/portlet/src/main/resources/LICENSE.txt deleted file mode 100644 index c6055ec8f..000000000 --- a/plugins/portlet/src/main/resources/LICENSE.txt +++ /dev/null @@ -1,174 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/plugins/portlet/src/main/resources/NOTICE.txt b/plugins/portlet/src/main/resources/NOTICE.txt deleted file mode 100644 index 12fa3b83d..000000000 --- a/plugins/portlet/src/main/resources/NOTICE.txt +++ /dev/null @@ -1,5 +0,0 @@ -Apache Struts -Copyright 2000-2011 The Apache Software Foundation - -This product includes software developed by -The Apache Software Foundation (http://www.apache.org/). \ No newline at end of file diff --git a/plugins/portlet/src/main/resources/struts-plugin.xml b/plugins/portlet/src/main/resources/struts-plugin.xml deleted file mode 100644 index 9e319ea58..000000000 --- a/plugins/portlet/src/main/resources/struts-plugin.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${location} - - - ${location} - - - ${location} - - - diff --git a/plugins/portlet/src/site/site.xml b/plugins/portlet/src/site/site.xml deleted file mode 100644 index 54fdcf4f4..000000000 --- a/plugins/portlet/src/site/site.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - org.apache.maven.skins - maven-fluido-skin - ${fluido-skin.version} - - - Apache Software Foundation - http://www.apache.org/images/asf-logo.gif - http://www.apache.org/ - - - Apache Struts - http://struts.apache.org/img/struts-logo.svg - http://struts.apache.org/ - - - - - - - - - - - - -
- - Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project - logos are trademarks of The Apache Software Foundation. - ]]> -
- - diff --git a/plugins/portlet/src/test/java/org/apache/struts2/StrutsTestCasePortletTests.java b/plugins/portlet/src/test/java/org/apache/struts2/StrutsTestCasePortletTests.java deleted file mode 100644 index 68993e445..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/StrutsTestCasePortletTests.java +++ /dev/null @@ -1,224 +0,0 @@ -/* - * 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; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.ActionProxyFactory; -import com.opensymphony.xwork2.XWorkTestCase; -import com.opensymphony.xwork2.config.Configuration; -import java.io.UnsupportedEncodingException; -import java.util.HashMap; -import java.util.Map; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.apache.struts2.dispatcher.Dispatcher; -import org.apache.struts2.dispatcher.HttpParameters; -import org.apache.struts2.dispatcher.mapper.ActionMapper; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.util.StrutsTestCaseHelper; -import org.springframework.core.io.DefaultResourceLoader; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.mock.web.MockPageContext; -import org.springframework.mock.web.MockServletContext; - -/* - * Changes: This is a copy of org.apache.struts2.StrutsTestCase from the Struts 2 junit-plugin, kept in - * in the same package org.apache.struts2 and renamed. Removed some unused imports, made - * imports alphabetical and made some whitespace changes and modified a comment. - * The StrutsTestCasePortletTests is needed in order to break a dependency-cycle between the - * portlet-plugin and junit-plugin with respect to StrutsTestCase. - * - * Note: If the junit-plugin StrutsTestCase is updated/modified, it may be appropriate to update - * this version as well, for consistency (but they may diverge in the future). - * The StrutsTestCasePortletTests is intentionally kept at the test scope of the portlet-plugin - * as it only exists due to the dependency-cycle issue. The junit-plugin StrutsTestCase should - * be used elswehere. - */ - -/** - * Base test case for JUnit testing Struts within the portlet-plugin unit tests. - */ -public abstract class StrutsTestCasePortletTests extends XWorkTestCase { - protected MockHttpServletResponse response; - protected MockHttpServletRequest request; - protected MockPageContext pageContext; - protected MockServletContext servletContext; - protected Map dispatcherInitParams; - protected Dispatcher dispatcher; - protected DefaultResourceLoader resourceLoader = new DefaultResourceLoader(); - - /** - * gets an object from the stack after an action is executed - */ - protected Object findValueAfterExecute(String key) { - return ServletActionContext.getValueStack(request).findValue(key); - } - - /** - * Executes an action and returns it's output (not the result returned from - * execute()), but the actual output that would be written to the response. - * For this to work the configured result for the action needs to be - * FreeMarker, or Velocity (JSPs can be used with the Embedded JSP plugin) - */ - protected String executeAction(String uri) throws ServletException, UnsupportedEncodingException { - request.setRequestURI(uri); - ActionMapping mapping = getActionMapping(request); - - assertNotNull(mapping); - Dispatcher.getInstance().serviceAction(request, response, mapping); - - if (response.getStatus() != HttpServletResponse.SC_OK) { - throw new ServletException("Error code [" + response.getStatus() + "], Error: [" + response.getErrorMessage() + "]"); - } - return response.getContentAsString(); - } - - /** - * Creates an action proxy for a request, and sets parameters of the ActionInvocation to the passed - * parameters. Make sure to set the request parameters in the protected "request" object before calling this method. - */ - protected ActionProxy getActionProxy(String uri) { - request.setRequestURI(uri); - ActionMapping mapping = getActionMapping(request); - String namespace = mapping.getNamespace(); - String name = mapping.getName(); - String method = mapping.getMethod(); - - Configuration config = configurationManager.getConfiguration(); - ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy( - namespace, name, method, new HashMap(), true, false); - - initActionContext(proxy.getInvocation().getInvocationContext()); - - // this is normally done in onSetUp(), but we are using Struts internal - // objects (proxy and action invocation) - // so we have to hack around so it works - ServletActionContext.setServletContext(servletContext); - ServletActionContext.setRequest(request); - ServletActionContext.setResponse(response); - - return proxy; - } - - /** - * A helper method which allows instantiate an action if this action extends - * {@link com.opensymphony.xwork2.ActionSupport} or any other action class - * that requires framework's dependencies injection. - */ - protected T createAction(Class clazz) { - return container.inject(clazz); - } - - protected void initActionContext(ActionContext actionContext) { - actionContext.withParameters(HttpParameters.create(request.getParameterMap()).build()); - initSession(actionContext); - applyAdditionalParams(actionContext); - // set the action context to the one used by the proxy - ActionContext.bind(actionContext); - } - - protected void initSession(ActionContext actionContext) { - if (actionContext.getSession() == null) { - actionContext.withSession(new HashMap<>()); - request.setSession(new MockHttpSession(servletContext)); - } - } - - /** - * Can be overwritten in subclass to provide additional context's params and settings used during action invocation - * - * @param context current {@link ActionContext} - */ - protected void applyAdditionalParams(ActionContext context) { - // empty be default - } - - /** - * Finds an ActionMapping for a given request - */ - protected ActionMapping getActionMapping(HttpServletRequest request) { - return container.getInstance(ActionMapper.class).getMapping(request, configurationManager); - } - - /** - * Finds an ActionMapping for a given url - */ - protected ActionMapping getActionMapping(String url) { - MockHttpServletRequest req = new MockHttpServletRequest(); - req.setRequestURI(url); - return getActionMapping(req); - } - - /** - * Injects dependencies on an Object using Struts internal IoC container - */ - protected void injectStrutsDependencies(Object object) { - container.inject(object); - } - - /** - * Sets up the configuration settings, XWork configuration, and - * message resources - */ - protected void setUp() throws Exception { - super.setUp(); - initServletMockObjects(); - setupBeforeInitDispatcher(); - dispatcher = initDispatcher(dispatcherInitParams); - setupAfterInitDispatcher(dispatcher); - } - - protected void setupBeforeInitDispatcher() throws Exception { - // empty by default - } - - protected void setupAfterInitDispatcher(Dispatcher dispatcher) { - // empty by default - } - - protected void initServletMockObjects() { - servletContext = new MockServletContext(resourceLoader); - response = new MockHttpServletResponse(); - request = new MockHttpServletRequest(); - pageContext = new MockPageContext(servletContext, request, response); - } - - protected Dispatcher initDispatcher(Map params) { - Dispatcher du = StrutsTestCaseHelper.initDispatcher(servletContext, params); - configurationManager = du.getConfigurationManager(); - configuration = configurationManager.getConfiguration(); - container = configuration.getContainer(); - return du; - } - - protected void tearDown() throws Exception { - super.tearDown(); - // maybe someone else already destroyed Dispatcher - if (dispatcher != null && dispatcher.getConfigurationManager() != null) { - dispatcher.cleanup(); - dispatcher = null; - } - StrutsTestCaseHelper.tearDown(); - } - -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/components/PortletAction.java b/plugins/portlet/src/test/java/org/apache/struts2/components/PortletAction.java deleted file mode 100644 index 5e8f31e4e..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/components/PortletAction.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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.Action; - -public class PortletAction { - - public String execute() { - return Action.SUCCESS; - } - -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java b/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java deleted file mode 100644 index afc2c5c2b..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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.ActionProxy; -import com.opensymphony.xwork2.util.ValueStack; -import org.apache.struts2.StrutsStatics; -import org.apache.struts2.StrutsTestCasePortletTests; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.mock.web.portlet.MockMimeResponse; -import org.apache.struts2.mock.web.portlet.MockPortletContext; -import org.apache.struts2.mock.web.portlet.MockPortletRequest; - -import javax.portlet.PortletContext; -import javax.portlet.PortletMode; - -import java.io.StringWriter; -import java.io.Writer; -import java.util.Collections; - -public class PortletUrlRendererTest extends StrutsTestCasePortletTests { - - private ValueStack stack; - - public void setUp() throws Exception { - super.setUp(); - - ActionProxy actionProxy = getActionProxy("/portlettest/test"); // creates new empty ActionContext - ActionContext.getContext().withActionInvocation(actionProxy.getInvocation()); - - PortletContext portletCtx = new MockPortletContext(); - ActionContext.getContext().put(StrutsStatics.STRUTS_PORTLET_CONTEXT, portletCtx); - ActionContext.getContext().put(PortletConstants.REQUEST, new MockPortletRequest(portletCtx)); - ActionContext.getContext().put(PortletConstants.RESPONSE, new MockMimeResponse()); - ActionContext.getContext().put(PortletConstants.MODE_NAMESPACE_MAP, Collections.emptyMap()); - - stack = actionProxy.getInvocation().getStack(); - } - - public void testRenderUrlWithNamespace() throws Exception { - // given - PortletUrlRenderer renderer = new PortletUrlRenderer(); - UrlProvider component = new URL(stack, request, response).getUrlProvider(); - Writer writer = new StringWriter(); - - // when - renderer.renderUrl(writer, component); - - // then - assertTrue("/portlettest".equals(component.getNamespace())); - } - - public void testIsPortelModeChanged() { - PortletUrlRenderer renderer = new PortletUrlRenderer(); - PortletMode mode = new PortletMode("test"); - UrlProvider provider = new ComponentUrlProvider(null, null); - provider.setPortletMode("test2"); - - assertTrue(renderer.isPortletModeChange(provider, mode)); - } - -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletApplicationMapTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletApplicationMapTest.java deleted file mode 100644 index 5a816d27d..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletApplicationMapTest.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * 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.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import javax.portlet.PortletContext; - -import org.jmock.Mock; -import org.jmock.MockObjectTestCase; -import org.jmock.core.Constraint; - -/** - */ -public class PortletApplicationMapTest extends MockObjectTestCase { - - Mock mockPortletContext; - - PortletContext portletContext; - - public void setUp() throws Exception { - super.setUp(); - mockPortletContext = mock(PortletContext.class); - portletContext = (PortletContext) mockPortletContext.proxy(); - } - - public void testGetFromAttributes() { - mockPortletContext.stubs().method("getAttribute").with(eq("dummyKey")) - .will(returnValue("dummyValue")); - - PortletApplicationMap map = new PortletApplicationMap( - (PortletContext) mockPortletContext.proxy()); - - assertEquals("dummyValue", map.get("dummyKey")); - } - - public void testGetFromInitParameters() { - mockPortletContext.stubs().method("getAttribute").with(eq("dummyKey")); - mockPortletContext.stubs().method("getInitParameter").with( - eq("dummyKey")).will(returnValue("dummyValue")); - - PortletApplicationMap map = new PortletApplicationMap( - (PortletContext) mockPortletContext.proxy()); - - assertEquals("dummyValue", map.get("dummyKey")); - } - - public void testPut() { - mockPortletContext.expects(once()).method("setAttribute").with( - new Constraint[] { eq("dummyKey"), eq("dummyValue") }); - mockPortletContext.expects(once()).method("getAttribute").with( - eq("dummyKey")).will(returnValue("dummyValue")); - PortletApplicationMap map = new PortletApplicationMap(portletContext); - Object val = map.put("dummyKey", "dummyValue"); - assertEquals("dummyValue", val); - } - - public void testRemove() { - mockPortletContext.expects(once()).method("getAttribute").with( - eq("dummyKey")).will(returnValue("dummyValue")); - mockPortletContext.expects(once()).method("removeAttribute").with( - eq("dummyKey")); - PortletApplicationMap map = new PortletApplicationMap(portletContext); - Object val = map.remove("dummyKey"); - assertEquals("dummyValue", val); - } - - public void testEntrySet() { - - Enumeration names = new Enumeration() { - - List keys = Arrays.asList("key1", "key2"); - - Iterator it = keys.iterator(); - - public boolean hasMoreElements() { - return it.hasNext(); - } - - public Object nextElement() { - return it.next(); - } - - }; - Enumeration initParamNames = new Enumeration() { - - List keys = Arrays.asList("key3"); - - Iterator it = keys.iterator(); - - public boolean hasMoreElements() { - return it.hasNext(); - } - - public Object nextElement() { - return it.next(); - } - - }; - - mockPortletContext.stubs().method("getAttributeNames").will( - returnValue(names)); - mockPortletContext.stubs().method("getInitParameterNames").will( - returnValue(initParamNames)); - mockPortletContext.stubs().method("getAttribute").with(eq("key1")) - .will(returnValue("value1")); - mockPortletContext.stubs().method("getAttribute").with(eq("key2")) - .will(returnValue("value2")); - mockPortletContext.stubs().method("getAttribute").with(eq("key3")) - .will(returnValue(null)); - mockPortletContext.stubs().method("getInitParameter").with(eq("key3")) - .will(returnValue("value3")); - - PortletApplicationMap map = new PortletApplicationMap(portletContext); - - Set keySet = map.keySet(); - assertEquals(3, keySet.size()); - assertTrue(keySet.contains("key1")); - assertTrue(keySet.contains("key2")); - assertTrue(keySet.contains("key3")); - assertEquals("value1", map.get("key1")); - assertEquals("value2", map.get("key2")); - assertEquals("value3", map.get("key3")); - - // test iterator - Set expectedKeys = new HashSet(); - expectedKeys.add("key1"); - expectedKeys.add("key2"); - expectedKeys.add("key3"); - - Set> entrySet = map.entrySet(); - for (Entry entry : entrySet) { - String key = entry.getKey(); - assertTrue(expectedKeys.contains(key)); - } - - } - - public void testClear() { - - mockPortletContext.expects(once()).method("removeAttribute").with(eq("key1")); - mockPortletContext.expects(once()).method("removeAttribute").with(eq("key2")); - - ArrayList dummy = new ArrayList(); - dummy.add("key1"); - dummy.add("key2"); - - mockPortletContext.expects(once()).method("getAttributeNames").will( - returnValue(Collections.enumeration(dummy))); - - PortletApplicationMap map = new PortletApplicationMap(portletContext); - map.clear(); - } -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletRequestMapTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletRequestMapTest.java deleted file mode 100644 index a282f2e8d..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletRequestMapTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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.Iterator; -import java.util.Map; -import java.util.Set; - -import javax.portlet.PortletRequest; - -import org.jmock.MockObjectTestCase; -import org.apache.struts2.mock.web.portlet.MockPortletRequest; - - -/** - * PortletRequestMapTest. Insert description. - * - */ -public class PortletRequestMapTest extends MockObjectTestCase { - - public void testGet() { - PortletRequest request = new MockPortletRequest(); - request.setAttribute("testAttribute", "testValue"); - - PortletRequestMap map = new PortletRequestMap(request); - String value = (String)map.get("testAttribute"); - assertEquals("testValue", value); - } - - public void testPut() { - PortletRequest request = new MockPortletRequest(); - PortletRequestMap map = new PortletRequestMap(request); - Object obj = map.put("testAttribute", "testValue1"); - - assertEquals(obj, "testValue1"); - assertEquals("testValue1", request.getAttribute("testAttribute")); - } - - public void testClear() { - MockPortletRequest request = new MockPortletRequest(); - request.setAttribute("testAttribute1", "testValue1"); - request.setAttribute("testAttribute2", "testValue2"); - - - PortletRequestMap map = new PortletRequestMap(request); - map.clear(); - - assertFalse(request.getAttributeNames().hasMoreElements()); - } - - public void testRemove() { - MockPortletRequest request = new MockPortletRequest(); - request.setAttribute("testAttribute1", "testValue1"); - - PortletRequestMap map = new PortletRequestMap(request); - assertEquals("testValue1", map.remove("testAttribute1")); - assertNull(request.getAttribute("testAttribute1")); - } - - public void testEntrySet() { - MockPortletRequest request = new MockPortletRequest(); - request.setAttribute("testAttribute1", "testValue1"); - request.setAttribute("testAttribute2", "testValue2"); - - PortletRequestMap map = new PortletRequestMap(request); - Set entries = map.entrySet(); - - assertEquals(3, entries.size()); - Iterator it = entries.iterator(); - for (Iterator iterator = entries.iterator(); iterator.hasNext();) { - Map.Entry entry = (Map.Entry) iterator.next(); - checkEntry(entry); - } - } - - private void checkEntry(Map.Entry entry) { - if(entry.getKey().equals("testAttribute1")) { - assertEquals("testValue1", entry.getValue()); - } - else if(entry.getKey().equals("testAttribute2")) { - assertEquals("testValue2", entry.getValue()); - } - else if(entry.getKey().equals("javax.portlet.lifecycle_phase")) { - assertNull(entry.getValue()); - } - else { - fail("Unexpected entry in entry set: " + entry); - } - } - -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletSessionMapTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletSessionMapTest.java deleted file mode 100644 index a92c52167..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/PortletSessionMapTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * 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.Iterator; -import java.util.Map; -import java.util.Set; - -import javax.portlet.PortletSession; - -import junit.framework.TestCase; - -import org.apache.struts2.mock.web.portlet.MockPortletRequest; - - -/** - * PortletSessionMapTest. Insert description. - * - */ -public class PortletSessionMapTest extends TestCase { - - public void testPut() { - - MockPortletRequest request = new MockPortletRequest(); - - PortletSessionMap map = new PortletSessionMap(request); - assertEquals("testValue1", map.put("testAttribute1", "testValue1")); - assertEquals("testValue2", map.put("testAttribute2", "testValue2")); - - PortletSession session = request.getPortletSession(); - // Assert that the values has been propagated to the session - assertEquals("testValue1", session.getAttribute("testAttribute1")); - assertEquals("testValue2", session.getAttribute("testAttribute2")); - } - - public void testGet() { - MockPortletRequest request = new MockPortletRequest(); - PortletSession session = request.getPortletSession(); - session.setAttribute("testAttribute1", "testValue1"); - session.setAttribute("testAttribute2", "testValue2"); - PortletSessionMap map = new PortletSessionMap(request); - Object val1 = map.get("testAttribute1"); - Object val2 = map.get("testAttribute2"); - // Assert that the values from the session is in the map - assertEquals("testValue1", val1); - assertEquals("testValue2", val2); - } - - public void testClear() { - MockPortletRequest req = new MockPortletRequest(); - PortletSession session = req.getPortletSession(); - session.setAttribute("testAttribute1", "testValue1"); - session.setAttribute("testAttribute2", "testValue2"); - - PortletSessionMap map = new PortletSessionMap(req); - map.clear(); - - // Assert that there are no elements in the portlet session - assertFalse(req.getPortletSession().getAttributeNames().hasMoreElements()); - } - - public void testRemove() { - MockPortletRequest request = new MockPortletRequest(); - PortletSession session = request.getPortletSession(); - session.setAttribute("testAttribute1", "testValue1"); - - PortletSessionMap map = new PortletSessionMap(request); - Object ret = map.remove("testAttribute1"); - // Assert that the element that was removed was returned and the key is no longer in the - // portlet session - assertEquals("testValue1", ret); - assertNull(session.getAttribute("testAttribute1")); - } - - public void testEntrySet() { - MockPortletRequest request = new MockPortletRequest(); - PortletSession session = request.getPortletSession(); - session.setAttribute("testAttribute1", "testValue1"); - session.setAttribute("testAttribute2", "testValue2"); - - PortletSessionMap map = new PortletSessionMap(request); - Set entries = map.entrySet(); - - assertEquals(2, entries.size()); - Iterator it = entries.iterator(); - Map.Entry entry = (Map.Entry)it.next(); - checkEntry(entry); - entry = (Map.Entry)it.next(); - checkEntry(entry); - - } - - private void checkEntry(Map.Entry entry) { - if(entry.getKey().equals("testAttribute1")) { - assertEquals("testValue1", entry.getValue()); - } - else if(entry.getKey().equals("testAttribute2")) { - assertEquals("testValue2", entry.getValue()); - } - else { - fail("Unexpected entry in etry set: " + entry); - } - } - - -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java deleted file mode 100644 index 4088ba7e2..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * 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 com.opensymphony.xwork2.ActionContext; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.portlet.PortletPhase; -import org.jmock.Mock; -import org.jmock.MockObjectTestCase; - -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; -import javax.portlet.PortletConfig; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import java.util.HashMap; -import java.util.Map; - -import static org.apache.struts2.portlet.PortletConstants.DEFAULT_ACTION_FOR_MODE; -import static org.apache.struts2.portlet.PortletConstants.PHASE; -import static org.apache.struts2.portlet.PortletConstants.PORTLET_CONFIG; -import static org.apache.struts2.portlet.PortletConstants.PORTLET_NAMESPACE; -import static org.apache.struts2.portlet.PortletConstants.REQUEST; -import static org.apache.struts2.portlet.PortletConstants.RESPONSE; -import static org.apache.struts2.portlet.context.PortletActionContext.getActionRequest; -import static org.apache.struts2.portlet.context.PortletActionContext.getActionResponse; -import static org.apache.struts2.portlet.context.PortletActionContext.getDefaultActionForMode; -import static org.apache.struts2.portlet.context.PortletActionContext.getPhase; -import static org.apache.struts2.portlet.context.PortletActionContext.getPortletConfig; -import static org.apache.struts2.portlet.context.PortletActionContext.getPortletNamespace; -import static org.apache.struts2.portlet.context.PortletActionContext.getRenderRequest; -import static org.apache.struts2.portlet.context.PortletActionContext.getRenderResponse; -import static org.apache.struts2.portlet.context.PortletActionContext.getRequest; -import static org.apache.struts2.portlet.context.PortletActionContext.getResponse; - -/** - */ -public class PortletActionContextTest extends MockObjectTestCase { - - Mock mockRenderRequest; - Mock mockRenderResponse; - Mock mockPortletConfig; - Mock mockActionRequest; - Mock mockActionResponse; - - RenderRequest renderRequest; - RenderResponse renderResponse; - - ActionRequest actionRequest; - ActionResponse actionResponse; - - PortletConfig portletConfig; - - Map context = new HashMap<>(); - - public void setUp() throws Exception { - super.setUp(); - mockRenderRequest = mock(RenderRequest.class); - mockRenderResponse = mock(RenderResponse.class); - mockActionRequest = mock(ActionRequest.class); - mockActionResponse = mock(ActionResponse.class); - mockPortletConfig = mock(PortletConfig.class); - - renderRequest = (RenderRequest)mockRenderRequest.proxy(); - renderResponse = (RenderResponse)mockRenderResponse.proxy(); - actionRequest = (ActionRequest)mockActionRequest.proxy(); - actionResponse = (ActionResponse)mockActionResponse.proxy(); - portletConfig = (PortletConfig)mockPortletConfig.proxy(); - - - ActionContext.of(context).bind(); - } - - public void testGetPhase() { - context.put(PHASE, PortletPhase.RENDER_PHASE); - - assertEquals(PortletPhase.RENDER_PHASE, getPhase()); - } - - public void testIsRender() { - context.put(PHASE, PortletPhase.RENDER_PHASE); - - PortletPhase phase = getPhase(); - - assertTrue(phase.isRender()); - assertFalse(phase.isAction()); - assertFalse(phase.isEvent()); - } - - public void testIsAction() { - context.put(PHASE, PortletPhase.ACTION_PHASE); - - PortletPhase phase = getPhase(); - - assertTrue(phase.isAction()); - assertFalse(phase.isRender()); - assertFalse(phase.isEvent()); - } - - public void testIsEvent() { - context.put(PHASE, PortletPhase.EVENT_PHASE); - - PortletPhase phase = getPhase(); - - assertTrue(phase.isEvent()); - assertFalse(phase.isAction()); - assertFalse(phase.isRender()); - } - - public void testGetPortletConfig() { - context.put(PORTLET_CONFIG, portletConfig); - assertSame(portletConfig, getPortletConfig()); - } - - public void testGetRenderRequestAndResponse() { - context.put(REQUEST, renderRequest); - context.put(RESPONSE, renderResponse); - context.put(PHASE, PortletPhase.RENDER_PHASE); - assertSame(renderRequest, getRenderRequest()); - assertSame(renderResponse, getRenderResponse()); - assertSame(renderRequest, getRequest()); - assertSame(renderResponse, getResponse()); - } - - public void testGetRenderRequestAndResponseInEventPhase() { - context.put(REQUEST, renderRequest); - context.put(RESPONSE, renderResponse); - context.put(PHASE, PortletPhase.ACTION_PHASE); - try { - getRenderRequest(); - fail("Should throw IllegalStateException!"); - } - catch(IllegalStateException e) { - assertTrue(true); - } - try { - getRenderResponse(); - fail("Should throw IllegalStateException!"); - } - catch(IllegalStateException e) { - assertTrue(true); - } - } - - public void testGetActionRequestAndResponse() { - context.put(REQUEST, actionRequest); - context.put(RESPONSE, actionResponse); - context.put(PHASE, PortletPhase.ACTION_PHASE); - assertSame(actionRequest, getActionRequest()); - assertSame(actionResponse, getActionResponse()); - assertSame(actionRequest, getRequest()); - assertSame(actionResponse, getResponse()); - } - - public void testGetActionRequestAndResponseInRenderPhase() { - context.put(REQUEST, actionRequest); - context.put(RESPONSE, actionResponse); - context.put(PHASE, PortletPhase.RENDER_PHASE); - try { - getActionRequest(); - fail("Should throw IllegalStateException!"); - } - catch(IllegalStateException e) { - assertTrue(true); - } - try { - getActionResponse(); - fail("Should throw IllegalStateException!"); - } - catch(IllegalStateException e) { - assertTrue(true); - } - } - - public void testGetNamespace() { - context.put(PORTLET_NAMESPACE, "testNamespace"); - assertEquals("testNamespace", getPortletNamespace()); - } - - public void testGetDefaultActionForMode() { - ActionMapping mapping = new ActionMapping(); - context.put(DEFAULT_ACTION_FOR_MODE, mapping); - assertEquals(mapping, getDefaultActionForMode()); - } - - public void tearDown() throws Exception { - ActionContext.clear(); - super.tearDown(); - } - -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java deleted file mode 100644 index 0c54cf235..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * 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 com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.ActionProxyFactory; -import com.opensymphony.xwork2.util.ValueStack; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import static org.apache.struts2.portlet.PortletConstants.*; -import org.easymock.EasyMock; -import org.jmock.Mock; -import org.jmock.cglib.MockObjectTestCase; -import org.jmock.core.Constraint; -import org.apache.struts2.mock.web.portlet.MockPortletConfig; -import org.apache.struts2.mock.web.portlet.MockPortletContext; - -import javax.portlet.*; -import java.util.*; - -/** - * Jsr168DispatcherTest. Insert description. - * - */ -public class Jsr168DispatcherTest extends MockObjectTestCase { - - private final String MULTIPART_REQUEST = "-----------------------------4827543632391\r\n" - + "Content-Disposition: form-data; name=\"upload\"; filename=\"test.txt\"\r\n" - + "Content-Type: text/plain\r\n" - + "\r\n" - + "This is a test file\r\n" - + "-----------------------------4827543632391\r\n" - + "Content-Disposition: form-data; name=\"caption\"\r\n" - + "\r\n" - + "TestCaption\r\n" - + "-----------------------------4827543632391--"; - - Jsr168Dispatcher dispatcher = null; - Mock mockConfig = null; - Mock mockCtx = null; - Mock mockRequest = null; - Mock mockSession = null; - Mock mockActionFactory = null; - Mock mockActionProxy = null; - Mock mockAction = null; - Mock mockInvocation = null; - - public void setUp() { - dispatcher = new Jsr168Dispatcher(); - } - - private void initPortletConfig(final Map initParams, final Map attributes) { - mockConfig = mock(PortletConfig.class); - mockCtx = mock(PortletContext.class); - mockConfig.stubs().method(ANYTHING); - mockCtx.stubs().method(ANYTHING); - setupStub(initParams, mockConfig, "getInitParameter"); - mockCtx.stubs().method("getAttributeNames").will(returnValue(Collections.enumeration(attributes.keySet()))); - setupStub(attributes, mockCtx, "getAttribute"); - mockConfig.stubs().method("getPortletContext").will(returnValue(mockCtx.proxy())); - mockCtx.stubs().method("getInitParameterNames").will(returnValue(Collections.enumeration(initParams.keySet()))); - setupStub(initParams, mockCtx, "getInitParameter"); - mockConfig.stubs().method("getInitParameterNames").will(returnValue(Collections.enumeration(initParams.keySet()))); - setupStub(initParams, mockConfig, "getInitParameter"); - mockConfig.stubs().method("getResourceBundle").will(returnValue(new ListResourceBundle() { - protected Object[][] getContents() { - return new String[][]{{"javax.portlet.title", "MyTitle"}}; - } - })); - } - - private void setupActionFactory(String namespace, String actionName, String result, ValueStack stack) { - if(mockActionFactory == null) { - mockActionFactory = mock(ActionProxyFactory.class); - } - mockAction = mock(Action.class); - mockActionProxy = mock(ActionProxy.class); - mockInvocation = mock(ActionInvocation.class); - - mockActionFactory.expects(once()).method("createActionProxy").with(new Constraint[]{eq(namespace), eq(actionName), NULL, isA(Map.class)}).will(returnValue(mockActionProxy.proxy())); - mockActionProxy.stubs().method("getAction").will(returnValue(mockAction.proxy())); - mockActionProxy.expects(once()).method("execute").will(returnValue(result)); - mockActionProxy.expects(once()).method("getInvocation").will(returnValue(mockInvocation.proxy())); - mockInvocation.stubs().method("getStack").will(returnValue(stack)); - - } - - public void testParseConfigWithBang() { - MockPortletContext portletContext = new MockPortletContext(); - MockPortletConfig portletConfig = new MockPortletConfig(portletContext); - - portletConfig.addInitParameter("viewNamespace", "/view"); - portletConfig.addInitParameter("defaultViewAction", "index!input"); - - Map actionMap = new HashMap(); - - dispatcher.parseModeConfig(actionMap, portletConfig, PortletMode.VIEW, "viewNamespace", "defaultViewAction"); - - ActionMapping mapping = actionMap.get(PortletMode.VIEW); - assertEquals("index", mapping.getName()); - assertEquals("/view", mapping.getNamespace()); - assertEquals("input", mapping.getMethod()); - } - - public void testRender_ok() { - final Mock mockResponse = mock(RenderResponse.class); - mockResponse.stubs().method(ANYTHING); - - PortletMode mode = PortletMode.VIEW; - - Map requestParams = new HashMap(); - requestParams.put(ACTION_PARAM, new String[]{"/view/testAction"}); - requestParams.put(EVENT_ACTION, new String[]{"true"}); - requestParams.put(MODE_PARAM, new String[]{mode.toString()}); - - Map sessionMap = new HashMap(); - - - - Map initParams = new HashMap(); - initParams.put("viewNamespace", "/view"); - initParams.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE, "true"); - - initPortletConfig(initParams, new HashMap()); - initRequest(requestParams, new HashMap(), sessionMap, PortletMode.VIEW, WindowState.NORMAL, false, null); - setupActionFactory("/view", "testAction", "success", EasyMock.createNiceMock(ValueStack.class)); - - mockInvocation.expects(once()).method("getStack").will( - returnValue(null)); - //mockSession.expects(once()).method("setAttribute").with(new Constraint[]{eq(PortletActionConstants.LAST_MODE), eq(PortletMode.VIEW)}); - try { - dispatcher - .setActionProxyFactory((ActionProxyFactory) mockActionFactory - .proxy()); - dispatcher.init((PortletConfig) mockConfig.proxy()); - dispatcher.render((RenderRequest) mockRequest.proxy(), - (RenderResponse) mockResponse.proxy()); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occured"); - } - } - - public void testProcessAction_ok() { - final Mock mockResponse = mock(ActionResponse.class); - - PortletMode mode = PortletMode.VIEW; - Map initParams = new HashMap(); - initParams.put("viewNamespace", "/view"); - - Map requestParams = new HashMap(); - requestParams.put(ACTION_PARAM, new String[]{"/view/testAction"}); - requestParams.put(MODE_PARAM, new String[]{mode.toString()}); - - initParams.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE, "true"); - initPortletConfig(initParams, new HashMap()); - initRequest(requestParams, new HashMap(), new HashMap(), PortletMode.VIEW, WindowState.NORMAL, true, null); - setupActionFactory("/view", "testAction", "success", EasyMock.createNiceMock(ValueStack.class)); - //mockSession.expects(once()).method("setAttribute").with(new Constraint[]{eq(PortletActionConstants.LAST_MODE), eq(PortletMode.VIEW)}); - try { - dispatcher - .setActionProxyFactory((ActionProxyFactory) mockActionFactory - .proxy()); - dispatcher.init((PortletConfig) mockConfig.proxy()); - dispatcher.processAction((ActionRequest) mockRequest.proxy(), - (ActionResponse) mockResponse.proxy()); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occured"); - } - } - - /** - * Initialize the mock request (and as a result, the mock session) - * @param requestParams The request parameters - * @param requestAttributes The request attributes - * @param sessionParams The session attributes - * @param mode The portlet mode - * @param state The portlet window state - * @param isEvent true when the request is an ActionRequest. - * @param locale The locale. If null, the request will return Locale.getDefault() - */ - private void initRequest(Map requestParams, Map requestAttributes, Map sessionParams, PortletMode mode, WindowState state, boolean isEvent, Locale locale) { - mockRequest = isEvent ? mock(ActionRequest.class) : mock(RenderRequest.class); - mockSession = mock(PortletSession.class); - mockSession.stubs().method(ANYTHING); - mockRequest.stubs().method(ANYTHING); - setupStub(sessionParams, mockSession, "getAttribute"); - mockSession.stubs().method("getAttributeNames").will(returnValue(Collections.enumeration(sessionParams.keySet()))); - setupParamStub(requestParams, mockRequest, "getParameter"); - setupStub(requestAttributes, mockRequest, "getAttribute"); - mockRequest.stubs().method("getAttributeNames").will(returnValue(Collections.enumeration(requestAttributes.keySet()))); - mockRequest.stubs().method("getParameterMap").will(returnValue(requestParams)); - mockRequest.stubs().method("getParameterNames").will(returnValue(Collections.enumeration(requestParams.keySet()))); - mockRequest.stubs().method("getPortletSession").will(returnValue(mockSession.proxy())); - if(locale != null) { - mockRequest.stubs().method("getLocale").will(returnValue(locale)); - } - else { - mockRequest.stubs().method("getLocale").will(returnValue(Locale.getDefault())); - } - mockRequest.stubs().method("getPortletMode").will(returnValue(mode)); - mockRequest.stubs().method("getWindowState").will(returnValue(state)); - } - - private void setupParamStub(Map requestParams, Mock mockRequest, String method) { - Map newMap = new HashMap(); - for ( String key : requestParams.keySet() ) { - String[] val = requestParams.get(key); - newMap.put(key, val[0]); - } - setupStub(newMap, mockRequest, method); - - } - - /** - * Set up stubs for the mock. - * @param map The map containing the key and values. The key is the - * expected parameter to method, and value is the value that should be returned from - * the stub. - * @param mock The mock to initialize. - * @param method The name of the method to stub. - */ - private void setupStub(Map map, Mock mock, String method) { - for ( Object key : map.keySet() ) { - Object val = map.get(key); - mock.stubs().method(method).with(eq(key)).will(returnValue(val)); - } - } - - public void testModeChangeUsingPortletWidgets() { - final Mock mockResponse = mock(RenderResponse.class); - mockResponse.stubs().method(ANYTHING); - PortletMode mode = PortletMode.EDIT; - - Map requestParams = new HashMap(); - requestParams.put(ACTION_PARAM, new String[]{"/view/testAction"}); - requestParams.put(EVENT_ACTION, new String[]{"false"}); - requestParams.put(MODE_PARAM, new String[]{PortletMode.VIEW.toString()}); - - Map sessionMap = new HashMap(); - - Map initParams = new HashMap(); - initParams.put("viewNamespace", "/view"); - initParams.put("editNamespace", "/edit"); - initParams.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE, "true"); - - initPortletConfig(initParams, new HashMap()); - initRequest(requestParams, new HashMap(), sessionMap, mode, WindowState.NORMAL, false, null); - setupActionFactory("/edit", "default", "success", EasyMock.createNiceMock(ValueStack.class)); - - mockInvocation.expects(once()).method("getStack").will( - returnValue(null)); - //mockSession.expects(once()).method("setAttribute").with(new Constraint[]{eq(PortletActionConstants.LAST_MODE), eq(PortletMode.VIEW)}); - try { - dispatcher - .setActionProxyFactory((ActionProxyFactory) mockActionFactory - .proxy()); - dispatcher.init((PortletConfig) mockConfig.proxy()); - dispatcher.render((RenderRequest) mockRequest.proxy(), - (RenderResponse) mockResponse.proxy()); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occured"); - } - } - -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr286DispatcherTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr286DispatcherTest.java deleted file mode 100644 index 843f4ce85..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr286DispatcherTest.java +++ /dev/null @@ -1,339 +0,0 @@ -/* - * 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 com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.ActionProxyFactory; -import com.opensymphony.xwork2.util.ValueStack; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import static org.apache.struts2.portlet.PortletConstants.*; -import org.easymock.EasyMock; -import org.jmock.Mock; -import org.jmock.cglib.MockObjectTestCase; -import org.jmock.core.Constraint; -import org.apache.struts2.mock.web.portlet.MockPortletConfig; -import org.apache.struts2.mock.web.portlet.MockPortletContext; - -import javax.portlet.*; -import java.util.*; - -/** - * Test portlet actions for porlet 2.0 specification. - * - */ -public class Jsr286DispatcherTest extends MockObjectTestCase { - - Jsr286Dispatcher dispatcher = null; - Mock mockConfig = null; - Mock mockCtx = null; - Mock mockRequest = null; - Mock mockSession = null; - Mock mockActionFactory = null; - Mock mockActionProxy = null; - Mock mockAction = null; - Mock mockInvocation = null; - - - - public void testRender_ok() { - final Mock mockResponse = mock(RenderResponse.class); - mockResponse.stubs().method(ANYTHING); - - PortletMode mode = PortletMode.VIEW; - - Map requestParams = new HashMap(); - requestParams.put(ACTION_PARAM, new String[] { "/view/testAction" }); - requestParams.put(EVENT_ACTION, new String[] { "true" }); - requestParams.put(MODE_PARAM, new String[] { mode.toString() }); - - Map sessionMap = new HashMap(); - - Map initParams = new HashMap(); - initParams.put("viewNamespace", "/view"); - initParams.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE, - "true"); - - initPortletConfig(initParams, new HashMap()); - initRequest(requestParams, new HashMap(), sessionMap, - PortletMode.VIEW, WindowState.NORMAL, false, null); - setupActionFactory("/view", "testAction", "success", - EasyMock.createNiceMock(ValueStack.class)); - - mockInvocation.expects(once()).method("getStack") - .will(returnValue(null)); - try { - dispatcher - .setActionProxyFactory((ActionProxyFactory) mockActionFactory - .proxy()); - dispatcher.init((PortletConfig) mockConfig.proxy()); - dispatcher.render((RenderRequest) mockRequest.proxy(), - (RenderResponse) mockResponse.proxy()); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occured"); - } - } - - public void testProcessAction_ok() { - final Mock mockResponse = mock(ActionResponse.class); - - PortletMode mode = PortletMode.VIEW; - Map initParams = new HashMap(); - initParams.put("viewNamespace", "/view"); - - Map requestParams = new HashMap(); - requestParams.put(ACTION_PARAM, new String[] { "/view/testAction" }); - requestParams.put(MODE_PARAM, new String[] { mode.toString() }); - - initParams.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE, - "true"); - initPortletConfig(initParams, new HashMap()); - initRequest(requestParams, new HashMap(), - new HashMap(), PortletMode.VIEW, - WindowState.NORMAL, true, null); - setupActionFactory("/view", "testAction", "success", - EasyMock.createNiceMock(ValueStack.class)); - - try { - dispatcher - .setActionProxyFactory((ActionProxyFactory) mockActionFactory - .proxy()); - dispatcher.init((PortletConfig) mockConfig.proxy()); - dispatcher.processAction((ActionRequest) mockRequest.proxy(), - (ActionResponse) mockResponse.proxy()); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occured"); - } - } - - public void testModeChangeUsingPortletWidgets() { - final Mock mockResponse = mock(RenderResponse.class); - mockResponse.stubs().method(ANYTHING); - PortletMode mode = PortletMode.EDIT; - - Map requestParams = new HashMap(); - requestParams.put(ACTION_PARAM, new String[] { "/view/testAction" }); - requestParams.put(EVENT_ACTION, new String[] { "false" }); - requestParams.put(MODE_PARAM, - new String[] { PortletMode.VIEW.toString() }); - - Map sessionMap = new HashMap(); - - Map initParams = new HashMap(); - initParams.put("viewNamespace", "/view"); - initParams.put("editNamespace", "/edit"); - initParams.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE, "true"); - - initPortletConfig(initParams, new HashMap()); - initRequest(requestParams, new HashMap(), sessionMap, - mode, WindowState.NORMAL, false, null); - setupActionFactory("/edit", "default", "success", - EasyMock.createNiceMock(ValueStack.class)); - - mockInvocation.expects(once()).method("getStack") - .will(returnValue(null)); - - try { - dispatcher - .setActionProxyFactory((ActionProxyFactory) mockActionFactory - .proxy()); - dispatcher.init((PortletConfig) mockConfig.proxy()); - dispatcher.render((RenderRequest) mockRequest.proxy(), - (RenderResponse) mockResponse.proxy()); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occured"); - } - } - - public void testParseConfigWithBang() { - - MockPortletContext portletContext = new MockPortletContext(); - MockPortletConfig portletConfig = new MockPortletConfig(portletContext); - - portletConfig.addInitParameter("viewNamespace", "/view"); - portletConfig.addInitParameter("defaultViewAction", "index!input"); - - Map actionMap = new HashMap(); - - dispatcher.parseModeConfig(actionMap, portletConfig, PortletMode.VIEW, - "viewNamespace", "defaultViewAction"); - - ActionMapping mapping = actionMap.get(PortletMode.VIEW); - assertEquals("index", mapping.getName()); - assertEquals("/view", mapping.getNamespace()); - assertEquals("input", mapping.getMethod()); - } - - public void setUp() { - dispatcher = new Jsr286Dispatcher(); - } - - private void initPortletConfig(final Map initParams, - final Map attributes) { - mockConfig = mock(PortletConfig.class); - mockCtx = mock(PortletContext.class); - mockConfig.stubs().method(ANYTHING); - mockCtx.stubs().method(ANYTHING); - setupStub(initParams, mockConfig, "getInitParameter"); - mockCtx.stubs() - .method("getAttributeNames") - .will(returnValue(Collections.enumeration(attributes.keySet()))); - setupStub(attributes, mockCtx, "getAttribute"); - mockConfig.stubs().method("getPortletContext") - .will(returnValue(mockCtx.proxy())); - mockCtx.stubs() - .method("getInitParameterNames") - .will(returnValue(Collections.enumeration(initParams.keySet()))); - setupStub(initParams, mockCtx, "getInitParameter"); - mockConfig - .stubs() - .method("getInitParameterNames") - .will(returnValue(Collections.enumeration(initParams.keySet()))); - setupStub(initParams, mockConfig, "getInitParameter"); - mockConfig.stubs().method("getResourceBundle") - .will(returnValue(new ListResourceBundle() { - protected Object[][] getContents() { - return new String[][] { { "javax.portlet.title", - "MyTitle" } }; - } - })); - } - - private void setupActionFactory(String namespace, String actionName, - String result, ValueStack stack) { - if (mockActionFactory == null) { - mockActionFactory = mock(ActionProxyFactory.class); - } - mockAction = mock(Action.class); - mockActionProxy = mock(ActionProxy.class); - mockInvocation = mock(ActionInvocation.class); - - mockActionFactory - .expects(once()) - .method("createActionProxy") - .with(new Constraint[] { eq(namespace), eq(actionName), NULL, - isA(Map.class) }) - .will(returnValue(mockActionProxy.proxy())); - mockActionProxy.stubs().method("getAction") - .will(returnValue(mockAction.proxy())); - mockActionProxy.expects(once()).method("execute") - .will(returnValue(result)); - mockActionProxy.expects(once()).method("getInvocation") - .will(returnValue(mockInvocation.proxy())); - mockInvocation.stubs().method("getStack").will(returnValue(stack)); - - } - - /** - * Initialize the mock request (and as a result, the mock session) - * - * @param requestParams - * The request parameters - * @param requestAttributes - * The request attributes - * @param sessionParams - * The session attributes - * @param mode - * The portlet mode - * @param state - * The portlet window state - * @param isEvent - * true when the request is an ActionRequest. - * @param locale - * The locale. If null, the request will return - * Locale.getDefault() - */ - private void initRequest(Map requestParams, - Map requestAttributes, - Map sessionParams, PortletMode mode, - WindowState state, boolean isEvent, Locale locale) { - mockRequest = isEvent ? mock(ActionRequest.class) - : mock(RenderRequest.class); - mockSession = mock(PortletSession.class); - mockSession.stubs().method(ANYTHING); - mockRequest.stubs().method(ANYTHING); - setupStub(sessionParams, mockSession, "getAttribute"); - mockSession - .stubs() - .method("getAttributeNames") - .will(returnValue(Collections.enumeration(sessionParams - .keySet()))); - setupParamStub(requestParams, mockRequest, "getParameter"); - setupStub(requestAttributes, mockRequest, "getAttribute"); - mockRequest - .stubs() - .method("getAttributeNames") - .will(returnValue(Collections.enumeration(requestAttributes - .keySet()))); - mockRequest.stubs().method("getParameterMap") - .will(returnValue(requestParams)); - mockRequest - .stubs() - .method("getParameterNames") - .will(returnValue(Collections.enumeration(requestParams - .keySet()))); - mockRequest.stubs().method("getPortletSession") - .will(returnValue(mockSession.proxy())); - if (locale != null) { - mockRequest.stubs().method("getLocale").will(returnValue(locale)); - } else { - mockRequest.stubs().method("getLocale") - .will(returnValue(Locale.getDefault())); - } - mockRequest.stubs().method("getPortletMode").will(returnValue(mode)); - mockRequest.stubs().method("getWindowState").will(returnValue(state)); - } - - private void setupParamStub(Map requestParams, - Mock mockRequest, String method) { - Map newMap = new HashMap(); - for (String key : requestParams.keySet()) { - String[] val = requestParams.get(key); - newMap.put(key, val[0]); - } - setupStub(newMap, mockRequest, method); - - } - - /** - * Set up stubs for the mock. - * - * @param map - * The map containing the key and - * values. The key is the expected parameter to - * method, and value is the value that should be - * returned from the stub. - * @param mock - * The mock to initialize. - * @param method - * The name of the method to stub. - */ - private void setupStub(Map map, Mock mock, String method) { - for (Object key : map.keySet()) { - Object val = map.get(key); - mock.stubs().method(method).with(eq(key)).will(returnValue(val)); - } - } - -} 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 deleted file mode 100644 index 4e798bcc2..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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 com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import junit.framework.TestCase; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.action.PortletRequestAware; -import org.apache.struts2.portlet.action.PortletResponseAware; -import org.easymock.EasyMock; - -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; -import java.util.HashMap; -import java.util.Map; - -public class PortletAwareInterceptorTest extends TestCase { - - private PortletAwareInterceptor interceptor; - - protected void setUp() throws Exception { - super.setUp(); - interceptor = new PortletAwareInterceptor(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void testPortletRequestAware() throws Exception { - PortletRequest request = EasyMock.createMock(PortletRequest.class); - Map ctx = new HashMap<>(); - ActionContext actionContext = ActionContext.of(ctx).bind(); - ctx.put(PortletConstants.REQUEST, request); - PortletRequestAware action = EasyMock.createMock(PortletRequestAware.class); - action.withPortletRequest(request); - - ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class); - EasyMock.expect(invocation.getInvocationContext()).andReturn(actionContext); - EasyMock.expect(invocation.getAction()).andReturn(action); - - EasyMock.replay(action); - EasyMock.replay(invocation); - - interceptor.intercept(invocation); - - EasyMock.verify(action); - } - - public void testPortletResponseAware() throws Exception { - PortletResponse response = EasyMock.createMock(PortletResponse.class); - Map ctx = new HashMap<>(); - ctx.put(PortletConstants.RESPONSE, response); - ActionContext actionContext = ActionContext.of(ctx).bind(); - PortletResponseAware action = EasyMock.createMock(PortletResponseAware.class); - action.withPortletResponse(response); - - ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class); - EasyMock.expect(invocation.getInvocationContext()).andReturn(actionContext); - EasyMock.expect(invocation.getAction()).andReturn(action); - - EasyMock.replay(action); - EasyMock.replay(invocation); - - interceptor.intercept(invocation); - - EasyMock.verify(action); - } -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptorTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptorTest.java deleted file mode 100644 index d60b866e4..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletStateInterceptorTest.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * 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 com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.util.ValueStackFactory; -import org.apache.struts2.StrutsTestCasePortletTests; -import org.apache.struts2.dispatcher.DefaultActionSupport; -import org.apache.struts2.portlet.PortletPhase; -import org.apache.struts2.portlet.dispatcher.DirectRenderFromEventAction; -import org.easymock.EasyMock; - -import javax.portlet.ActionResponse; -import javax.portlet.RenderRequest; -import java.util.HashMap; -import java.util.Map; - -import static org.apache.struts2.portlet.PortletConstants.EVENT_ACTION; -import static org.apache.struts2.portlet.PortletConstants.PHASE; -import static org.apache.struts2.portlet.PortletConstants.REQUEST; -import static org.apache.struts2.portlet.PortletConstants.RESPONSE; -import static org.apache.struts2.portlet.PortletConstants.STACK_FROM_EVENT_PHASE; - -public class PortletStateInterceptorTest extends StrutsTestCasePortletTests { - - private PortletStateInterceptor interceptor; - - public void setUp() throws Exception { - super.setUp(); - interceptor = new PortletStateInterceptor(); - } - - public void testCopyValueStackFromEventToRenderPhase() throws Exception { - ActionResponse actionResponse = EasyMock.createNiceMock(ActionResponse.class); - ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class); - - Map ctxMap = new HashMap<>(); - ctxMap.put(PHASE, PortletPhase.ACTION_PHASE); - ctxMap.put(RESPONSE, actionResponse); - Map session = new HashMap<>(); - - ActionContext ctx = ActionContext.of(ctxMap).bind(); - ctx.withSession(session); - EasyMock.expect(invocation.getInvocationContext()).andStubReturn(ctx); - actionResponse.setRenderParameter(EVENT_ACTION, "true"); - - ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack(); - EasyMock.expect(invocation.getStack()).andStubReturn(stack); - - EasyMock.replay(actionResponse); - EasyMock.replay(invocation); - - interceptor.intercept(invocation); - - EasyMock.verify(actionResponse); - EasyMock.verify(invocation); - - assertSame(stack, session.get(STACK_FROM_EVENT_PHASE)); - - } - - public void testDoNotRestoreValueStackInRenderPhaseWhenProperPrg() throws Exception { - RenderRequest renderRequest = EasyMock.createNiceMock(RenderRequest.class); - ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class); - - - ValueStack eventPhaseStack = container.getInstance(ValueStackFactory.class).createValueStack(); - eventPhaseStack.set("testKey", "testValue"); - - ValueStack currentStack = container.getInstance(ValueStackFactory.class).createValueStack(); - currentStack.set("anotherTestKey", "anotherTestValue"); - - Map ctxMap = new HashMap<>(); - Map session = new HashMap<>(); - - session.put(STACK_FROM_EVENT_PHASE, eventPhaseStack); - - ctxMap.put(PHASE, PortletPhase.RENDER_PHASE); - ctxMap.put(REQUEST, renderRequest); - - ActionContext ctx = ActionContext.of(ctxMap).bind(); - ctx.withSession(session); - - EasyMock.expect(invocation.getInvocationContext()).andStubReturn(ctx); - EasyMock.expect(invocation.getStack()).andStubReturn(currentStack); - EasyMock.expect(invocation.getAction()).andStubReturn(new DefaultActionSupport()); - EasyMock.expect(renderRequest.getParameter(EVENT_ACTION)).andStubReturn("true"); - - EasyMock.replay(renderRequest); - EasyMock.replay(invocation); - - interceptor.intercept(invocation); - - ValueStack resultingStack = invocation.getStack(); - - assertNull(resultingStack.findValue("testKey")); - assertEquals("anotherTestValue", resultingStack.findValue("anotherTestKey")); - - - } - - public void testRestoreValueStackInRenderPhaseWhenNotProperPrg() throws Exception { - RenderRequest renderRequest = EasyMock.createNiceMock(RenderRequest.class); - ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class); - - ValueStack eventPhaseStack = container.getInstance(ValueStackFactory.class).createValueStack(); - eventPhaseStack.set("testKey", "testValue"); - - ValueStack currentStack = container.getInstance(ValueStackFactory.class).createValueStack(); - currentStack.set("anotherTestKey", "anotherTestValue"); - - EasyMock.expect(invocation.getStack()).andStubReturn(currentStack); - - Map ctxMap = new HashMap<>(); - Map session = new HashMap<>(); - - session.put(STACK_FROM_EVENT_PHASE, eventPhaseStack); - - ctxMap.put(PHASE, PortletPhase.RENDER_PHASE); - ctxMap.put(REQUEST, renderRequest); - - ActionContext ctx = ActionContext.of(ctxMap).bind(); - ctx.withSession(session); - - EasyMock.expect(invocation.getInvocationContext()).andStubReturn(ctx); - EasyMock.expect(invocation.getStack()).andStubReturn(currentStack); - EasyMock.expect(invocation.getAction()).andStubReturn(new DirectRenderFromEventAction()); - EasyMock.expect(renderRequest.getParameter(EVENT_ACTION)).andStubReturn("true"); - - EasyMock.replay(renderRequest); - EasyMock.replay(invocation); - - interceptor.intercept(invocation); - - ValueStack resultingStack = invocation.getStack(); - assertEquals("testValue", resultingStack.findValue("testKey")); - assertEquals("anotherTestValue", resultingStack.findValue("anotherTestKey")); - - - } -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java deleted file mode 100644 index 60946f643..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * 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.result; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.ActionProxy; -import org.apache.struts2.StrutsStatics; -import org.apache.struts2.dispatcher.HttpParameters; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; -import org.jmock.Mock; -import org.jmock.cglib.MockObjectTestCase; -import org.jmock.core.Constraint; - -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; -import javax.portlet.PortletContext; -import javax.portlet.PortletMode; -import javax.portlet.PortletRequestDispatcher; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import java.util.HashMap; -import java.util.Map; - -import static org.apache.struts2.portlet.PortletConstants.ACTION_PARAM; -import static org.apache.struts2.portlet.PortletConstants.MODE_PARAM; -import static org.apache.struts2.portlet.PortletConstants.PHASE; -import static org.apache.struts2.portlet.PortletConstants.RENDER_DIRECT_LOCATION; -import static org.apache.struts2.portlet.PortletConstants.REQUEST; -import static org.apache.struts2.portlet.PortletConstants.RESPONSE; - -/** - * PortletResultTest. Insert description. - */ -public class PortletResultTest extends MockObjectTestCase implements StrutsStatics { - - Mock mockInvocation = null; - Mock mockCtx = null; - Mock mockProxy = null; - ActionProxy proxy = null; - ActionInvocation invocation = null; - - public void setUp() throws Exception { - super.setUp(); - mockInvocation = mock(ActionInvocation.class); - mockCtx = mock(PortletContext.class); - mockProxy = mock(ActionProxy.class); - - Map sessionMap = new HashMap<>(); - - ActionContext actionContext = ActionContext.of() - .withSession(sessionMap) - .withParameters(HttpParameters.create().build()) - .bind(); - actionContext.put(STRUTS_PORTLET_CONTEXT, mockCtx.proxy()); - - mockProxy.stubs().method("getNamespace").will(returnValue("/test")); - proxy = (ActionProxy) mockProxy.proxy(); - mockInvocation.stubs().method("getInvocationContext").will(returnValue(ActionContext.getContext())); - mockInvocation.stubs().method("getProxy").will(returnValue(proxy)); - invocation = (ActionInvocation) mockInvocation.proxy(); - - } - - public void testDoExecute_render() { - Mock mockRequest = mock(RenderRequest.class); - Mock mockResponse = mock(RenderResponse.class); - Mock mockRd = mock(PortletRequestDispatcher.class); - - RenderRequest req = (RenderRequest) mockRequest.proxy(); - RenderResponse res = (RenderResponse) mockResponse.proxy(); - PortletRequestDispatcher rd = (PortletRequestDispatcher) mockRd.proxy(); - PortletContext ctx = (PortletContext) mockCtx.proxy(); - ActionInvocation inv = (ActionInvocation) mockInvocation.proxy(); - - 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)); - - ActionContext ctxMap = ActionContext.getContext(); - ctxMap.put(RESPONSE, res); - ctxMap.put(REQUEST, req); - ctxMap.put(SERVLET_CONTEXT, ctx); - ctxMap.put(PHASE, PortletPhase.RENDER_PHASE); - - PortletResult result = new PortletResult(); - try { - result.doExecute("/WEB-INF/pages/testPage.jsp", inv); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occurred!"); - } - - } - - public void testDoExecute_event_locationIsAction() { - - Mock mockRequest = mock(ActionRequest.class); - Mock mockResponse = mock(ActionResponse.class); - - Constraint[] params = new Constraint[]{eq(ACTION_PARAM), eq("testView")}; - mockResponse.expects(once()).method("setRenderParameter").with(params); - params = new Constraint[]{eq(MODE_PARAM), eq(PortletMode.VIEW.toString())}; - mockResponse.expects(once()).method("setRenderParameter").with(params); - params = new Constraint[]{eq(PortletConstants.RENDER_DIRECT_NAMESPACE), eq("/test")}; - 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()); - ctx.put(RESPONSE, mockResponse.proxy()); - ctx.put(PHASE, PortletPhase.ACTION_PHASE); - - PortletResult result = new PortletResult(); - try { - result.doExecute("testView.action", invocation); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occurred!"); - } - - } - - public void testDoExecute_event_locationIsJsp() { - Mock mockRequest = mock(ActionRequest.class); - Mock mockResponse = mock(ActionResponse.class); - - Constraint[] params = new Constraint[]{eq(ACTION_PARAM), eq("renderDirect")}; - mockResponse.expects(once()).method("setRenderParameter").with(params); - params = new Constraint[]{eq(MODE_PARAM), eq(PortletMode.VIEW.toString())}; - mockResponse.expects(once()).method("setRenderParameter").with(params); - params = new Constraint[]{eq(PortletConstants.RENDER_DIRECT_NAMESPACE), eq("/test")}; - 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<>(); - ctx.withSession(session); - - ctx.put(REQUEST, mockRequest.proxy()); - ctx.put(RESPONSE, mockResponse.proxy()); - ctx.put(PHASE, PortletPhase.ACTION_PHASE); - - PortletResult result = new PortletResult(); - try { - result.doExecute("/WEB-INF/pages/testJsp.jsp", (ActionInvocation) mockInvocation.proxy()); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occurred!"); - } - assertEquals("/WEB-INF/pages/testJsp.jsp", session.get(RENDER_DIRECT_LOCATION)); - } - - public void testDoExecute_event_locationHasQueryParams() { - Mock mockRequest = mock(ActionRequest.class); - Mock mockResponse = mock(ActionResponse.class); - - Constraint[] params = new Constraint[]{eq(ACTION_PARAM), eq("testView")}; - mockResponse.expects(once()).method("setRenderParameter").with(params); - params = new Constraint[]{eq("testParam1"), eq("testValue1")}; - mockResponse.expects(once()).method("setRenderParameter").with(params); - params = new Constraint[]{eq("testParam2"), eq("testValue2")}; - mockResponse.expects(once()).method("setRenderParameter").with(params); - params = new Constraint[]{eq(MODE_PARAM), eq(PortletMode.VIEW.toString())}; - mockResponse.expects(once()).method("setRenderParameter").with(params); - params = new Constraint[]{eq(PortletConstants.RENDER_DIRECT_NAMESPACE), eq("/test")}; - 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()); - ctx.put(RESPONSE, mockResponse.proxy()); - ctx.put(PHASE, PortletPhase.ACTION_PHASE); - - PortletResult result = new PortletResult(); - try { - result.doExecute("testView.action?testParam1=testValue1&testParam2=testValue2", (ActionInvocation) mockInvocation.proxy()); - } catch (Exception e) { - e.printStackTrace(); - fail("Error occurred!"); - } - } - - public void testTitleAndContentType() throws Exception { - Mock mockRequest = mock(RenderRequest.class); - Mock mockResponse = mock(RenderResponse.class); - Mock mockRd = mock(PortletRequestDispatcher.class); - - RenderRequest req = (RenderRequest) mockRequest.proxy(); - RenderResponse res = (RenderResponse) mockResponse.proxy(); - PortletRequestDispatcher rd = (PortletRequestDispatcher) mockRd.proxy(); - PortletContext ctx = (PortletContext) mockCtx.proxy(); - - 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)); - - ActionContext ctxMap = ActionContext.getContext(); - ctxMap.put(RESPONSE, res); - ctxMap.put(REQUEST, req); - ctxMap.put(SERVLET_CONTEXT, ctx); - ctxMap.put(PHASE, PortletPhase.RENDER_PHASE); - - mockResponse.expects(atLeastOnce()).method("setTitle").with(eq("testTitle")); - mockResponse.expects(atLeastOnce()).method("setContentType").with(eq("testContentType")); - - PortletResult result = new PortletResult(); - result.setTitle("testTitle"); - result.setContentType("testContentType"); - result.doExecute("/WEB-INF/pages/testPage.jsp", (ActionInvocation) mockInvocation.proxy()); - } - - public void tearDown() throws Exception { - super.tearDown(); - ActionContext.clear(); - } - -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java deleted file mode 100644 index a5dc07b3a..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * 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.util; - -import com.opensymphony.xwork2.ActionContext; -import junit.framework.TestCase; -import org.apache.struts2.portlet.PortletPhase; -import org.easymock.EasyMock; - -import javax.portlet.PortletMode; -import javax.portlet.PortletModeException; -import javax.portlet.PortletSecurityException; -import javax.portlet.PortletURL; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import javax.portlet.WindowState; -import javax.portlet.WindowStateException; -import java.io.IOException; -import java.io.Writer; -import java.util.HashMap; -import java.util.Map; - -import static org.apache.struts2.portlet.PortletConstants.ACTION_PARAM; -import static org.apache.struts2.portlet.PortletConstants.MODE_NAMESPACE_MAP; -import static org.apache.struts2.portlet.PortletConstants.MODE_PARAM; -import static org.apache.struts2.portlet.PortletConstants.PHASE; -import static org.apache.struts2.portlet.PortletConstants.REQUEST; -import static org.apache.struts2.portlet.PortletConstants.RESPONSE; - -/** - * - */ -public class PortletUrlHelperTest extends TestCase { - - RenderResponse renderResponse; - - RenderRequest renderRequest; - - MockUrl url; - - public void setUp() throws Exception { - super.setUp(); - - renderResponse = EasyMock.createMock(RenderResponse.class); - renderRequest = EasyMock.createMock(RenderRequest.class); - url = new MockUrl(); - - EasyMock.expect(renderRequest.getPortletMode()).andReturn(PortletMode.VIEW).anyTimes(); - EasyMock.expect(renderRequest.getWindowState()).andReturn(WindowState.NORMAL).anyTimes(); - - Map modeNamespaceMap = new HashMap<>(); - modeNamespaceMap.put("view", "/view"); - modeNamespaceMap.put("edit", "/edit"); - modeNamespaceMap.put("help", "/help"); - - ActionContext actionContext = ActionContext.of().bind(); - actionContext.put(REQUEST, renderRequest); - actionContext.put(RESPONSE, renderResponse); - actionContext.put(PHASE, PortletPhase.RENDER_PHASE); - actionContext.put(MODE_NAMESPACE_MAP, modeNamespaceMap); - } - - public void testCreateRenderUrlWithNoModeOrState() { - EasyMock.expect(renderResponse.createRenderURL()).andReturn(url); - - EasyMock.replay(renderRequest); - EasyMock.replay(renderResponse); - - (new PortletUrlHelper()).buildUrl("testAction", null, null, - new HashMap<>(), null, null, null); - assertEquals(PortletMode.VIEW, url.getPortletMode()); - assertEquals(WindowState.NORMAL, url.getWindowState()); - assertEquals("testAction", url.getParameterMap().get(ACTION_PARAM)[0]); - assertEquals("view", url.getParameterMap().get(MODE_PARAM)[0]); - } - - public void testCreateRenderUrlWithDifferentPortletMode() { - EasyMock.expect(renderResponse.createRenderURL()).andReturn(url); - - EasyMock.replay(renderRequest); - EasyMock.replay(renderResponse); - - (new PortletUrlHelper()).buildUrl("testAction", null, null, - new HashMap<>(), null, "edit", null); - - assertEquals(PortletMode.EDIT, url.getPortletMode()); - assertEquals(WindowState.NORMAL, url.getWindowState()); - assertEquals("testAction", url.getParameterMap().get(ACTION_PARAM)[0]); - assertEquals("edit", url.getParameterMap().get(MODE_PARAM)[0]); - } - - public void testCreateRenderUrlWithDifferentWindowState() { - EasyMock.expect(renderResponse.createRenderURL()).andReturn(url); - - EasyMock.replay(renderRequest); - EasyMock.replay(renderResponse); - - (new PortletUrlHelper()).buildUrl("testAction", null, null, - new HashMap<>(), null, null, "maximized"); - - assertEquals(PortletMode.VIEW, url.getPortletMode()); - assertEquals(WindowState.MAXIMIZED, url.getWindowState()); - assertEquals("testAction", url.getParameterMap().get(ACTION_PARAM)[0]); - assertEquals("view", url.getParameterMap().get(MODE_PARAM)[0]); - } - - public void testCreateActionUrl() { - EasyMock.expect(renderResponse.createActionURL()).andReturn(url); - - EasyMock.replay(renderResponse); - EasyMock.replay(renderRequest); - - (new PortletUrlHelper()).buildUrl("testAction", null, null, - new HashMap<>(), "action", null, null); - - assertEquals(PortletMode.VIEW, url.getPortletMode()); - assertEquals(WindowState.NORMAL, url.getWindowState()); - assertEquals("testAction", url.getParameterMap().get(ACTION_PARAM)[0]); - assertEquals("view", url.getParameterMap().get(MODE_PARAM)[0]); - } - - @Override - public void tearDown() { - EasyMock.verify(renderResponse); - EasyMock.verify(renderRequest); - } - - private static class MockUrl implements PortletURL { - - private PortletMode portletMode; - private WindowState windowState; - private Map parameters; - - public PortletMode getPortletMode() { - return portletMode; - } - - public WindowState getWindowState() { - return windowState; - } - - public void removePublicRenderParameter(String name) { - } - - public void setPortletMode(PortletMode portletMode) throws PortletModeException { - this.portletMode = portletMode; - } - - public void setWindowState(WindowState windowState) throws WindowStateException { - this.windowState = windowState; - } - - public void addProperty(String arg0, String arg1) { - } - - public Map getParameterMap() { - return parameters; - } - - public void setParameter(String name, String value) { - parameters.put(name, new String[]{value}); - } - - public void setParameter(String name, String[] values) { - parameters.put(name, values); - } - - public void setParameters(Map parameters) { - this.parameters = parameters; - } - - public void setProperty(String arg0, String arg1) { - } - - public void setSecure(boolean arg0) throws PortletSecurityException { - } - - public void write(Writer arg0) throws IOException { - } - - public void write(Writer arg0, boolean arg1) throws IOException { - } - - } - -} diff --git a/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java b/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java deleted file mode 100644 index f8e57b7b2..000000000 --- a/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java +++ /dev/null @@ -1,469 +0,0 @@ -/* - * 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.views.jsp; - -import com.mockobjects.servlet.MockJspWriter; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.util.ValueStackFactory; -import org.apache.struts2.dispatcher.Dispatcher; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.portlet.PortletConstants; -import org.apache.struts2.portlet.PortletPhase; -import org.apache.struts2.portlet.util.PortletUrlHelper; -import org.jmock.Mock; -import org.jmock.cglib.MockObjectTestCase; -import org.jmock.core.Constraint; -import org.springframework.mock.web.MockServletContext; - -import javax.portlet.PortletContext; -import javax.portlet.PortletMode; -import javax.portlet.PortletURL; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import javax.portlet.WindowState; -import jakarta.servlet.ServletContext; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.jsp.PageContext; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import static org.apache.struts2.StrutsStatics.STRUTS_PORTLET_CONTEXT; - -/** - * - */ -@SuppressWarnings("unchecked") -public class PortletUrlTagTest extends MockObjectTestCase { - - URLTag tag = new URLTag(); - - Mock mockHttpReq = null; - - Mock mockHttpRes = null; - - Mock mockPortletReq = null; - - Mock mockPortletRes = null; - - Mock mockPageCtx = null; - - Mock mockPortletUrl = null; - - MockJspWriter mockJspWriter = null; - - Mock mockCtx = null; - - ValueStack stack = null; - - Mock mockActionProxy = null; - - Mock mockActionInvocation = null; - - private Dispatcher dispatcher; - - public void setUp() throws Exception { - super.setUp(); - - ServletContext servletContext = new MockServletContext(); - dispatcher = new Dispatcher(servletContext, new HashMap<>()); - dispatcher.init(); - Dispatcher.setInstance(dispatcher); - - stack = dispatcher.getContainer().getInstance(ValueStackFactory.class).createValueStack(); - - mockActionInvocation = mock(ActionInvocation.class); - mockActionProxy = mock(ActionProxy.class); - mockHttpReq = mock(HttpServletRequest.class); - mockHttpRes = mock(HttpServletResponse.class); - mockPortletReq = mock(RenderRequest.class); - mockPortletRes = mock(RenderResponse.class); - mockPageCtx = mock(PageContext.class); - mockPortletUrl = mock(PortletURL.class); - mockJspWriter = new MockJspWriter(); - mockCtx = mock(PortletContext.class); - - mockActionProxy.stubs().method("getNamespace").will(returnValue("/view")); - mockActionInvocation.stubs().method("getProxy").will(returnValue( - mockActionProxy.proxy())); - mockPageCtx.stubs().method("getRequest").will( - returnValue(mockHttpReq.proxy())); - mockPageCtx.stubs().method("getResponse").will( - returnValue(mockHttpRes.proxy())); - mockPageCtx.stubs().method("getOut").will(returnValue(mockJspWriter)); - - mockHttpReq.stubs().method("getScheme").will(returnValue("http")); - mockHttpReq.stubs().method("getAttribute").with( - eq("struts.valueStack")).will(returnValue(stack)); - mockHttpReq.stubs().method("getAttribute").with( - eq("javax.portlet.response")).will( - returnValue(mockPortletRes.proxy())); - mockHttpReq.stubs().method("getAttribute").with( - eq("javax.portlet.request")).will( - returnValue(mockPortletReq.proxy())); - mockHttpReq.stubs().method("getAttribute").with( - eq("javax.servlet.include.servlet_path")).will( - returnValue("/servletPath")); - mockHttpReq.stubs().method("getParameterMap").will( - returnValue(Collections.emptyMap())); - - mockPortletReq.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW)); - mockPortletReq.stubs().method("getWindowState").will(returnValue(WindowState.NORMAL)); - mockPortletReq.stubs().method("getContextPath").will(returnValue("/contextPath")); - - tag.setPageContext((PageContext) mockPageCtx.proxy()); - - Map modeMap = new HashMap<>(); - modeMap.put(PortletMode.VIEW, "/view"); - modeMap.put(PortletMode.HELP, "/help"); - modeMap.put(PortletMode.EDIT, "/edit"); - Map actionMap = new HashMap<>(); - actionMap.put(PortletMode.VIEW, new ActionMapping("defaultView", "/view", "execute", new HashMap<>())); - actionMap.put(PortletMode.HELP, new ActionMapping("defaultHelp", "/help", "execute", new HashMap<>())); - actionMap.put(PortletMode.EDIT, new ActionMapping("defaultEdit", "/edit", "execute", new HashMap<>())); - - Map contextMap = stack.getActionContext() - .withSession(new HashMap<>()) - .with(PortletConstants.REQUEST, mockPortletReq.proxy()) - .with(PortletConstants.RESPONSE, mockPortletRes.proxy()) - .with(PortletConstants.PHASE, PortletPhase.RENDER_PHASE) - .with(PortletConstants.MODE_NAMESPACE_MAP, modeMap) - .with(PortletConstants.DEFAULT_ACTION_MAP, actionMap) - .with(STRUTS_PORTLET_CONTEXT, mockCtx.proxy()) - .getContextMap(); - - ActionInvocation ai = (ActionInvocation) mockActionInvocation.proxy(); - - ActionContext.of(contextMap) - .withValueStack(stack) - .withContainer(dispatcher.getContainer()) - .withActionInvocation(ai) - .bind(); - } - - public void tearDown() throws Exception { - super.tearDown(); - if (dispatcher != null && dispatcher.getConfigurationManager() != null) { - dispatcher.cleanup(); - dispatcher = null; - } - } - - public void testEnsureParamsAreStringArrays() { - Map params = new HashMap<>(); - params.put("param1", "Test1"); - params.put("param2", new String[]{"Test2"}); - - Map result = PortletUrlHelper.ensureParamsAreStringArrays(params); - assertEquals(2, result.size()); - assertNotNull(result.get("param1")); - } - - public void testSetWindowState() throws Exception { - - PortletMode mode = PortletMode.VIEW; - - mockHttpReq.stubs().method("getQueryString").will(returnValue("")); - - mockPortletRes.expects(once()).method("createRenderURL").will( - returnValue(mockPortletUrl.proxy())); - mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1)); - - Map paramMap = new HashMap<>(); - paramMap.put(PortletConstants.ACTION_PARAM, new String[]{"/view/testAction"}); - paramMap.put(PortletConstants.MODE_PARAM, new String[]{mode.toString()}); - - mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap)); - mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.MAXIMIZED)); - mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.VIEW)); - - tag.setAction("testAction"); - tag.setWindowState("maximized"); - tag.doStartTag(); - tag.doEndTag(); - } - - public void testSetPortletMode() throws Exception { - - PortletMode mode = PortletMode.HELP; - - mockHttpReq.stubs().method("getQueryString").will(returnValue("")); - - mockPortletRes.expects(once()).method("createRenderURL").will( - returnValue(mockPortletUrl.proxy())); - mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1)); - - Map paramMap = new HashMap<>(); - paramMap.put(PortletConstants.ACTION_PARAM, new String[]{"/help/testAction"}); - paramMap.put(PortletConstants.MODE_PARAM, new String[]{mode.toString()}); - - mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap)); - mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.HELP)); - mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL)); - - tag.setNamespace("/help"); - tag.setAction("testAction"); - tag.setPortletMode("help"); - tag.doStartTag(); - tag.doEndTag(); - } - - public void testWhenPortletModeDiffersFromCurrentAndNoParametersAreSetRenderTheDefaults() - throws Exception { - PortletMode mode = PortletMode.HELP; - - mockHttpReq.stubs().method("getQueryString").will(returnValue("")); - - mockPortletRes.expects(once()).method("createRenderURL").will( - returnValue(mockPortletUrl.proxy())); - mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1)); - - Map paramMap = new HashMap<>(); - paramMap.put(PortletConstants.ACTION_PARAM, new String[]{"/help/defaultHelp"}); - paramMap.put(PortletConstants.MODE_PARAM, new String[]{mode.toString()}); - - mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap)); - mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.HELP)); - mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL)); - - tag.setPortletMode("help"); - tag.doStartTag(); - tag.doEndTag(); - } - - public void testUrlWithQueryParams() throws Exception { - - PortletMode mode = PortletMode.VIEW; - - mockHttpReq.stubs().method("getQueryString").will(returnValue("")); - - mockPortletRes.expects(once()).method("createRenderURL").will( - returnValue(mockPortletUrl.proxy())); - mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1)); - - Map paramMap = new HashMap<>(); - paramMap.put(PortletConstants.ACTION_PARAM, new String[]{"/view/testAction"}); - paramMap.put("testParam1", new String[]{"testValue1"}); - paramMap.put(PortletConstants.MODE_PARAM, new String[]{mode.toString()}); - - mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap)); - mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.VIEW)); - mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL)); - - tag.setAction("testAction?testParam1=testValue1"); - tag.doStartTag(); - tag.doEndTag(); - } - - public void testActionUrl() throws Exception { - - PortletMode mode = PortletMode.VIEW; - - mockHttpReq.stubs().method("getQueryString").will(returnValue("")); - - mockPortletRes.expects(once()).method("createActionURL").will( - returnValue(mockPortletUrl.proxy())); - mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1)); - - Map paramMap = new HashMap<>(); - paramMap.put(PortletConstants.ACTION_PARAM, new String[]{"/view/testAction"}); - paramMap.put(PortletConstants.MODE_PARAM, new String[]{mode.toString()}); - - mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap)); - mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.VIEW)); - mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL)); - - tag.setNamespace("/view"); - tag.setAction("testAction"); - tag.setPortletUrlType("action"); - tag.doStartTag(); - tag.doEndTag(); - } - - public void testResourceUrl() throws Exception { - 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(); - mockJspWriter.verify(); - } - - public void testResourceUrlWithNestedParam() throws Exception { - 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()); - paramTag.setParent(tag); - paramTag.setName("testParam1"); - paramTag.setValue("'testValue1'"); - tag.setValue("image.gif"); - tag.doStartTag(); - paramTag.doStartTag(); - paramTag.doEndTag(); - tag.doEndTag(); - mockJspWriter.verify(); - } - - public void testResourceUrlWithTwoNestedParam() throws Exception { - 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()); - paramTag.setParent(tag); - paramTag.setName("testParam1"); - paramTag.setValue("'testValue1'"); - ParamTag paramTag2 = new ParamTag(); - paramTag2.setPageContext((PageContext) mockPageCtx.proxy()); - paramTag2.setParent(tag); - paramTag2.setName("testParam2"); - paramTag2.setValue("'testValue2'"); - tag.setValue("image.gif"); - tag.doStartTag(); - paramTag.doStartTag(); - paramTag.doEndTag(); - paramTag2.doStartTag(); - paramTag2.doEndTag(); - tag.doEndTag(); - mockJspWriter.verify(); - } - - public void testUrlWithMethod() throws Exception { - PortletMode mode = PortletMode.VIEW; - mockHttpReq.stubs().method("getQueryString").will(returnValue("")); - mockPortletRes.expects(once()).method("createRenderURL").will( - returnValue(mockPortletUrl.proxy())); - mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1)); - tag.setAction("testAction"); - Map paramMap = new HashMap<>(); - paramMap.put(PortletConstants.ACTION_PARAM, new String[]{"/view/testAction!input"}); - paramMap.put(PortletConstants.MODE_PARAM, new String[]{mode.toString()}); - mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap)); - mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.VIEW)); - mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL)); - tag.setMethod("input"); - tag.doStartTag(); - tag.doEndTag(); - } - - public void testUrlWithNoActionOrMethod() throws Exception { - PortletMode mode = PortletMode.VIEW; - mockHttpReq.stubs().method("getQueryString").will(returnValue("")); - mockPortletRes.expects(once()).method("createRenderURL").will( - returnValue(mockPortletUrl.proxy())); - mockCtx.expects(atLeastOnce()).method("getMajorVersion").will(returnValue(1)); - Map paramMap = new HashMap<>(); - - mockActionProxy.stubs().method("getActionName").will(returnValue("currentExecutingAction")); - - paramMap.put(PortletConstants.ACTION_PARAM, new String[]{"/view/currentExecutingAction"}); - paramMap.put(PortletConstants.MODE_PARAM, new String[]{mode.toString()}); - mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap)); - mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.VIEW)); - mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL)); - tag.doStartTag(); - tag.doEndTag(); - } - - private static class ParamMapConstraint implements Constraint { - - private Map myExpectedMap; - private Map myActualMap = null; - - public ParamMapConstraint(Map expectedMap) { - if (expectedMap == null) { - throw new IllegalArgumentException("Use an isNull constraint instead!"); - } - myExpectedMap = expectedMap; - } - - /* (non-Javadoc) - * @see org.jmock.core.Constraint#eval(java.lang.Object) - */ - public boolean eval(Object val) { - myActualMap = (Map) val; - boolean result = false; - if (val != null) { - if (myExpectedMap.size() == myActualMap.size()) { - Iterator keys = myExpectedMap.keySet().iterator(); - boolean allSame = true; - while (keys.hasNext()) { - Object key = keys.next(); - if (!myActualMap.containsKey(key)) { - allSame = false; - break; - } else { - String[] expected = (String[]) myExpectedMap.get(key); - String[] actual = (String[]) myActualMap.get(key); - if (!Arrays.equals(expected, actual)) { - allSame = false; - break; - } - } - } - result = allSame; - } - } - return result; - } - - /* (non-Javadoc) - * @see org.jmock.core.SelfDescribing#describeTo(java.lang.StringBuffer) - */ - public StringBuffer describeTo(StringBuffer sb) { - sb.append("\n Expected: "); - describeTo(myExpectedMap, sb); - sb.append("\n Actual: "); - describeTo(myActualMap, sb); - - return sb; - } - - private StringBuffer describeTo(Map map, StringBuffer sb) { - Iterator it = map.keySet().iterator(); - while (it.hasNext()) { - String key = it.next(); - sb.append(key).append("="); - String[] value = (String[]) map.get(key); - sb.append(value[0]); - if (it.hasNext()) { - sb.append(", "); - } - } - return sb; - } - - - } - -} diff --git a/plugins/portlet/src/test/resources/log4j2.xml b/plugins/portlet/src/test/resources/log4j2.xml deleted file mode 100644 index 8ec228c91..000000000 --- a/plugins/portlet/src/test/resources/log4j2.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - diff --git a/plugins/portlet/src/test/resources/struts.xml b/plugins/portlet/src/test/resources/struts.xml deleted file mode 100644 index 82cac4235..000000000 --- a/plugins/portlet/src/test/resources/struts.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - redirectAction - - - - -