View Javadoc
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      // epoch time ms to process signal
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 }