aboutsummaryrefslogtreecommitdiff
path: root/subsonic-main/src/main/java/net/sourceforge/subsonic/taglib/UrlTag.java
diff options
context:
space:
mode:
Diffstat (limited to 'subsonic-main/src/main/java/net/sourceforge/subsonic/taglib/UrlTag.java')
-rw-r--r--subsonic-main/src/main/java/net/sourceforge/subsonic/taglib/UrlTag.java207
1 files changed, 0 insertions, 207 deletions
diff --git a/subsonic-main/src/main/java/net/sourceforge/subsonic/taglib/UrlTag.java b/subsonic-main/src/main/java/net/sourceforge/subsonic/taglib/UrlTag.java
deleted file mode 100644
index 141ba847..00000000
--- a/subsonic-main/src/main/java/net/sourceforge/subsonic/taglib/UrlTag.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2009 (C) Sindre Mehus
- */
-package net.sourceforge.subsonic.taglib;
-
-import net.sourceforge.subsonic.Logger;
-import net.sourceforge.subsonic.filter.ParameterDecodingFilter;
-import net.sourceforge.subsonic.util.StringUtil;
-import org.apache.taglibs.standard.tag.common.core.UrlSupport;
-import org.apache.commons.lang.CharUtils;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.BodyTagSupport;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Creates a URL with optional query parameters. Similar to 'c:url', but
- * you may specify which character encoding to use for the URL query
- * parameters. If no encoding is specified, the following steps are performed:
- * <ul>
- * <li>Parameter values are encoded as the hexadecimal representation of the UTF-8 bytes of the original string.</li>
- * <li>Parameter names are prepended with the suffix "Utf8Hex"</li>
- * <li>Note: Nothing is done with the parameter name or value if the value only contains ASCII alphanumeric characters.</li>
- * </ul>
- * <p/>
- * (The problem with c:url is that is uses the same encoding as the http response,
- * but most(?) servlet container assumes that ISO-8859-1 is used.)
- *
- * @author Sindre Mehus
- */
-public class UrlTag extends BodyTagSupport {
-
- private String DEFAULT_ENCODING = "Utf8Hex";
- private static final Logger LOG = Logger.getLogger(UrlTag.class);
-
- private String var;
- private String value;
- private String encoding = DEFAULT_ENCODING;
- private List<Parameter> parameters = new ArrayList<Parameter>();
-
- public int doStartTag() throws JspException {
- parameters.clear();
- return EVAL_BODY_BUFFERED;
- }
-
- public int doEndTag() throws JspException {
-
- // Rewrite and encode the url.
- String result = formatUrl();
-
- // Store or print the output
- if (var != null)
- pageContext.setAttribute(var, result, PageContext.PAGE_SCOPE);
- else {
- try {
- pageContext.getOut().print(result);
- } catch (IOException x) {
- throw new JspTagException(x);
- }
- }
- return EVAL_PAGE;
- }
-
- private String formatUrl() throws JspException {
- String baseUrl = UrlSupport.resolveUrl(value, null, pageContext);
-
- StringBuffer result = new StringBuffer();
- result.append(baseUrl);
- if (!parameters.isEmpty()) {
- result.append('?');
-
- for (int i = 0; i < parameters.size(); i++) {
- Parameter parameter = parameters.get(i);
- try {
- result.append(parameter.getName());
- if (isUtf8Hex() && !isAsciiAlphaNumeric(parameter.getValue())) {
- result.append(ParameterDecodingFilter.PARAM_SUFFIX);
- }
-
- result.append('=');
- if (parameter.getValue() != null) {
- result.append(encode(parameter.getValue()));
- }
- if (i < parameters.size() - 1) {
- result.append("&");
- }
-
- } catch (UnsupportedEncodingException x) {
- throw new JspTagException(x);
- }
- }
- }
- return result.toString();
- }
-
- private String encode(String s) throws UnsupportedEncodingException {
- if (isUtf8Hex()) {
- if (isAsciiAlphaNumeric(s)) {
- return s;
- }
-
- try {
- return StringUtil.utf8HexEncode(s);
- } catch (Exception x) {
- LOG.error("Failed to utf8hex-encode the string '" + s + "'.", x);
- return s;
- }
- }
-
- return URLEncoder.encode(s, encoding);
- }
-
- private boolean isUtf8Hex() {
- return DEFAULT_ENCODING.equals(encoding);
- }
-
- private boolean isAsciiAlphaNumeric(String s) {
- if (s == null) {
- return true;
- }
-
- for (int i = 0; i < s.length(); i++) {
- if (!CharUtils.isAsciiAlphanumeric(s.charAt(i))) {
- return false;
- }
- }
- return true;
- }
-
- public void release() {
- var = null;
- value = null;
- encoding = DEFAULT_ENCODING;
- parameters.clear();
- super.release();
- }
-
- public void addParameter(String name, String value) {
- parameters.add(new Parameter(name, value));
- }
-
- public String getVar() {
- return var;
- }
-
- public void setVar(String var) {
- this.var = var;
- }
-
- public String getValue() {
- return value;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
- public String getEncoding() {
- return encoding;
- }
-
- public void setEncoding(String 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;
- }
- }
-}