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
035 public class DynamicRenderRequest extends RenderRequestWrapper {
036
037 public DynamicRenderRequest(RenderRequest renderRequest) {
038 this(renderRequest, null, true);
039 }
040
041 public DynamicRenderRequest(RenderRequest renderRequest, boolean inherit) {
042 this(renderRequest, null, inherit);
043 }
044
045 public DynamicRenderRequest(
046 RenderRequest renderRequest, Map<String, String[]> params) {
047
048 this(renderRequest, params, true);
049 }
050
051 public DynamicRenderRequest(
052 RenderRequest renderRequest, Map<String, String[]> params,
053 boolean inherit) {
054
055 super(renderRequest);
056
057 _params = new HashMap<String, String[]>();
058 _inherit = inherit;
059
060 if (params != null) {
061 _params.putAll(params);
062 }
063
064 if (_inherit && (renderRequest instanceof DynamicRenderRequest)) {
065 DynamicRenderRequest dynamicRenderRequest =
066 (DynamicRenderRequest)renderRequest;
067
068 setRequest(dynamicRenderRequest.getRequest());
069
070 params = dynamicRenderRequest.getDynamicParameterMap();
071
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(oldValues, curValues);
083
084 _params.put(name, newValues);
085 }
086 }
087 }
088 }
089
090 public Map<String, String[]> getDynamicParameterMap() {
091 return _params;
092 }
093
094 @Override
095 public String getParameter(String name) {
096 String[] values = _params.get(name);
097
098 if (_inherit && (values == null)) {
099 return super.getParameter(name);
100 }
101
102 if (ArrayUtil.isNotEmpty(values)) {
103 return values[0];
104 }
105 else {
106 return null;
107 }
108 }
109
110 @Override
111 public Map<String, String[]> getParameterMap() {
112 Map<String, String[]> map = new HashMap<String, String[]>();
113
114 if (_inherit) {
115 map.putAll(super.getParameterMap());
116 }
117
118 map.putAll(_params);
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 private boolean _inherit;
160 private Map<String, String[]> _params;
161
162 }