1 package org.opentrafficsim.core.animation.network;
2
3 import java.rmi.RemoteException;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import org.opentrafficsim.core.animation.Drawable;
8 import org.opentrafficsim.core.animation.DrawingInfo;
9 import org.opentrafficsim.core.network.Network;
10
11 import nl.tudelft.simulation.event.EventInterface;
12 import nl.tudelft.simulation.event.EventListenerInterface;
13 import nl.tudelft.simulation.event.EventProducer;
14
15
16
17
18
19
20
21
22
23 public class NetworkAnimation extends EventProducer implements EventListenerInterface
24 {
25
26 private static final long serialVersionUID = 1L;
27
28
29 private final Network network;
30
31
32 private Map<Class<? extends Drawable>, DrawingInfo> classDrawingInfoMap = new HashMap<>();
33
34
35 private Map<Drawable, DrawingInfo> baseDrawingInfoMap = new HashMap<>();
36
37
38 private Map<Drawable, DrawingInfo> dynamicDrawingInfoMap = new HashMap<>();
39
40
41
42
43
44
45 public NetworkAnimation(Network network) throws RemoteException
46 {
47 super();
48 this.network = network;
49 this.network.addListener(this, Network.ANIMATION_GTU_ADD_EVENT);
50 this.network.addListener(this, Network.ANIMATION_GTU_REMOVE_EVENT);
51 this.network.addListener(this, Network.ANIMATION_NODE_ADD_EVENT);
52 this.network.addListener(this, Network.ANIMATION_NODE_REMOVE_EVENT);
53 this.network.addListener(this, Network.ANIMATION_LINK_ADD_EVENT);
54 this.network.addListener(this, Network.ANIMATION_LINK_REMOVE_EVENT);
55 this.network.addListener(this, Network.ANIMATION_OBJECT_ADD_EVENT);
56 this.network.addListener(this, Network.ANIMATION_OBJECT_REMOVE_EVENT);
57 this.network.addListener(this, Network.ANIMATION_INVISIBLE_OBJECT_ADD_EVENT);
58 this.network.addListener(this, Network.ANIMATION_INVISIBLE_OBJECT_REMOVE_EVENT);
59 this.network.addListener(this, Network.ANIMATION_ROUTE_ADD_EVENT);
60 this.network.addListener(this, Network.ANIMATION_ROUTE_REMOVE_EVENT);
61 this.network.addListener(this, Network.ANIMATION_GTU_ADD_EVENT);
62 this.network.addListener(this, Network.ANIMATION_GTU_REMOVE_EVENT);
63 }
64
65
66
67
68
69
70
71 public void addDrawingInfoClass(final Class<? extends Drawable> drawableClass, final DrawingInfo drawingInfo)
72 {
73 this.classDrawingInfoMap.put(drawableClass, drawingInfo);
74 }
75
76
77
78
79
80
81
82 public void addDrawingInfoBase(final Drawable drawable, final DrawingInfo drawingInfo)
83 {
84 this.baseDrawingInfoMap.put(drawable, drawingInfo);
85 }
86
87
88
89
90
91
92
93
94 public void addDrawingInfoDynamic(final Drawable drawable, final DrawingInfo drawingInfo)
95 {
96 this.dynamicDrawingInfoMap.put(drawable, drawingInfo);
97 }
98
99
100
101
102
103
104
105 public DrawingInfo getDrawingInfo(final Drawable drawable)
106 {
107 DrawingInfo drawingInfo = this.dynamicDrawingInfoMap.get(drawable);
108 if (drawingInfo != null)
109 {
110 return drawingInfo;
111 }
112 return getDrawingInfoBase(drawable);
113 }
114
115
116
117
118
119
120 public DrawingInfo getDrawingInfoBase(final Drawable drawable)
121 {
122 DrawingInfo drawingInfo = this.baseDrawingInfoMap.get(drawable);
123 if (drawingInfo != null)
124 {
125 return drawingInfo;
126 }
127 return getDrawingInfoClass(drawable.getClass());
128 }
129
130
131
132
133
134
135 public DrawingInfo getDrawingInfoClass(final Class<? extends Drawable> drawableClass)
136 {
137 DrawingInfo drawingInfo = this.classDrawingInfoMap.get(drawableClass);
138 if (drawingInfo != null)
139 {
140 return drawingInfo;
141 }
142 return null;
143 }
144
145
146
147
148 public final Network getNetwork()
149 {
150 return this.network;
151 }
152
153
154 @Override
155 public void notify(final EventInterface event) throws RemoteException
156 {
157 if (event.getType().equals(Network.ANIMATION_NODE_ADD_EVENT))
158 {
159
160 }
161 }
162
163 }