001/*
002  Copyright 2010-2016 Boxfuse GmbH
003  <p/>
004  Licensed under the Apache License, Version 2.0 (the "License");
005  you may not use this file except in compliance with the License.
006  You may obtain a copy of the License at
007  <p/>
008  http://www.apache.org/licenses/LICENSE-2.0
009  <p/>
010  Unless required by applicable law or agreed to in writing, software
011  distributed under the License is distributed on an "AS IS" BASIS,
012  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013  See the License for the specific language governing permissions and
014  limitations under the License.
015 */
016package io.avaje.classpath.scanner.internal;
017
018import java.io.File;
019import java.io.UnsupportedEncodingException;
020import java.net.URL;
021import java.net.URLDecoder;
022
023/**
024 * Collection of utility methods for working with URLs.
025 */
026public class UrlUtils {
027  /**
028   * Prevent instantiation.
029   */
030  private UrlUtils() {
031    // Do nothing
032  }
033
034  /**
035   * Retrieves the file path of this URL, with any trailing slashes removed.
036   *
037   * @param url The URL to get the file path for.
038   * @return The file path.
039   */
040  public static String toFilePath(URL url) {
041    try {
042      String filePath = new File(URLDecoder.decode(url.getPath().replace("+", "%2b"), "UTF-8")).getAbsolutePath();
043      if (filePath.endsWith("/")) {
044        return filePath.substring(0, filePath.length() - 1);
045      }
046      return filePath;
047    } catch (UnsupportedEncodingException e) {
048      throw new IllegalStateException("Can never happen", e);
049    }
050  }
051}