From 27bac50073942634794c06bb228347743bc039f2 Mon Sep 17 00:00:00 2001 From: Pablo Fernandez Date: Sun, 9 Jan 2011 14:14:08 -0300 Subject: [PATCH] Added append parameters to URL method --- src/main/java/org/scribe/utils/URLUtils.java | 24 +++++++++- .../java/org/scribe/utils/URLUtilsTest.java | 45 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/scribe/utils/URLUtils.java b/src/main/java/org/scribe/utils/URLUtils.java index dc09c51..5051f15 100644 --- a/src/main/java/org/scribe/utils/URLUtils.java +++ b/src/main/java/org/scribe/utils/URLUtils.java @@ -7,8 +7,8 @@ import java.util.*; import org.scribe.exceptions.*; /** - * Utils to deal with URL and url-encodings - * + * Utils to deal with URL and url-encodings + * * @author Pablo Fernandez */ public class URLUtils @@ -17,6 +17,7 @@ public class URLUtils private static final String UTF_8 = "UTF-8"; private static final char PAIR_SEPARATOR = '='; private static final char PARAM_SEPARATOR = '&'; + private static final char QUERY_STRING_SEPARATOR = '?'; private static final String ERROR_MSG = String.format("Cannot find specified encoding: %s", UTF_8); @@ -100,6 +101,25 @@ public class URLUtils } } + /** + * Append given parameters to the query string of the url + * + * @param url the url to append parameters to + * @param params any map + * @return new url with parameters on query string + */ + public static String appendParametersToQueryString(String url, Map params) + { + Preconditions.checkNotNull(url, "Cannot append to null URL"); + String queryString = URLUtils.formURLEncodeMap(params); + if (queryString.isEmpty()) return url; + + // Check if there are parameters in the url already and use '&' instead of '?' + url += url.indexOf(QUERY_STRING_SEPARATOR) != -1 ? PARAM_SEPARATOR : QUERY_STRING_SEPARATOR; + url += queryString; + return url; + } + private static final class EncodingRule { private final String ch; diff --git a/src/test/java/org/scribe/utils/URLUtilsTest.java b/src/test/java/org/scribe/utils/URLUtilsTest.java index 90c8d11..8af12fe 100644 --- a/src/test/java/org/scribe/utils/URLUtilsTest.java +++ b/src/test/java/org/scribe/utils/URLUtilsTest.java @@ -82,4 +82,49 @@ public class URLUtilsTest URLUtils.percentDecode(toDecode); } + @Test(expected = IllegalArgumentException.class) + public void shouldThrowExceptionWhenAppendingNullMapToQuerystring() + { + String url = "http://www.example.com"; + Map nullMap = null; + URLUtils.appendParametersToQueryString(url, nullMap); + } + + @Test + public void shouldAppendNothingToQuerystringIfGivenEmptyMap() + { + String url = "http://www.example.com"; + Map emptyMap = new HashMap(); + String newUrl = URLUtils.appendParametersToQueryString(url, emptyMap); + Assert.assertEquals(url, newUrl); + } + + @Test + public void shouldAppendParametersToSimpleUrl() + { + String url = "http://www.example.com"; + String expectedUrl = "http://www.example.com?param1=value1¶m2=value%20with%20spaces"; + + Map params = new HashMap(); + params.put("param1", "value1"); + params.put("param2", "value with spaces"); + + url = URLUtils.appendParametersToQueryString(url, params); + Assert.assertEquals(url, expectedUrl); + } + + @Test + public void shouldAppendParametersToUrlWithQuerystring() + { + String url = "http://www.example.com?already=present"; + String expectedUrl = "http://www.example.com?already=present¶m1=value1¶m2=value%20with%20spaces"; + + Map params = new HashMap(); + params.put("param1", "value1"); + params.put("param2", "value with spaces"); + + url = URLUtils.appendParametersToQueryString(url, params); + Assert.assertEquals(url, expectedUrl); + } + }