1 package org.djutils.stats.summarizers.event;
2
3 import java.io.Serializable;
4
5 import org.djutils.event.Event;
6 import org.djutils.event.EventInterface;
7 import org.djutils.event.EventListenerInterface;
8 import org.djutils.event.EventProducer;
9 import org.djutils.stats.summarizers.Counter;
10 import org.djutils.stats.summarizers.CounterInterface;
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class EventBasedCounter extends EventProducer implements EventListenerInterface, CounterInterface
25 {
26
27 private static final long serialVersionUID = 20200228L;
28
29
30 private final Counter wrappedCounter;
31
32
33
34
35
36 public EventBasedCounter(final String description)
37 {
38 this.wrappedCounter = new Counter(description);
39 }
40
41
42 @Override
43 public Serializable getSourceId()
44 {
45 return this;
46 }
47
48
49 @Override
50 public long getCount()
51 {
52 return this.wrappedCounter.getCount();
53 }
54
55
56 @Override
57 public long getN()
58 {
59 return this.wrappedCounter.getN();
60 }
61
62
63 @Override
64 public void notify(final EventInterface event)
65 {
66 long value = 1;
67 if (event.getContent() instanceof Number)
68 {
69 value = Math.round(((Number) event.getContent()).doubleValue());
70 }
71 else
72 {
73 throw new IllegalArgumentException("event content for counter not a number but of type " + event.getClass());
74 }
75 register(value);
76 }
77
78
79 @Override
80 public long register(final long value)
81 {
82 this.wrappedCounter.register(value);
83 if (hasListeners())
84 {
85 fireEvent(new Event(StatisticsEvents.OBSERVATION_ADDED_EVENT, this, value));
86 fireEvents();
87 }
88 return value;
89 }
90
91
92
93
94 protected void fireEvents()
95 {
96 fireEvent(new Event(StatisticsEvents.N_EVENT, this, getN()));
97 fireEvent(new Event(StatisticsEvents.COUNT_EVENT, this, getCount()));
98 }
99
100
101 @Override
102 public void initialize()
103 {
104 this.wrappedCounter.initialize();
105 fireEvent(new Event(StatisticsEvents.INITIALIZED_EVENT, this, null));
106 }
107
108
109 @Override
110 public String getDescription()
111 {
112 return this.wrappedCounter.getDescription();
113 }
114
115
116 @Override
117 public String toString()
118 {
119 return this.wrappedCounter.toString();
120 }
121
122 }