1 package xuml.tools.model.compiler.runtime.message;
2
3 import java.io.Serializable;
4
5 import com.google.common.base.Optional;
6
7 import scala.concurrent.duration.Duration;
8 import scala.concurrent.duration.FiniteDuration;
9 import xuml.tools.model.compiler.runtime.Entity;
10 import xuml.tools.model.compiler.runtime.Event;
11
12 public class Signal<T> {
13
14 private final Class<Entity<T>> entityClass;
15 private final Event<T> event;
16 private final String id;
17
18 private final Long timeMs;
19 private final Optional<FiniteDuration> repeatInterval;
20 private final String fromEntityUniqueId;
21 private final Serializable entityId;
22 private final String entityUniqueId;
23
24 public Signal(String fromEntityUniqueId, Class<Entity<T>> entityClass, Event<T> event,
25 String id, Long timeMs, Optional<FiniteDuration> repeatInterval, Serializable entityId,
26 String entityUniqueId) {
27 if (entityId instanceof Optional)
28 throw new RuntimeException("unexpected");
29 this.fromEntityUniqueId = fromEntityUniqueId;
30 this.entityClass = entityClass;
31 this.event = event;
32 this.id = id;
33 this.timeMs = timeMs;
34 this.repeatInterval = repeatInterval;
35 this.entityId = entityId;
36 this.entityUniqueId = entityUniqueId;
37 }
38
39 public Signal(String fromEntityUniqueId, Class<Entity<T>> entityClass, Event<T> event,
40 String id, Long timeMs, Serializable entityId, String entityUniqueId) {
41 this(fromEntityUniqueId, entityClass, event, id, timeMs, null, entityId, entityUniqueId);
42 }
43
44 public Signal(String fromEntityUniqueId, Class<Entity<T>> entityClass, Event<T> event,
45 String id, Duration delay, FiniteDuration repeatInterval, Serializable entityId,
46 String entityUniqueId) {
47 this(fromEntityUniqueId, entityClass, event, id, getTime(delay),
48 Optional.of(repeatInterval), entityId, entityUniqueId);
49 }
50
51 private static Long getTime(Duration delay) {
52 if (delay == null)
53 return null;
54 else
55 return System.currentTimeMillis() + delay.toMillis();
56 }
57
58 public Signal(String fromEntityUniqueId, Class<Entity<T>> entityClass, Event<T> event,
59 String id, Serializable entityId, String entityUniqueId) {
60 this(fromEntityUniqueId, entityClass, event, id, null, entityId, entityUniqueId);
61 }
62
63 public String getId() {
64 return id;
65 }
66
67 public Optional<FiniteDuration> getRepeatInterval() {
68 return repeatInterval;
69 }
70
71 public Class<Entity<T>> getEntityClass() {
72 return entityClass;
73 }
74
75 public Event<T> getEvent() {
76 return event;
77 }
78
79 public Long getTime() {
80 return timeMs;
81 }
82
83 public Serializable getEntityId() {
84 return entityId;
85 }
86
87 public String getFromEntityUniqueId() {
88 return fromEntityUniqueId;
89 }
90
91 public String getEntityUniqueId() {
92 return entityUniqueId;
93 }
94
95 @Override
96 public String toString() {
97 StringBuilder builder = new StringBuilder();
98 builder.append("Signal [id=");
99 builder.append(id);
100 builder.append(", event=");
101 builder.append(event);
102 builder.append(", entityClass");
103 builder.append(entityClass.getName());
104 builder.append(", timeMs=");
105 builder.append(timeMs);
106 builder.append(", repeatInterval=");
107 builder.append(repeatInterval);
108 builder.append("]");
109 return builder.toString();
110 }
111
112 }