Mercurial > hg > graal-compiler
diff mxtool/URLConnectionDownload.java @ 3723:6c5f528c7aac
Added a copy of the mxtool to repo.
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 16 Dec 2011 16:46:33 +0100 |
parents | |
children | 148fa38782e8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mxtool/URLConnectionDownload.java Fri Dec 16 16:46:33 2011 +0100 @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import java.io.*; +import java.net.*; +import java.util.*; +import java.util.regex.*; + +/** + * Downloads content from a given URL to a given file. + * + * @param path where to write the content + * @param urls the URLs to try, stopping after the first successful one + */ +public class URLConnectionDownload { + + /** + * Downloads content from a given URL to a given file. + * + * @param args + * arg[0] is the path where to write the content. The remainder + * of args are the URLs to try, stopping after the first + * successful one + */ + public static void main(String[] args) { + File path = new File(args[0]); + String[] urls = new String[args.length - 1]; + System.arraycopy(args, 1, urls, 0, urls.length); + + File parent = path.getParentFile(); + makeDirectory(parent); + + // Enable use of system proxies + System.setProperty("java.net.useSystemProxies", "true"); + + String proxy = System.getenv("HTTP_PROXY"); + String proxyMsg = ""; + if (proxy != null) { + Pattern p = Pattern.compile("(?:http://)?([^:]+)(:\\d+)?"); + Matcher m = p.matcher(proxy); + if (m.matches()) { + String host = m.group(1); + String port = m.group(2); + System.setProperty("http.proxyHost", host); + if (port != null) { + port = port.substring(1); // strip ':' + System.setProperty("http.proxyPort", port); + } + proxyMsg = " via proxy " + proxy; + } else { + System.err.println("Value of HTTP_PROXY is not valid: " + proxy); + } + } else { + System.err.println("** If behind a firewall without direct internet access, use the HTTP_PROXY environment variable (e.g. 'env HTTP_PROXY=proxy.company.com:80 max ...') or download manually with a web browser."); + } + + for (String s : urls) { + try { + System.err.println("Downloading " + s + " to " + path + proxyMsg); + URL url = new URL(s); + URLConnection conn = url.openConnection(); + // 10 second timeout to establish connection + conn.setConnectTimeout(10000); + InputStream in = conn.getInputStream(); + int size = conn.getContentLength(); + FileOutputStream out = new FileOutputStream(path); + int read = 0; + byte[] buf = new byte[8192]; + int n = 0; + while ((read = in.read(buf)) != -1) { + n += read; + System.err.print("\r " + n + " bytes " + (size == -1 ? "" : " ( " + (n * 100 / size) + "%)")); + out.write(buf, 0, read); + } + System.err.println(); + out.close(); + in.close(); + return; + } catch (MalformedURLException e) { + throw new Error("Error in URL " + s, e); + } catch (IOException e) { + System.err.println("Error reading from " + s + ": " + e); + path.delete(); + } + } + throw new Error("Could not download content to " + path + " from " + Arrays.toString(urls)); + } + + private static void makeDirectory(File directory) { + if (!directory.exists() && !directory.mkdirs()) { + throw new Error("Could not make directory " + directory); + } + } +} +