1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs.provider;
18
19 import org.apache.commons.vfs.FileSystemException;
20
21 import java.util.ArrayList;
22
23 /***
24 * A {@link VfsComponent} that contains a set of sub-components.
25 *
26 * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
27 * @version $Revision: 480428 $ $Date: 2006-11-29 07:15:24 +0100 (Mi, 29 Nov 2006) $
28 */
29 public abstract class AbstractVfsContainer
30 extends AbstractVfsComponent
31 {
32 /***
33 * The components contained by this component.
34 */
35 private final ArrayList components = new ArrayList();
36
37 /***
38 * Adds a sub-component to this component. If the sub-component implements
39 * {@link VfsComponent}, it is initialised. All sub-components are closed
40 * when this component is closed.
41 */
42 protected void addComponent(final Object component)
43 throws FileSystemException
44 {
45 if (!components.contains(component))
46 {
47
48 if (component instanceof VfsComponent)
49 {
50 VfsComponent vfsComponent = (VfsComponent) component;
51 vfsComponent.setLogger(getLogger());
52 vfsComponent.setContext(getContext());
53 vfsComponent.init();
54 }
55
56
57 components.add(component);
58 }
59 }
60
61 /***
62 * Removes a sub-component from this component.
63 */
64 protected void removeComponent(final Object component)
65 {
66 components.remove(component);
67 }
68
69 /***
70 * Closes the sub-components of this component.
71 */
72 public void close()
73 {
74
75 final int count = components.size();
76 for (int i = 0; i < count; i++)
77 {
78 final Object component = components.get(i);
79 if (component instanceof VfsComponent)
80 {
81 final VfsComponent vfsComponent = (VfsComponent) component;
82 vfsComponent.close();
83 }
84 }
85 components.clear();
86 }
87 }