1 package org.lcsim.detector;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 public class PhysicalVolumeNavigatorStore
9 extends ArrayList<IPhysicalVolumeNavigator>
10 implements IPhysicalVolumeNavigatorStore
11 {
12 Map<String,IPhysicalVolumeNavigator> navigators = new HashMap<String,IPhysicalVolumeNavigator>();
13 private static PhysicalVolumeNavigatorStore store;
14 private String defaultNavigator="default";
15
16 public static IPhysicalVolumeNavigatorStore getInstance()
17 {
18 if ( store == null )
19 {
20 store = new PhysicalVolumeNavigatorStore();
21 }
22 return store;
23 }
24
25 public boolean add(IPhysicalVolumeNavigator nav)
26 {
27 add(nav,nav.getName());
28 return true;
29 }
30
31 public void add(IPhysicalVolumeNavigator nav, String name)
32 {
33 navigators.put(name, nav);
34 }
35
36 public IPhysicalVolumeNavigator createDefault(IPhysicalVolume topVolume)
37 {
38
39 return create("default",topVolume);
40 }
41
42 public IPhysicalVolumeNavigator create(String name, IPhysicalVolume topVolume)
43 {
44
45 IPhysicalVolumeNavigator nav = new PhysicalVolumeNavigator(name, topVolume);
46 add(nav, name);
47 return nav;
48 }
49
50 public IPhysicalVolumeNavigator get(String name)
51 {
52 return navigators.get(name);
53 }
54
55 public IPhysicalVolumeNavigator get(IPhysicalVolume world)
56 {
57 List<IPhysicalVolumeNavigator> search = find(world);
58 IPhysicalVolumeNavigator nav;
59 if ( search.size() == 0 )
60 {
61 nav = new PhysicalVolumeNavigator(defaultNavigator, world);
62 }
63 else {
64 nav = search.get(0);
65 }
66 return nav;
67 }
68
69 public List<IPhysicalVolumeNavigator> find(IPhysicalVolume world)
70 {
71 List<IPhysicalVolumeNavigator> navList = new ArrayList<IPhysicalVolumeNavigator>();
72 for ( IPhysicalVolumeNavigator nav : navList )
73 {
74 if ( nav.getTopPhysicalVolume() == world )
75 {
76 navList.add(nav);
77 }
78 }
79 return navList;
80 }
81
82 public IPhysicalVolumeNavigator getDefaultNavigator()
83 {
84 if ( !navigators.containsKey(defaultNavigator) )
85 {
86 throw new RuntimeException("No default navigator was found!");
87 }
88 else {
89 return navigators.get(defaultNavigator);
90 }
91 }
92
93 public void reset()
94 {
95 this.clear();
96 navigators = new HashMap<String,IPhysicalVolumeNavigator>();
97 }
98 }