/******************************************************************************* * Copyright (c) 2000, 2007 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.update.internal.core.connection; import java.io.IOException; import java.io.InputStream; import java.net.URLConnection; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.update.internal.core.UpdateCore; /** * @author btripkov * */ public abstract class AbstractResponse implements IResponse { private static final long POLLING_INTERVAL = 200; protected URLConnection connection; protected InputStream openStreamWithCancel(URLConnection urlConnection, IProgressMonitor monitor) throws IOException, CoreException, TooManyOpenConnectionsException { ConnectionThreadManager.StreamRunnable runnable = new ConnectionThreadManager.StreamRunnable(urlConnection); Thread t = ConnectionThreadManagerFactory.getConnectionManager().getConnectionThread( runnable); t.start(); InputStream is = null; try { for (;;) { if (monitor.isCanceled()) { runnable.disconnect(); connection = null; break; } if (runnable.getInputStream() != null || !t.isAlive()) { is = runnable.getInputStream(); break; } if (runnable.getIOException() != null) throw runnable.getIOException(); if (runnable.getException() != null) throw new CoreException(new Status(IStatus.ERROR, UpdateCore.getPlugin().getBundle().getSymbolicName(), IStatus.OK, runnable.getException().getMessage(), runnable.getException())); t.join(POLLING_INTERVAL); } } catch (InterruptedException e) { } return is; } }