UrlUtil.java
- /*******************************************************************************
- * Copyright 2012 André Rouél
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
- package net.sf.uadetector.internal.util;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.Reader;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.nio.charset.Charset;
- import javax.annotation.Nonnull;
- import net.sf.qualitycheck.Check;
- import net.sf.qualitycheck.exception.IllegalStateOfArgumentException;
- import net.sf.uadetector.exception.CanNotOpenStreamException;
- /**
- * This class is intended to provide URL utility functions that encapsulate the checked exceptions like
- * {@link MalformedURLException} during the construction of an URL or the {@link IOException} while opening a stream to
- * an {@code URL}.
- *
- * @author André Rouél
- */
- public final class UrlUtil {
- /**
- * Creates an {@code URL} instance from the given {@code String} representation.<br>
- * <br>
- * This method tunnels a {@link MalformedURLException} by an {@link IllegalStateOfArgumentException}.
- *
- * @param url
- * {@code String} representation of an {@code URL}
- * @return new {@code URL} instance
- * @throws net.sf.qualitycheck.exception.IllegalNullArgumentException
- * if the given argument is {@code null}
- * @throws IllegalStateOfArgumentException
- * if the string representation of the given URL is invalid and a {@link MalformedURLException} occurs
- */
- public static URL build(@Nonnull final String url) {
- Check.notNull(url, "url");
- URL ret = null;
- try {
- ret = new URL(url);
- } catch (final MalformedURLException e) {
- throw new IllegalStateOfArgumentException("The given string is not a valid URL: " + url, e);
- }
- return ret;
- }
- /**
- * Tries to open an {@link InputStream} to the given {@link URL}.
- *
- * @param url
- * URL which should be opened
- * @return opened stream
- * @throws net.sf.qualitycheck.exception.IllegalNullArgumentException
- * if the given argument is {@code null}
- * @throws CanNotOpenStreamException
- * if no stream to the given {@code URL} can be established
- */
- public static InputStream open(@Nonnull final URL url) {
- Check.notNull(url, "url");
- final InputStream ret;
- try {
- ret = url.openStream();
- } catch (final IOException e) {
- throw new CanNotOpenStreamException(url.toString(), e);
- }
- return ret;
- }
- /**
- * Reads the content of the passed {@link URL} as string representation.
- *
- * @param url
- * URL to <em>UAS data</em>
- * @param charset
- * the character set in which the data should be read
- * @return content as {@code String}
- * @throws net.sf.qualitycheck.exception.IllegalNullArgumentException
- * if any of the given arguments is {@code null}
- * @throws CanNotOpenStreamException
- * if no stream to the given {@code URL} can be established
- * @throws IOException
- * if an I/O error occurs
- */
- public static String read(@Nonnull final URL url, @Nonnull final Charset charset) throws IOException {
- Check.notNull(url, "url");
- Check.notNull(charset, "charset");
- final InputStream inputStream = open(url);
- BufferedReader reader = null;
- final StringBuilder buffer = new StringBuilder();
- boolean threw = true;
- try {
- reader = new BufferedReader(new InputStreamReader(inputStream, charset));
- buffer.append(readAll(reader));
- threw = false;
- } finally {
- Closeables.close(reader, threw);
- Closeables.close(inputStream, false);
- }
- return buffer.toString();
- }
- /**
- * Reads the entire contents via the given {@link Reader} as string.
- *
- * @param reader
- * {@code Reader} to read the entire contents
- * @return the read contents as string
- * @throws IOException
- * If an I/O error occurs
- */
- private static String readAll(@Nonnull final Reader reader) throws IOException {
- final StringBuilder buffer = new StringBuilder();
- int cp;
- while ((cp = reader.read()) != -1) {
- buffer.append((char) cp);
- }
- return buffer.toString();
- }
- /**
- * Gets the URL to a given {@code File}.
- *
- * @param file
- * file to be converted to a URL
- * @return an URL to the passed file
- * @throws IllegalStateException
- * if no URL can be resolved to the given file
- */
- public static URL toUrl(@Nonnull final File file) {
- Check.notNull(file, "file");
- URL url = null;
- try {
- url = file.toURI().toURL();
- } catch (final MalformedURLException e) {
- throw new IllegalStateException("Can not construct an URL for passed file.", e);
- }
- return url;
- }
- /**
- * <strong>Attention:</strong> This class is not intended to create objects from it.
- */
- private UrlUtil() {
- // This class is not intended to create objects from it.
- }
- }