1
14
15 package com.liferay.portal.kernel.portlet;
16
17 import com.liferay.portal.kernel.util.ArrayUtil;
18
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.Enumeration;
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25
26 import javax.portlet.RenderRequest;
27 import javax.portlet.filter.RenderRequestWrapper;
28
29
34 public class DynamicRenderRequest extends RenderRequestWrapper {
35
36 public DynamicRenderRequest(RenderRequest renderRequest) {
37 this(renderRequest, new HashMap<String, String[]>(), true);
38 }
39
40 public DynamicRenderRequest(
41 RenderRequest renderRequest, Map<String, String[]> params) {
42
43 this(renderRequest, params, true);
44 }
45
46 public DynamicRenderRequest(RenderRequest renderRequest, boolean inherit) {
47 this(renderRequest, new HashMap<String, String[]>(), inherit);
48 }
49
50 public DynamicRenderRequest(
51 RenderRequest renderRequest, Map<String, String[]> params,
52 boolean inherit) {
53
54 super(renderRequest);
55
56 _params = new HashMap<String, String[]>();
57 _inherit = inherit;
58
59 if (params != null) {
60 for (Map.Entry<String, String[]> entry : params.entrySet()) {
61 _params.put(entry.getKey(), entry.getValue());
62 }
63 }
64
65 if (_inherit && (renderRequest instanceof DynamicRenderRequest)) {
66 DynamicRenderRequest dynamicRenderRequest =
67 (DynamicRenderRequest)renderRequest;
68
69 setRequest(dynamicRenderRequest.getRequest());
70
71 params = dynamicRenderRequest.getDynamicParameterMap();
72
73 if (params != null) {
74 for (Map.Entry<String, String[]> entry : params.entrySet()) {
75 String name = entry.getKey();
76 String[] oldValues = entry.getValue();
77
78 String[] curValues = _params.get(name);
79
80 if (curValues == null) {
81 _params.put(name, oldValues);
82 }
83 else {
84 String[] newValues = ArrayUtil.append(
85 oldValues, curValues);
86
87 _params.put(name, newValues);
88 }
89 }
90 }
91 }
92 }
93
94 public String getParameter(String name) {
95 String[] values = _params.get(name);
96
97 if (_inherit && (values == null)) {
98 return super.getParameter(name);
99 }
100
101 if ((values != null) && (values.length > 0)) {
102 return values[0];
103 }
104 else {
105 return null;
106 }
107 }
108
109 public Map<String, String[]> getParameterMap() {
110 Map<String, String[]> map = new HashMap<String, String[]>();
111
112 Enumeration<String> enu = getParameterNames();
113
114 while (enu.hasMoreElements()) {
115 String s = enu.nextElement();
116
117 map.put(s, getParameterValues(s));
118 }
119
120 return map;
121 }
122
123 public Enumeration<String> getParameterNames() {
124 List<String> names = new ArrayList<String>();
125
126 if (_inherit) {
127 Enumeration<String> enu = super.getParameterNames();
128
129 while (enu.hasMoreElements()) {
130 names.add(enu.nextElement());
131 }
132 }
133
134 for (String s : _params.keySet()) {
135 if (!names.contains(s)) {
136 names.add(s);
137 }
138 }
139
140 return Collections.enumeration(names);
141 }
142
143 public String[] getParameterValues(String name) {
144 String[] values = _params.get(name);
145
146 if (_inherit && (values == null)) {
147 return super.getParameterValues(name);
148 }
149
150 return values;
151 }
152
153 public void setParameter(String name, String value) {
154 _params.put(name, new String[] {value});
155 }
156
157 public void setParameterValues(String name, String[] values) {
158 _params.put(name, values);
159 }
160
161 public Map<String, String[]> getDynamicParameterMap() {
162 return _params;
163 }
164
165 private Map<String, String[]> _params;
166 private boolean _inherit;
167
168 }