1   /**
2    * Copyright (c) 2000-2007 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portal.struts;
24  
25  import com.liferay.portal.kernel.util.StringPool;
26  import com.liferay.portal.model.Portlet;
27  import com.liferay.portlet.ActionResponseImpl;
28  import com.liferay.portlet.PortletURLImplWrapper;
29  import com.liferay.portlet.RenderResponseImpl;
30  
31  import java.util.Iterator;
32  import java.util.Map;
33  
34  /**
35   * <a href="StrutsActionPortletURL.java.html"><b><i>View Source</i></b></a>
36   *
37   * @author Brian Wing Shun Chan
38   *
39   */
40  public class StrutsActionPortletURL extends PortletURLImplWrapper {
41  
42      public StrutsActionPortletURL(ActionResponseImpl res, boolean action) {
43          super(res, action);
44  
45          _portlet = res.getPortlet();
46          _strutsPath =
47              StringPool.SLASH + _portlet.getStrutsPath() + StringPool.SLASH;
48      }
49  
50      public StrutsActionPortletURL(RenderResponseImpl res, boolean action) {
51          super(res, action);
52  
53          _portlet = res.getPortlet();
54          _strutsPath =
55              StringPool.SLASH + _portlet.getStrutsPath() + StringPool.SLASH;
56      }
57  
58      public void setParameter(String name, String value) {
59          if (name.equals("struts_action")) {
60              if (!value.startsWith(_strutsPath)) {
61                  int pos = value.lastIndexOf(StringPool.SLASH);
62  
63                  value = _strutsPath + value.substring(pos + 1, value.length());
64              }
65          }
66  
67          super.setParameter(name, value);
68      }
69  
70      public void setParameters(Map params) {
71          Iterator itr = params.entrySet().iterator();
72  
73          while (itr.hasNext()) {
74              Map.Entry entry = (Map.Entry)itr.next();
75  
76              String name = (String)entry.getKey();
77              String[] values = (String[])entry.getValue();
78  
79              if (name.equals("struts_action")) {
80                  for (int i = 0; i < values.length; i++) {
81                      String value = values[i];
82  
83                      if (!value.startsWith(_strutsPath)) {
84                          int pos = value.lastIndexOf(StringPool.SLASH);
85  
86                          value =
87                              _strutsPath +
88                                  value.substring(pos + 1, value.length());
89  
90                          values[i] = value;
91                      }
92                  }
93              }
94          }
95  
96          super.setParameters(params);
97      }
98  
99      private Portlet _portlet;
100     private String _strutsPath;
101 
102 }