blob: f1f2ac95eda284526cd331f3d4f7cbcaadfad94b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 - 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* IBM Corporation - initial API and implementation
* yyyymmdd bug Email and other contact information
* -------- -------- -----------------------------------------------------------
* IBM Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.wst.common.uriresolver;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
/**
* @since 1.2
*/
public class URIHelper {
private static final int DEFAULT_TIMEOUT = 2500;
private URIHelper() {
// TODO Auto-generated constructor stub
}
/**
* Attempts to obtain an {@link InputStream} from the provided url. If one
* cannot be opened before <code>timeout</code>, the result is null.
*
* @param url
* the url to get an InputStream from
* @param timeout
* the amount of time to try to get an InputStream, a value of
* zero or lower will cause a default value to be used
* @return an {@link InputStream} from the <code>url</code> if it can be
* obtained in less time than <code>timeout</code>, otherwise
* <code>null</code>
*
*/
public static InputStream getInputStream(String url, int timeout) {
final InputStream[] result = new InputStream[1];
try {
final URLConnection connection = new URL(url).openConnection();
final Thread streamOpener = new Thread() {
public void run() {
try {
result[0] = connection.getInputStream();
}
catch (IOException e) {
}
finally {
/*
* Main thread moved on, cleanup.
*/
if (isInterrupted() && result[0] != null) {
try {
result[0].close();
}
catch (IOException e) {
}
}
}
}
};
streamOpener.start();
try {
streamOpener.join(timeout < 1 ? DEFAULT_TIMEOUT: timeout);
/*
* allow some time to open the inputstream
*/
if (streamOpener.isAlive())
streamOpener.interrupt();
}
catch (InterruptedException e) {
if (result[0] == null){
result[0] = connection.getInputStream();//bug407211
}
Thread.currentThread().interrupt();
}
}
catch (IOException e) {
}
return result[0];
}
}