Java tutorial
/* * Copyright (c) 2014 Magnet Systems, Inc. * All rights reserved. * * 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 com.magnet.plugin.common.helpers; import com.intellij.ide.IdeBundle; import com.intellij.openapi.application.ApplicationManager; import com.intellij.util.net.HttpConfigurable; import com.magnet.plugin.common.FormattedLogger; import com.sun.org.apache.xml.internal.security.utils.Base64; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; /** * Helper to access URL */ public class URLHelper { /** * connection timeout for http request */ private static final int CONNECTION_TIMEOUT = 10000; public static InputStream loadUrl(final String url) throws Exception { final InputStream[] inputStreams = new InputStream[] { null }; final Exception[] exception = new Exception[] { null }; Future<?> downloadThreadFuture = ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { try { HttpURLConnection connection; if (ApplicationManager.getApplication() != null) { connection = HttpConfigurable.getInstance().openHttpConnection(url); } else { connection = (HttpURLConnection) new URL(url).openConnection(); connection.setReadTimeout(CONNECTION_TIMEOUT); connection.setConnectTimeout(CONNECTION_TIMEOUT); } connection.connect(); inputStreams[0] = connection.getInputStream(); } catch (IOException e) { exception[0] = e; } } }); try { downloadThreadFuture.get(5, TimeUnit.SECONDS); } catch (TimeoutException ignored) { } if (!downloadThreadFuture.isDone()) { downloadThreadFuture.cancel(true); throw new Exception(IdeBundle.message("updates.timeout.error")); } if (exception[0] != null) throw exception[0]; return inputStreams[0]; } /** * Utility method to get a URL instance from either a file path or a url string * * @param source path or url string to the file * @return URL instance or null if source is invalid */ private static URL getURL(String source) { URL url = null; try { url = new URL(source); } catch (MalformedURLException e) { File file = new File(source); if (file.exists()) { try { url = file.toURI().toURL(); } catch (Exception ex) { // } } } return url; } /** * Get the file corresponding to the <code>source</code> * If <code>source</code> is a file path then return the file instance for it * If <code>source</code> is a URL then copy the resource to a local file, and return an instance of it * If there is no resource associated with source, then throw a CommandException * * @return file instance */ public static File getFileFromURL(String source) throws Exception { File file = new File(source); if (file.exists()) { return file; } URL url = getURL(source); if (url == null) { return null; } String fileName = source.substring(source.lastIndexOf("/") + 1, source.length()); File temp = File.createTempFile("downloaded-" + System.currentTimeMillis(), fileName); InputStream in = null; OutputStream out = null; try { in = loadUrl(source); if (null == in) { return null; } out = new FileOutputStream(temp); org.apache.commons.io.IOUtils.copy(in, out); } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } return temp; } public static boolean checkURL(String urlS) { FormattedLogger logger = new FormattedLogger(URLHelper.class); logger.append("checkURL:" + urlS); try { URL url = new URL(urlS); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); logger.append("Response code: " + conn.getResponseCode()); logger.showInfoLog(); return true; } catch (IOException e) { logger.append(e.getMessage()); logger.showErrorLog(); } return false; } public static String checkURLConnection(String urlS, String username, String password) { String status = "Error connection to server!"; FormattedLogger logger = new FormattedLogger(URLHelper.class); logger.append("checkURLConnection:" + urlS); try { URL url = new URL(urlS); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); if (username != null && username.trim().length() > 0 && password != null && password.trim().length() > 0) { final String authString = username + ":" + password; conn.setRequestProperty("Authorization", "Basic " + Base64.encode(authString.getBytes())); } conn.setRequestMethod("GET"); conn.setDoInput(true); status = "" + conn.getResponseCode(); logger.append("Response code:" + status); logger.showInfoLog(); } catch (Exception e) { logger.append(">>>" + e.getClass().getName() + " message: " + e.getMessage()); logger.showErrorLog(); } return status; } public static boolean checkPort(int port) { return port > 0 && port <= 65535; } public static boolean checkPort(String port) { try { return checkPort(Integer.parseInt(port)); } catch (NumberFormatException ex) { return false; } } }