Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Map;

/*
  * JBoss, Home of Professional Open Source
  * Copyright 2005, JBoss Inc., and individual contributors as indicated
  * by the @authors tag. See the copyright.txt in the distribution for a
  * full listing of individual contributors.
  *
  * This is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as
  * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software 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
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */

public class Main {

    /**
     * Make a URL from the given string.
     *
     * <p>
     * If the string is a properly formatted file URL, then the file
     * portion will be made canonical.
     *
     * <p>
     * If the string is an invalid URL then it will be converted into a
     * file URL.
     *
     * @param urlspec           The string to construct a URL for.
     * @param relativePrefix    The string to prepend to relative file
     *                          paths, or null to disable prepending.
     * @return                  A URL for the given string.
     *
     * @throws MalformedURLException  Could not make a URL for the given string.
     */
    public static URL toURL(String urlspec, final String relativePrefix) throws MalformedURLException {
        urlspec = urlspec.trim();

        URL url;

        try {
            url = new URL(urlspec);
            if (url.getProtocol().equals("file")) {
                url = makeURLFromFilespec(url.getFile(), relativePrefix);
            }
        } catch (Exception e) {
            // make sure we have a absolute & canonical file url
            try {
                url = makeURLFromFilespec(urlspec, relativePrefix);
            } catch (IOException n) {
                //
                // jason: or should we rethrow e?
                //
                throw new MalformedURLException(n.toString());
            }
        }

        return url;
    }

    public static URI toURI(String urispec, final String relativePrefix) throws URISyntaxException {
        urispec = urispec.trim();

        URI uri;

        if (urispec.startsWith("file:")) {
            uri = makeURIFromFilespec(urispec.substring(5), relativePrefix);
        } else {
            uri = new URI(urispec);
        }

        return uri;
    }

    /** A helper to make a URL from a filespec. */
    private static URL makeURLFromFilespec(final String filespec, final String relativePrefix) throws IOException {
        // make sure the file is absolute & canonical file url
        File file = new File(decode(filespec));

        // if we have a prefix and the file is not abs then prepend
        if (relativePrefix != null && !file.isAbsolute()) {
            file = new File(relativePrefix, filespec);
        }

        // make sure it is canonical (no ../ and such)
        file = file.getCanonicalFile();

        return file.toURI().toURL();
    }

    private static String decode(String filespec) {
        try {
            return URLDecoder.decode(filespec, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("Error decoding filespec: " + filespec, e);
        }
    }

    private static URI makeURIFromFilespec(final String filespec, final String relativePrefix) {
        // make sure the file is absolute & canonical file url
        File file = new File(decode(filespec));

        // if we have a prefix and the file is not abs then prepend
        if (relativePrefix != null && !file.isAbsolute()) {
            file = new File(relativePrefix, filespec);
        }

        return file.toURI();
    }

    /**
     * Make a URL from the given string.
     *
     * @see #toURL(String,String)
     *
     * @param urlspec    The string to construct a URL for.
     * @return           A URL for the given string.
     *
     * @throws MalformedURLException  Could not make a URL for the given string.
     */
    public static URL toURL(final String urlspec) throws MalformedURLException {
        return toURL(urlspec, null);
    }

    /**
     * 
     * @param urispec
     * @return the uri
     * @throws URISyntaxException for any error
     */
    public static URI toURI(final String urispec) throws URISyntaxException {
        return toURI(urispec, null);
    }

}