1 package org.lcsim.lcio;
2
3 import java.util.HashMap;
4 import java.util.LinkedHashMap;
5 import java.util.Map;
6
7
8
9
10
11 class HandlerManager
12 {
13 private Map<String,LCIOBlockHandler> handlerForType = new HashMap<String,LCIOBlockHandler>();
14 private Map<Class,LCIOBlockHandler> handlerForClass = new LinkedHashMap<Class,LCIOBlockHandler>();
15 private void register(LCIOBlockHandler handler)
16 {
17 handlerForType.put(handler.getType(),handler);
18 handlerForClass.put(handler.getClassForType(),handler);
19 }
20 private static HandlerManager theHandlerManager = new HandlerManager();
21
22 private HandlerManager()
23 {
24
25
26 register(new SIOSimCalorimeterHitBlockHandler());
27 register(new SIOSimTrackerHitBlockHandler());
28 register(new SIOMCParticleBlockHandler());
29 register(new SIOClusterBlockHandler());
30 register(new SIOTPCHitBlockHandler());
31 register(new SIOTrackerHitBlockHandler());
32 register(new SIOTrackBlockHandler());
33 register(new SIORawCalorimeterHitBlockHandler());
34 register(new SIOLCRelationBlockHandler());
35 register(new SIOReconstructedParticleBlockHandler());
36 register(new SIOCalorimeterHitBlockHandler());
37 register(new SIOGenericObjectBlockHandler());
38 register(new SIORawTrackerHitBlockHandler());
39 register(new SIOSiliconTrackerHitBlockHandler());
40 register(new SIOTrackerDataBlockHandler());
41 register(new SIOTrackerPulseBlockHandler());
42 register(new SIOVertexBlockHandler());
43 register(new SIOFloatVecBlockHandler());
44 register(new SIOIntVecBlockHandler());
45 register(new SIOStringVecBlockHandler());
46 }
47 static HandlerManager instance()
48 {
49 return theHandlerManager;
50 }
51 LCIOBlockHandler handlerForType(String type)
52 {
53 if (type.endsWith(LCIOConstants.references))
54 {
55 String subType = type.substring(0,type.length()-LCIOConstants.references.length());
56 LCIOBlockHandler subHandler = handlerForType.get(subType);
57 if (subHandler == null) return null;
58 else return new SIOReferencesBlockHandler(subType,subHandler.getClassForType());
59 }
60 else return handlerForType.get(type);
61 }
62 LCIOBlockHandler handlerForClass(Class type, int flags)
63 {
64 LCIOBlockHandler handler = handlerForClass.get(type);
65
66 if (handler == null)
67 {
68 for (LCIOBlockHandler h : handlerForType.values())
69 {
70 if (h.getClassForType().isAssignableFrom(type))
71 {
72 handler = h;
73 handlerForClass.put(type,h);
74 break;
75 }
76 }
77 }
78 if (LCIOUtil.bitTest(flags,LCIOConstants.BITSubset))
79 {
80 return new SIOReferencesBlockHandler(handler.getType()+LCIOConstants.references,type);
81 }
82 else return handler;
83 }
84 }