extensions/net.sf.basedb.xfiles/trunk/src/net/sf/basedb/xfiles/MultiCloseable.java

Code
Comments
Other
Rev Date Author Line
2518 24 Jun 14 nicklas 1 package net.sf.basedb.xfiles;
2518 24 Jun 14 nicklas 2
2518 24 Jun 14 nicklas 3 import java.io.Closeable;
2518 24 Jun 14 nicklas 4 import java.io.IOException;
2571 13 Aug 14 nicklas 5 import java.util.Collection;
2518 24 Jun 14 nicklas 6
2518 24 Jun 14 nicklas 7 /**
2518 24 Jun 14 nicklas 8   Wrapper around multiple {@link Closeable} which are closed
2518 24 Jun 14 nicklas 9   when this wrapper is closed.
2518 24 Jun 14 nicklas 10   @author nicklas
2518 24 Jun 14 nicklas 11   @since 1.0
2518 24 Jun 14 nicklas 12 */
2518 24 Jun 14 nicklas 13 public class MultiCloseable 
2518 24 Jun 14 nicklas 14   implements Closeable 
2518 24 Jun 14 nicklas 15 {
2518 24 Jun 14 nicklas 16   
2518 24 Jun 14 nicklas 17   
2518 24 Jun 14 nicklas 18   /**
2518 24 Jun 14 nicklas 19     Utility method for closing several closeable without throwing an exception.
2518 24 Jun 14 nicklas 20     @param toClose An array of Closeable objects
2518 24 Jun 14 nicklas 21   */
2518 24 Jun 14 nicklas 22   public static void closeAll(Closeable... toClose)
2518 24 Jun 14 nicklas 23   {
2571 13 Aug 14 nicklas 24     if (toClose == null) return;
2518 24 Jun 14 nicklas 25     for (Closeable c : toClose)
2518 24 Jun 14 nicklas 26     {
2518 24 Jun 14 nicklas 27       close(c);
2518 24 Jun 14 nicklas 28     }
2518 24 Jun 14 nicklas 29   }
2518 24 Jun 14 nicklas 30   
2518 24 Jun 14 nicklas 31   /**
2571 13 Aug 14 nicklas 32     Utility method for closing several closeable without throwing an exception.
2571 13 Aug 14 nicklas 33     @param toClose A collection with Closeable objects
2571 13 Aug 14 nicklas 34     @since 1.1
2571 13 Aug 14 nicklas 35   */
2571 13 Aug 14 nicklas 36   public static void closeAll(Collection<? extends Closeable> toClose)
2571 13 Aug 14 nicklas 37   {
2571 13 Aug 14 nicklas 38     if (toClose == null) return;
2571 13 Aug 14 nicklas 39     for (Closeable c : toClose)
2571 13 Aug 14 nicklas 40     {
2571 13 Aug 14 nicklas 41       close(c);
2571 13 Aug 14 nicklas 42     }
2571 13 Aug 14 nicklas 43   }
2571 13 Aug 14 nicklas 44   
2571 13 Aug 14 nicklas 45   /**
2518 24 Jun 14 nicklas 46     Utility method for closing a single closeable without throwing an exception.
2518 24 Jun 14 nicklas 47     @param c A Closeable object (may be null)
2518 24 Jun 14 nicklas 48   */
2518 24 Jun 14 nicklas 49   public static void close(Closeable c)
2518 24 Jun 14 nicklas 50   {
2518 24 Jun 14 nicklas 51     if (c == null) return;
2518 24 Jun 14 nicklas 52     try
2518 24 Jun 14 nicklas 53     {
2518 24 Jun 14 nicklas 54       c.close();
2518 24 Jun 14 nicklas 55     }
2518 24 Jun 14 nicklas 56     catch (IOException ex)
2518 24 Jun 14 nicklas 57     {}
2518 24 Jun 14 nicklas 58   }
2518 24 Jun 14 nicklas 59
2518 24 Jun 14 nicklas 60   
2518 24 Jun 14 nicklas 61   private final Closeable[] toClose;
2571 13 Aug 14 nicklas 62   private boolean isClosed;
2518 24 Jun 14 nicklas 63   
2518 24 Jun 14 nicklas 64   public MultiCloseable(Closeable... toClose)
2518 24 Jun 14 nicklas 65   {
2518 24 Jun 14 nicklas 66     this.toClose = toClose;
2518 24 Jun 14 nicklas 67   }
2518 24 Jun 14 nicklas 68   
2518 24 Jun 14 nicklas 69   @Override
2518 24 Jun 14 nicklas 70   public void close()
2518 24 Jun 14 nicklas 71   {
2571 13 Aug 14 nicklas 72     if (!isClosed) closeAll(toClose);
2571 13 Aug 14 nicklas 73     isClosed = true;
2518 24 Jun 14 nicklas 74   }
2518 24 Jun 14 nicklas 75
2518 24 Jun 14 nicklas 76 }