001
014
015 package com.liferay.portal.kernel.portlet;
016
017 import com.liferay.portal.kernel.util.ArrayUtil;
018
019 import java.util.Collections;
020 import java.util.Enumeration;
021 import java.util.HashMap;
022 import java.util.LinkedHashSet;
023 import java.util.Map;
024 import java.util.Set;
025
026 import javax.portlet.RenderRequest;
027 import javax.portlet.filter.RenderRequestWrapper;
028
029
032 public class DynamicRenderRequest extends RenderRequestWrapper {
033
034 public DynamicRenderRequest(RenderRequest renderRequest) {
035 this(renderRequest, new HashMap<String, String[]>(), true);
036 }
037
038 public DynamicRenderRequest(
039 RenderRequest renderRequest, Map<String, String[]> params) {
040
041 this(renderRequest, params, true);
042 }
043
044 public DynamicRenderRequest(RenderRequest renderRequest, boolean inherit) {
045 this(renderRequest, new HashMap<String, String[]>(), inherit);
046 }
047
048 public DynamicRenderRequest(
049 RenderRequest renderRequest, Map<String, String[]> params,
050 boolean inherit) {
051
052 super(renderRequest);
053
054 _params = new HashMap<String, String[]>();
055 _inherit = inherit;
056
057 if (params != null) {
058 for (Map.Entry<String, String[]> entry : params.entrySet()) {
059 _params.put(entry.getKey(), entry.getValue());
060 }
061 }
062
063 if (_inherit && (renderRequest instanceof DynamicRenderRequest)) {
064 DynamicRenderRequest dynamicRenderRequest =
065 (DynamicRenderRequest)renderRequest;
066
067 setRequest(dynamicRenderRequest.getRequest());
068
069 params = dynamicRenderRequest.getDynamicParameterMap();
070
071 if (params != null) {
072 for (Map.Entry<String, String[]> entry : params.entrySet()) {
073 String name = entry.getKey();
074 String[] oldValues = entry.getValue();
075
076 String[] curValues = _params.get(name);
077
078 if (curValues == null) {
079 _params.put(name, oldValues);
080 }
081 else {
082 String[] newValues = ArrayUtil.append(
083 oldValues, curValues);
084
085 _params.put(name, newValues);
086 }
087 }
088 }
089 }
090 }
091
092 @Override
093 public String getParameter(String name) {
094 String[] values = _params.get(name);
095
096 if (_inherit && (values == null)) {
097 return super.getParameter(name);
098 }
099
100 if ((values != null) && (values.length > 0)) {
101 return values[0];
102 }
103 else {
104 return null;
105 }
106 }
107
108 @Override
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 @Override
124 public Enumeration<String> getParameterNames() {
125 Set<String> names = new LinkedHashSet<String>();
126
127 if (_inherit) {
128 Enumeration<String> enu = super.getParameterNames();
129
130 while (enu.hasMoreElements()) {
131 names.add(enu.nextElement());
132 }
133 }
134
135 names.addAll(_params.keySet());
136
137 return Collections.enumeration(names);
138 }
139
140 @Override
141 public String[] getParameterValues(String name) {
142 String[] values = _params.get(name);
143
144 if (_inherit && (values == null)) {
145 return super.getParameterValues(name);
146 }
147
148 return values;
149 }
150
151 public void setParameter(String name, String value) {
152 _params.put(name, new String[] {value});
153 }
154
155 public void setParameterValues(String name, String[] values) {
156 _params.put(name, values);
157 }
158
159 public Map<String, String[]> getDynamicParameterMap() {
160 return _params;
161 }
162
163 private Map<String, String[]> _params;
164 private boolean _inherit;
165
166 }