1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  package org.archive.io.arc;
26  
27  import java.util.concurrent.atomic.AtomicInteger;
28  
29  import org.apache.commons.pool.BasePoolableObjectFactory;
30  import org.archive.io.WriterPool;
31  import org.archive.io.WriterPoolMember;
32  import org.archive.io.WriterPoolSettings;
33  
34  
35  /***
36   * A pool of ARCWriters.
37   *
38   * @author stack
39   */
40  public class ARCWriterPool extends WriterPool {
41      /***
42       * Constructor
43       *
44       * @param settings Settings for this pool.
45       * @param poolMaximumActive
46       * @param poolMaximumWait
47       */
48      public ARCWriterPool(final WriterPoolSettings settings,
49              final int poolMaximumActive, final int poolMaximumWait) {
50          this(new AtomicInteger(), settings, poolMaximumActive, poolMaximumWait);
51      }
52  
53      /***
54       * Constructor
55       *
56       * @param serial  Used to generate unique filename sequences
57       * @param settings Settings for this pool.
58       * @param poolMaximumActive
59       * @param poolMaximumWait
60       */
61      public ARCWriterPool(final AtomicInteger serial,
62      		final WriterPoolSettings settings,
63              final int poolMaximumActive, final int poolMaximumWait) {
64      	super(serial, new BasePoolableObjectFactory() {
65              public Object makeObject() throws Exception {
66                  return new ARCWriter(serial, settings.getOutputDirs(),
67                          settings.getPrefix(), settings.getSuffix(),
68                          settings.isCompressed(), settings.getMaxSize(),
69                          settings.getMetadata());
70              }
71  
72              public void destroyObject(Object arcWriter)
73              throws Exception {
74                  ((WriterPoolMember)arcWriter).close();
75                  super.destroyObject(arcWriter);
76              }
77      	}, settings, poolMaximumActive, poolMaximumWait);
78      }
79  }