001 /*
002 * Cobertura - http://cobertura.sourceforge.net/
003 *
004 * Copyright (C) 2009 John Lewis
005 *
006 * Note: This file is dual licensed under the GPL and the Apache
007 * Source License (so that it can be used from both the main
008 * Cobertura classes and the ant tasks).
009 *
010 * Cobertura is free software; you can redistribute it and/or modify
011 * it under the terms of the GNU General Public License as published
012 * by the Free Software Foundation; either version 2 of the License,
013 * or (at your option) any later version.
014 *
015 * Cobertura is distributed in the hope that it will be useful, but
016 * WITHOUT ANY WARRANTY; without even the implied warranty of
017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
018 * General Public License for more details.
019 *
020 * You should have received a copy of the GNU General Public License
021 * along with Cobertura; if not, write to the Free Software
022 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
023 * USA
024 */
025 package net.sourceforge.cobertura.util;
026
027 import java.io.File;
028 import java.io.InputStream;
029 import java.util.zip.ZipFile;
030
031 import org.apache.log4j.Logger;
032
033 public class Source {
034 private InputStream is;
035
036 //streamOrigin is either a File or a ZipFile
037 private Object streamOrigin;
038
039 private static Logger LOGGER = Logger.getLogger(Source.class);
040
041 public Source(InputStream is, Object streamOrigin)
042 {
043 this.is = is;
044 this.streamOrigin = streamOrigin;
045 }
046
047 public InputStream getInputStream()
048 {
049 return is;
050 }
051
052 /**
053 * Close the source input stream and the archive if it came from one.
054 *
055 * This will not throw anything. Any throwable is caught and a warning is logged.
056 */
057 public void close()
058 {
059 try
060 {
061 is.close();
062 }
063 catch (Throwable t)
064 {
065 LOGGER.warn("Failure closing input stream for " + getOriginDesc(), t);
066 }
067
068 if (streamOrigin instanceof ZipFile)
069 {
070 try
071 {
072 ((ZipFile) streamOrigin).close();
073 }
074 catch (Throwable t)
075 {
076 LOGGER.warn("Failure closing " + getOriginDesc(), t);
077 }
078 }
079 }
080
081 public String getOriginDesc()
082 {
083 String ret = "";
084
085 if (streamOrigin instanceof File)
086 {
087 ret = "file " + ((File) streamOrigin).getAbsolutePath();
088 }
089 else
090 {
091 ret = "archive " + ((ZipFile) streamOrigin).getName();
092 }
093 return ret;
094 }
095 }