View Javadoc

1   /*******************************************************************************
2    * Copyright (c) 2007, 2014 Massimiliano Ziccardi
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *******************************************************************************/
16  package it.jnrpe.utils;
17  
18  import java.io.Closeable;
19  import java.io.File;
20  import java.io.FileInputStream;
21  import java.io.FileNotFoundException;
22  import java.io.FileOutputStream;
23  import java.io.InputStream;
24  import java.io.OutputStream;
25  import java.io.Reader;
26  import java.io.Writer;
27  import java.util.ArrayList;
28  import java.util.List;
29  
30  /**
31   * Utility class for handling streams.
32   *
33   * @author Massimiliano Ziccardi
34   *
35   */
36  public final class StreamManager {
37      /**
38       * Contains all the streams to be managed by the {@link StreamManager}
39       * object.
40       */
41      private final List<Closeable> managedStreamsList =
42              new ArrayList<Closeable>();
43  
44      /**
45       * Default constructor.
46       */
47      public StreamManager() {
48      }
49  
50      /**
51       * Handles the received InputStream and returns it.
52       *
53       * @param in
54       *            The stream to be automatically closed when {@link #closeAll()}
55       *            is called.
56       * @return The passed in stream.
57       */
58      public InputStream handle(final InputStream in) {
59          managedStreamsList.add(in);
60          return in;
61      }
62  
63      /**
64       * Handles the received OutputStream and returns it.
65       *
66       * @param out
67       *            The stream to be automatically closed when {@link #closeAll()}
68       *            is called.
69       * @return The passed in stream.
70       */
71      public OutputStream handle(final OutputStream out) {
72          managedStreamsList.add(out);
73          return out;
74      }
75  
76      /**
77       * Handles the received Reader and returns it.
78       *
79       * @param r
80       *            The reader to be automatically closed when {@link #closeAll()}
81       *            is called.
82       * @return The passed in reader.
83       */
84      public Reader handle(final Reader r) {
85          managedStreamsList.add(r);
86          return r;
87      }
88  
89      /**
90       * Handles the received Writer and returns it.
91       *
92       * @param w
93       *            The writer to be automatically closed when {@link #closeAll()}
94       *            is called.
95       * @return The passed in writer.
96       */
97      public Writer handle(final Writer w) {
98          managedStreamsList.add(w);
99          return w;
100     }
101 
102     /**
103      * Returns an InputStream on the given file.
104      *
105      * @param f
106      *            The file attached to the returned stream to be automatically
107      *            closed when {@link #closeAll()} is called.
108      * @return The stream to the passed in file
109      * @throws FileNotFoundException
110      *             If the file does not exists
111      */
112     public InputStream getInputStream(final File f)
113             throws FileNotFoundException {
114         return handle(new FileInputStream(f));
115     }
116 
117     /**
118      * Returns an OutputStream on the given file.
119      *
120      * @param f
121      *            The file attached to the returned stream to be automatically
122      *            closed when {@link #closeAll()} is called.
123      * @return The stream to the passed in file
124      * @throws FileNotFoundException
125      *             If the file does not exists
126      */
127     public OutputStream getOutputStream(final File f)
128             throws FileNotFoundException {
129         return handle(new FileOutputStream(f));
130     }
131 
132     /**
133      * Closes all handles streams and readers. Non exception is thrown. This.
134      * method should be called in the finally block.
135      */
136     public void closeAll() {
137         for (Closeable obj : managedStreamsList) {
138             try {
139                 obj.close();
140             } catch (Exception e) {
141                 // if (m_Logger.isDebugEnabled())
142                 // m_Logger.debug("EXCEPTION CLOSING STREAM/READER : " +
143                 // e.getMessage());
144             }
145         }
146     }
147 
148 }