1 /***
2 * Copyright (c) 2003 held jointly by the individual authors.
3 *
4 * This library is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as published
6 * by the Free Software Foundation; either version 2.1 of the License, or
7 * (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; with out even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this library; if not, write to the Free Software Foundation,
16 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17 *
18 * > http://www.gnu.org/copyleft/lesser.html
19 * > http://www.opensource.org/licenses/lgpl-license.php
20 */
21 package net.mlw.vlh.web.tag.support;
22
23 import java.util.Iterator;
24 import java.util.Map;
25
26 import javax.portlet.PortletURL;
27 import javax.portlet.RenderResponse;
28 import javax.servlet.ServletRequest;
29 import javax.servlet.jsp.PageContext;
30
31 /*** This LinkEncoder encodes a URL to the standards defined
32 * in the JSR168 Portlet API.
33 *
34 * To use this class an entry needs to be made in the spring.xml file:
35 <pre>
36 ...
37 <bean id="classicLook" singleton="true" class="net.mlw.vlh.web.ValueListConfigBean">
38 ...
39 <property name="linkEncoder">
40 <bean class="net.mlw.vlh.web.tag.support.PortletLinkEncoder"/
41 </property>
42 ...
43 </bean>
44 ...
45 </pre>
46 * @author Keith R. Davis
47 * @version $Revision: 1.2 $ $Date: 2004/08/17 15:30:51 $
48 */
49 public class PortletLinkEncoder implements LinkEncoder
50 {
51 public PortletURL getRenderURL(PageContext pageContext)
52 {
53 ServletRequest request = pageContext.getRequest();
54 RenderResponse renderResponse = (RenderResponse) request.getAttribute("javax.portlet.response");
55 PortletURL url = renderResponse.createRenderURL();
56 return url;
57 }
58
59 /**** Returns an encoded String from the given parameters.
60 *
61 * @param pageContext The PageContext.
62 * @param parameters A Map containing all the parameters to encode.
63 * @param includedKeys The parameters to include. Includes all if null or empty.
64 * @param ignoredKeys The parameters to exclude. Excludes none if null or empty.
65 * @return An encoded String
66 */
67 public String encode(PageContext pageContext, Map parameters)
68 {
69 PortletURL url = getRenderURL(pageContext);
70
71 for (Iterator iter = parameters.keySet().iterator(); iter.hasNext();)
72 {
73 String key = (String) iter.next();
74
75 Object value = parameters.get(key);
76 if (value instanceof String[])
77 {
78 String[] values = (String[]) value;
79 url.setParameter(key, values);
80 }
81 else if (value instanceof String)
82 {
83 url.setParameter(key, (String) value);
84 }
85 else if (value != null)
86 {
87 url.setParameter(key, value.toString());
88 }
89 }
90
91 return url.toString();
92 }
93
94 }