1 package org.djutils.stats.summarizers.event;
2
3 import org.djutils.event.Event;
4 import org.djutils.event.EventListener;
5 import org.djutils.event.EventListenerMap;
6 import org.djutils.event.EventProducer;
7 import org.djutils.event.LocalEventProducer;
8 import org.djutils.exceptions.Throw;
9 import org.djutils.stats.summarizers.WeightedTally;
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class EventBasedWeightedTally extends WeightedTally implements EventProducer, EventListener
25 {
26
27 private EventProducer eventProducer = null;
28
29
30
31
32
33 public EventBasedWeightedTally(final String description)
34 {
35 this(description, new LocalEventProducer());
36 }
37
38
39
40
41
42
43 public EventBasedWeightedTally(final String description, final EventProducer eventProducer)
44 {
45 super(description);
46 Throw.whenNull(eventProducer, "eventProducer cannot be null");
47 this.eventProducer = eventProducer;
48 }
49
50 @Override
51 public EventListenerMap getEventListenerMap()
52 {
53 return this.eventProducer.getEventListenerMap();
54 }
55
56 @Override
57 public void initialize()
58 {
59 super.initialize();
60 if (this.eventProducer != null)
61 {
62 this.eventProducer.fireEvent(StatisticsEvents.INITIALIZED_EVENT);
63 }
64 }
65
66 @Override
67 public void notify(final Event event)
68 {
69
70 Object[] content = (Object[]) event.getContent();
71 double weight = ((Number) content[0]).doubleValue();
72 double value = ((Number) content[1]).doubleValue();
73 register(weight, value);
74 }
75
76
77
78
79
80
81
82 @Override
83 public double register(final double weight, final double value)
84 {
85 super.register(weight, value);
86 if (hasListeners())
87 {
88 this.eventProducer.fireEvent(StatisticsEvents.WEIGHTED_OBSERVATION_ADDED_EVENT, new Object[] {weight, value});
89 fireEvents();
90 }
91 return value;
92 }
93
94
95
96
97 protected void fireEvents()
98 {
99 this.eventProducer.fireEvent(StatisticsEvents.N_EVENT, getN());
100 this.eventProducer.fireEvent(StatisticsEvents.MIN_EVENT, getMin());
101 this.eventProducer.fireEvent(StatisticsEvents.MAX_EVENT, getMax());
102 this.eventProducer.fireEvent(StatisticsEvents.WEIGHTED_POPULATION_MEAN_EVENT, getWeightedPopulationMean());
103 this.eventProducer.fireEvent(StatisticsEvents.WEIGHTED_POPULATION_VARIANCE_EVENT, getWeightedPopulationVariance());
104 this.eventProducer.fireEvent(StatisticsEvents.WEIGHTED_POPULATION_STDEV_EVENT, getWeightedPopulationStDev());
105 this.eventProducer.fireEvent(StatisticsEvents.WEIGHTED_SUM_EVENT, getWeightedSum());
106 this.eventProducer.fireEvent(StatisticsEvents.WEIGHTED_SAMPLE_MEAN_EVENT, getWeightedSampleMean());
107 this.eventProducer.fireEvent(StatisticsEvents.WEIGHTED_SAMPLE_VARIANCE_EVENT, getWeightedSampleVariance());
108 this.eventProducer.fireEvent(StatisticsEvents.WEIGHTED_SAMPLE_STDEV_EVENT, getWeightedSampleStDev());
109 }
110
111 @Override
112 public String toString()
113 {
114 return super.toString();
115 }
116
117 }