|
|
@ -22,6 +22,7 @@ package org.airsonic.player.taglib; |
|
|
|
import org.airsonic.player.filter.ParameterDecodingFilter; |
|
|
|
import org.airsonic.player.filter.ParameterDecodingFilter; |
|
|
|
import org.airsonic.player.util.StringUtil; |
|
|
|
import org.airsonic.player.util.StringUtil; |
|
|
|
import org.apache.commons.lang.CharUtils; |
|
|
|
import org.apache.commons.lang.CharUtils; |
|
|
|
|
|
|
|
import org.apache.commons.lang3.tuple.Pair; |
|
|
|
import org.apache.taglibs.standard.tag.common.core.UrlSupport; |
|
|
|
import org.apache.taglibs.standard.tag.common.core.UrlSupport; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
@ -60,7 +61,7 @@ public class UrlTag extends BodyTagSupport { |
|
|
|
private String var; |
|
|
|
private String var; |
|
|
|
private String value; |
|
|
|
private String value; |
|
|
|
private String encoding = DEFAULT_ENCODING; |
|
|
|
private String encoding = DEFAULT_ENCODING; |
|
|
|
private List<Parameter> parameters = new ArrayList<Parameter>(); |
|
|
|
private List<Pair<String, String>> parameters = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
|
|
public int doStartTag() { |
|
|
|
public int doStartTag() { |
|
|
|
parameters.clear(); |
|
|
|
parameters.clear(); |
|
|
@ -94,16 +95,16 @@ public class UrlTag extends BodyTagSupport { |
|
|
|
result.append('?'); |
|
|
|
result.append('?'); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < parameters.size(); i++) { |
|
|
|
for (int i = 0; i < parameters.size(); i++) { |
|
|
|
Parameter parameter = parameters.get(i); |
|
|
|
Pair<String, String> parameter = parameters.get(i); |
|
|
|
try { |
|
|
|
try { |
|
|
|
result.append(parameter.getName()); |
|
|
|
result.append(parameter.getLeft()); |
|
|
|
if (isUtf8Hex() && !isAsciiAlphaNumeric(parameter.getValue())) { |
|
|
|
if (isUtf8Hex() && !isAsciiAlphaNumeric(parameter.getRight())) { |
|
|
|
result.append(ParameterDecodingFilter.PARAM_SUFFIX); |
|
|
|
result.append(ParameterDecodingFilter.PARAM_SUFFIX); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
result.append('='); |
|
|
|
result.append('='); |
|
|
|
if (parameter.getValue() != null) { |
|
|
|
if (parameter.getRight() != null) { |
|
|
|
result.append(encode(parameter.getValue())); |
|
|
|
result.append(encode(parameter.getRight())); |
|
|
|
} |
|
|
|
} |
|
|
|
if (i < parameters.size() - 1) { |
|
|
|
if (i < parameters.size() - 1) { |
|
|
|
result.append("&"); |
|
|
|
result.append("&"); |
|
|
@ -138,7 +139,7 @@ public class UrlTag extends BodyTagSupport { |
|
|
|
return DEFAULT_ENCODING.equals(encoding); |
|
|
|
return DEFAULT_ENCODING.equals(encoding); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private boolean isAsciiAlphaNumeric(String s) { |
|
|
|
static private boolean isAsciiAlphaNumeric(String s) { |
|
|
|
if (s == null) { |
|
|
|
if (s == null) { |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
@ -160,7 +161,7 @@ public class UrlTag extends BodyTagSupport { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void addParameter(String name, String value) { |
|
|
|
public void addParameter(String name, String value) { |
|
|
|
parameters.add(new Parameter(name, value)); |
|
|
|
parameters.add(Pair.of(name, value)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public String getVar() { |
|
|
|
public String getVar() { |
|
|
@ -186,25 +187,4 @@ public class UrlTag extends BodyTagSupport { |
|
|
|
public void setEncoding(String encoding) { |
|
|
|
public void setEncoding(String encoding) { |
|
|
|
this.encoding = encoding; |
|
|
|
this.encoding = encoding; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* A URL query parameter. |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private static class Parameter { |
|
|
|
|
|
|
|
private String name; |
|
|
|
|
|
|
|
private String value; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Parameter(String name, String value) { |
|
|
|
|
|
|
|
this.name = name; |
|
|
|
|
|
|
|
this.value = value; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String getName() { |
|
|
|
|
|
|
|
return name; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String getValue() { |
|
|
|
|
|
|
|
return value; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|