src/core/net/sf/basedb/util/uri/CloseResourceInputStream.java

Code
Comments
Other
Rev Date Author Line
5582 15 Mar 11 nicklas 1 /**
5582 15 Mar 11 nicklas 2   $Id$
5582 15 Mar 11 nicklas 3
5582 15 Mar 11 nicklas 4   Copyright (C) 2011 Nicklas Nordborg
5582 15 Mar 11 nicklas 5
5582 15 Mar 11 nicklas 6   This file is part of BASE - BioArray Software Environment.
5582 15 Mar 11 nicklas 7   Available at http://base.thep.lu.se/
5582 15 Mar 11 nicklas 8
5582 15 Mar 11 nicklas 9   BASE is free software; you can redistribute it and/or
5582 15 Mar 11 nicklas 10   modify it under the terms of the GNU General Public License
5582 15 Mar 11 nicklas 11   as published by the Free Software Foundation; either version 3
5582 15 Mar 11 nicklas 12   of the License, or (at your option) any later version.
5582 15 Mar 11 nicklas 13
5582 15 Mar 11 nicklas 14   BASE is distributed in the hope that it will be useful,
5582 15 Mar 11 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5582 15 Mar 11 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5582 15 Mar 11 nicklas 17   GNU General Public License for more details.
5582 15 Mar 11 nicklas 18
5582 15 Mar 11 nicklas 19   You should have received a copy of the GNU General Public License
5582 15 Mar 11 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5582 15 Mar 11 nicklas 21 */
5582 15 Mar 11 nicklas 22 package net.sf.basedb.util.uri;
5582 15 Mar 11 nicklas 23
5582 15 Mar 11 nicklas 24 import java.io.Closeable;
5582 15 Mar 11 nicklas 25 import java.io.FilterInputStream;
5582 15 Mar 11 nicklas 26 import java.io.IOException;
5582 15 Mar 11 nicklas 27 import java.io.InputStream;
5582 15 Mar 11 nicklas 28
5582 15 Mar 11 nicklas 29 /**
5582 15 Mar 11 nicklas 30   Inputstream filter that closes a given resource whenever the
5582 15 Mar 11 nicklas 31   parent input stream is closed.
5582 15 Mar 11 nicklas 32
5582 15 Mar 11 nicklas 33   @author Nicklas
5582 15 Mar 11 nicklas 34   @since 3.0
5582 15 Mar 11 nicklas 35   @base.modified $Date$
5582 15 Mar 11 nicklas 36 */
5582 15 Mar 11 nicklas 37 public class CloseResourceInputStream
5582 15 Mar 11 nicklas 38   extends FilterInputStream
5582 15 Mar 11 nicklas 39 {
5582 15 Mar 11 nicklas 40
5582 15 Mar 11 nicklas 41   private final Closeable resource;
5582 15 Mar 11 nicklas 42   /**
5582 15 Mar 11 nicklas 43     Create a new stream.
5582 15 Mar 11 nicklas 44     @param parent The parent input stream
5582 15 Mar 11 nicklas 45     @param resource The resource to close when the {@link #close()}
5582 15 Mar 11 nicklas 46       method is called.
5582 15 Mar 11 nicklas 47    */
5582 15 Mar 11 nicklas 48   public CloseResourceInputStream(InputStream parent, Closeable resource)
5582 15 Mar 11 nicklas 49   {
5582 15 Mar 11 nicklas 50     super(parent);
5582 15 Mar 11 nicklas 51     this.resource = resource;
5582 15 Mar 11 nicklas 52   }
5582 15 Mar 11 nicklas 53   
5582 15 Mar 11 nicklas 54   /*
5582 15 Mar 11 nicklas 55     From the InputStream class
5582 15 Mar 11 nicklas 56     --------------------------
5582 15 Mar 11 nicklas 57   */
5582 15 Mar 11 nicklas 58   /**
5582 15 Mar 11 nicklas 59     Make sure the client connection manager is closed when the
5582 15 Mar 11 nicklas 60     file has been completely downloaded.
5582 15 Mar 11 nicklas 61   */
5582 15 Mar 11 nicklas 62   @Override
5582 15 Mar 11 nicklas 63   public void close() 
5582 15 Mar 11 nicklas 64     throws IOException 
5582 15 Mar 11 nicklas 65   {
5582 15 Mar 11 nicklas 66     try
5582 15 Mar 11 nicklas 67     {
5582 15 Mar 11 nicklas 68       super.close();
5582 15 Mar 11 nicklas 69     }
5582 15 Mar 11 nicklas 70     finally
5582 15 Mar 11 nicklas 71     {
5582 15 Mar 11 nicklas 72       resource.close();
5582 15 Mar 11 nicklas 73     }
5582 15 Mar 11 nicklas 74   }
5582 15 Mar 11 nicklas 75   // --------------------------
5582 15 Mar 11 nicklas 76     
5582 15 Mar 11 nicklas 77 }