IncludePageParamsRequestWrapper.java
package sk.iway.iwcm.system.stripes;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import sk.iway.iwcm.Tools;
/**
* upravuje parametre ktore vracia na zaklade zoznamu PPOnly nazov a mapy PP
* @author mbocko
*
*/
public class IncludePageParamsRequestWrapper extends HttpServletRequestWrapper
{
private Map<String, String> includeParams;
private List<String> includeParamsOnly;
private Map<String, String[]> paramMap=null;
public IncludePageParamsRequestWrapper(HttpServletRequest req, Map<String, String> includeParams, List<String> includeParamsOnly)
{
super(req);
this.includeParams = includeParams;
this.includeParamsOnly = includeParamsOnly;
}
@Override
public String getParameter(String name)
{
if (getParameterMap().containsKey(name))
{
String[] values = getParameterMap().get(name);
return values[0];
}
return null;
}
/**
* vrati mapu parametrov, parametre ktore su anotovane ako includeParamsOnly vyhodi uplne, potom tam hodi parametre z original rq,
* a potom prepise tie ktore su v PP
*/
@Override
public Map<String, String[]> getParameterMap()
{
if (paramMap!=null)
{
return paramMap;
}
else
{
Map<String, String[]> original = new HashMap<String, String[]>();
for (Object originalParamName : super.getParameterMap().keySet())
{
String lName = (String)originalParamName;
//ak by posielal property nejakeho objekty user.name
if (lName.contains("."))
lName = lName.substring(0, lName.indexOf("."));
//ak by posielal indexovany parameter nazovParametra[1] alebo user[1].name
if (lName.contains("["))
lName = lName.substring(0, lName.indexOf("["));
if (!includeParamsOnly.contains(lName))
{
original.put((String)originalParamName, super.getParameterValues((String)originalParamName));
}
}
for (String name : includeParams.keySet())
{
String maybeArrayValue = includeParams.get(name);
//ak je to pluskami deleny string, daj to ako pole hodnot, v actionbeane sa potom ziskava ako pole, list alebo set
// toto je mozno diskutabilne, zvazil by som zna pipe namiesto plus ako delimiter
if (maybeArrayValue.contains("+") && !maybeArrayValue.startsWith("+") && !maybeArrayValue.endsWith("+"))
{
String values[] = Tools.getTokens(maybeArrayValue, "+", true);
original.put(name, values);
}
else
{
String values[] = new String[1];
values[0] = includeParams.get(name);
original.put(name, values);
}
}
paramMap = original;
return original;
}
}
@Override
public String[] getParameterValues(String name)
{
return getParameterMap().get(name);
}
}