Java tutorial
/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core; import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; import org.apache.commons.lang.StringUtils; import org.springframework.util.Assert; public class RequestParameters { private SortedMap<String, Param> parameters; public RequestParameters() { this.parameters = new TreeMap<String, Param>(); } public RequestParameters(Map<String, String[]> params) { this(); if (params != null) { for (Map.Entry<String, String[]> entry : params.entrySet()) { this.parameters.put(entry.getKey(), new Param(entry.getKey(), entry.getValue())); } } } public RequestParameters(RequestParameters requestParameters) { parameters = new TreeMap<String, Param>(); for (Param param : requestParameters.parameters.values()) { parameters.put(param.getName(), param); } } public Collection<Param> getParameters() { return parameters.values(); } public Param getParameter(String paramName) { return parameters.get(paramName); } public int getParameterCount() { return this.parameters.size(); } public String[] getParameterNames() { return this.parameters.keySet().toArray(new String[this.parameters.size()]); } public boolean hasParameter(String name) { return this.parameters.containsKey(name); } public String getParameterValue(String name) { final Param param = this.parameters.get(name); if (param == null) { return null; } return param.getFirstValue(); } public String[] getParameterValues(String name) { final Param param = this.parameters.get(name); if (param == null) { return null; } return param.getValues(); } public String getParameterValuesAsCommaSeparatedString(String parameterName) { Param param = parameters.get(parameterName); if (param == null) { return null; } return param.getParameterValuesAsCommaSeparatedString(); } public void setParameterValue(String name, String value) { if (value != null) { setParameterValues(name, new String[] { value }); } } public void setParameterValues(String name, String[] values) { if ((values != null) && (values.length > 0)) { this.parameters.put(name, new Param(name, values)); } else { this.parameters.remove(name); } } public void setParam(Param param) { this.parameters.put(param.getName(), param); } public void addParameterValue(String name, String value) { if (value != null) { addParameterValues(name, new String[] { value }); } } public void addParameterValues(String name, String[] values) { if ((values != null) && (values.length > 0)) { Param existingParam = this.parameters.get(name); if (existingParam != null) { this.parameters.put(name, existingParam.addValues(values)); } else { this.parameters.put(name, new Param(name, values)); } } } public void removeParameter(String name) { this.parameters.remove(name); } public RequestParameters copy() { return new RequestParameters(this); } public boolean hasParameters() { return parameters.size() > 0; } /** * Return the parameters formatted as in a http request. */ public String getAsString(boolean startWithQuestionMark) { RequestParametersToStringBuilder builder = new RequestParametersToStringBuilder(); builder.setStartWithQuestionMark(startWithQuestionMark); return builder.toString(this); } public SortedMap<String, Param> getAsMap() { return Collections.unmodifiableSortedMap(parameters); } public SortedMap<String, String[]> getAsMapWithStringValues() { SortedMap<String, String[]> map = new TreeMap<String, String[]>(); for (Param param : parameters.values()) { map.put(param.getName(), param.getValues()); } return map; } public class Param { private String name; private String[] values; public Param(String name, String value) { Assert.notNull(name, "name cannot be null"); Assert.notNull(value, "value cannot be null"); this.name = name; this.values = new String[] { value }; } public Param(String name, String[] values) { Assert.notNull(name, "name cannot be null"); Assert.notNull(values, "values cannot be null"); this.name = name; this.values = values; } public String getName() { return name; } public String[] getValues() { return values; } public Param addValues(String[] values) { String[] existingValueArray = this.values; String[] newValueArray = new String[existingValueArray.length + values.length]; System.arraycopy(existingValueArray, 0, newValueArray, 0, existingValueArray.length); System.arraycopy(values, 0, newValueArray, existingValueArray.length, values.length); return new Param(name, newValueArray); } public String getFirstValue() { if (values.length == 0) { return null; } return values[0]; } public boolean isEmpty() { if (values.length == 0) { return true; } for (String v : values) { if (!StringUtils.isEmpty(v)) { return false; } } return true; } public String getParameterValuesAsCommaSeparatedString() { StringBuffer s = new StringBuffer(""); for (int i = 0; i < values.length; i++) { String v = values[i]; s.append(v); if (i < values.length - 1) { s.append(","); } } return s.toString(); } public String toString() { if (isEmpty()) { return "[]"; } StringBuffer s = new StringBuffer(); s.append("["); for (int i = 0; i < values.length; i++) { String v = values[i]; s.append(v); if (i < values.length - 1) { s.append(","); } } s.append("]"); return s.toString(); } } }