/******************************************************************************* * Copyright (c) 2012-2016 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.docker.client.connection; import java.io.IOException; import java.io.InputStream; /** * Keeps docker connection open until stream operation is finished. * * @author Anton Korneta */ public class CloseConnectionInputStream extends InputStream { private final InputStream is; private final DockerConnection connection; public CloseConnectionInputStream(InputStream is, DockerConnection connection) throws IOException { if (is == null) { if (connection != null) { connection.close(); } throw new IOException("InputStream required"); } if (connection == null) { is.close(); throw new IOException("DockerConnection required"); } this.is = is; this.connection = connection; } @Override public int read() throws IOException { return is.read(); } @Override public int read(byte[] b) throws IOException { return is.read(b); } @Override public int read(byte[] b, int off, int len) throws IOException { return is.read(b, off, len); } @Override public void close() throws IOException { try { is.close(); } finally { connection.close(); } } }