package de.invesdwin.util.lang.uri; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.HashMap; import java.util.Map; import javax.annotation.concurrent.Immutable; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.EncoderException; import org.apache.commons.codec.net.URLCodec; import de.invesdwin.util.lang.Strings; @Immutable public final class URIs { private static final URLCodec URL_CODEC = new URLCodec(); private URIs() {} public static String encode(final String url) { try { return URL_CODEC.encode(url); } catch (final EncoderException e) { throw new RuntimeException(e); } } public static String decode(final String url) { try { return URL_CODEC.decode(url); } catch (final DecoderException e) { throw new RuntimeException(e); } } public static URL asUrl(final String uri) { if (uri == null) { return null; } try { return new URL(uri); //SUPPRESS CHECKSTYLE singleline } catch (final MalformedURLException e) { throw new RuntimeException(e); } } public static URL asUrl(final URI uri) { if (uri == null) { return null; } try { return uri.toURL(); } catch (final MalformedURLException e) { throw new RuntimeException(e); } } public static URI asUri(final String uri) { if (uri == null) { return null; } try { return new URI(uri); //SUPPRESS CHECKSTYLE singleline } catch (final URISyntaxException e) { throw new RuntimeException(e); } } public static URI asUriOrNull(final String uri) { if (uri == null) { return null; } try { return new URI(uri); //SUPPRESS CHECKSTYLE singleline } catch (final URISyntaxException e) { return null; } } public static URI asUri(final URL url) { if (url == null) { return null; } try { return url.toURI(); } catch (final URISyntaxException e) { throw new RuntimeException(e); } } public static String getBasis(final String uri) { return getBasis(asUri(uri)); } public static String getBasis(final URI uri) { return uri.toString().replace(uri.getPath(), ""); } public static String getBasis(final URL url) { return getBasis(asUri(url)); } public static Map<String, String> getQueryMap(final URL url) { return getQueryMap(url.getQuery()); } public static Map<String, String> getQueryMap(final URI uri) { return getQueryMap(uri.getQuery()); } /** * http://stackoverflow.com/questions/11733500/getting-url-parameter-in-java-and-extract-a-specific-text-from-that- * url */ private static Map<String, String> getQueryMap(final String query) { final String[] params = query.split("&"); final Map<String, String> map = new HashMap<String, String>(); for (final String param : params) { final String name = Strings.substringBefore(param, "="); final String value = Strings.substringAfter(param, "="); map.put(name, value); } return map; } public static URIsConnect connect(final String uri) { return connect(asUrl(uri)); } public static URIsConnect connect(final URI uri) { return connect(asUrl(uri)); } public static URIsConnect connect(final URL url) { return new URIsConnect(url); } public static URI setPort(final URI uri, final int port) { try { //CHECKSTYLE:OFF final URI newUri = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), port, uri.getPath(), uri.getQuery(), uri.getFragment()); //CHECKSTYLE:ON return newUri; } catch (final URISyntaxException e) { throw new RuntimeException(e); } } public static URL setPort(final URL url, final int port) { try { //CHECKSTYLE:OFF final URL newUri = new URL(url.getProtocol(), url.getHost(), port, url.getFile()); //CHECKSTYLE:ON return newUri; } catch (final MalformedURLException e) { throw new RuntimeException(e); } } }