1
2
3
4
5 package net.java.truevfs.kernel.spec;
6
7 import java.util.*;
8 import javax.annotation.CheckForNull;
9 import javax.annotation.concurrent.Immutable;
10 import net.java.truecommons.services.Container;
11
12
13
14
15
16
17
18
19
20
21
22 @Immutable
23 public abstract class FsAbstractCompositeDriver
24 implements FsCompositeDriver, Container<Map<FsScheme, FsDriver>> {
25
26 @Override
27 public final FsModel newModel(
28 final FsManager context,
29 final FsMountPoint mountPoint,
30 final FsModel parent) {
31 assert null == parent
32 ? null == mountPoint.getParent()
33 : parent.getMountPoint().equals(mountPoint.getParent());
34 return driver(mountPoint).newModel(context, mountPoint, parent);
35 }
36
37 @Override
38 public final FsController newController(
39 final FsManager context,
40 final FsModel model,
41 final @CheckForNull FsController parent)
42 throws ServiceConfigurationError {
43 assert null == parent
44 ? null == model.getParent()
45 : parent.getModel().equals(model.getParent());
46 return driver(model.getMountPoint()).newController(context, model, parent);
47 }
48
49 private FsDriver driver(final FsMountPoint mountPoint) {
50 final FsScheme scheme = mountPoint.getScheme();
51 final FsDriver driver = get().get(scheme);
52 if (null == driver)
53 throw new ServiceConfigurationError(scheme
54 + " (Unknown file system scheme! May be the class path doesn't contain the respective driver module or it isn't set up correctly?)");
55 return driver;
56 }
57 }