1 package xuml.tools.model.compiler.runtime;
2
3 import java.io.Serializable;
4 import java.util.Date;
5
6 import javax.persistence.Column;
7 import javax.persistence.Entity;
8 import javax.persistence.Id;
9 import javax.persistence.Lob;
10 import javax.persistence.Table;
11 import javax.persistence.Temporal;
12 import javax.persistence.TemporalType;
13
14 import com.google.common.base.Optional;
15 import com.google.common.base.Preconditions;
16
17 @Entity
18 @Table(name = "xuml_queued_signal")
19 public class QueuedSignal {
20
21 public QueuedSignal() {
22
23 }
24
25 public QueuedSignal(String idClassName, byte[] idContent, String entityClassName,
26 String eventClassName, byte[] eventContent, long time, Optional<Long> repeatIntervalMs,
27 String fromEntityUniqueId, String toEntityUniqueId) {
28 this.toEntityUniqueId = toEntityUniqueId;
29 Preconditions.checkNotNull(repeatIntervalMs);
30 this.idContent = idContent;
31 this.idClassName = idClassName;
32 this.entityClassName = entityClassName;
33 this.eventClassName = eventClassName;
34 this.eventContent = eventContent;
35 this.fromEntityUniqueId = fromEntityUniqueId;
36 this.time = new Date(time);
37 this.repeatIntervalMs = repeatIntervalMs.orNull();
38 this.id = ArbitraryId.next();
39 }
40
41
42
43 @Id
44
45 @Column(name = "signal_id")
46 public String id;
47
48 @Column(name = "entity_class_name", nullable = false)
49 public String entityClassName;
50
51 @Column(name = "event_class_name", nullable = false)
52 public String eventClassName;
53
54 @Column(name = "id_class_name", nullable = false)
55 public String idClassName;
56
57 @Column(name = "id_content", nullable = false)
58 public byte[] idContent;
59
60 @Column(name = "event_content", nullable = false)
61 @Lob
62 public byte[] eventContent;
63
64 @Column(name = "time", nullable = false)
65 @Temporal(TemporalType.TIMESTAMP)
66 public Date time;
67
68 @Column(name = "repeat_interval_ms", nullable = true)
69 public Long repeatIntervalMs;
70
71 @Column(name = "from_entity_unique_id")
72 public String fromEntityUniqueId;
73
74 @Column(name = "to_entity_unique_id", nullable = false)
75 public String toEntityUniqueId;
76
77 @Override
78 public String toString() {
79 StringBuilder builder = new StringBuilder();
80 builder.append("QueuedSignal [id=");
81 builder.append(id);
82 builder.append(", entityClassName=");
83 builder.append(entityClassName);
84 builder.append(", eventClassName=");
85 builder.append(eventClassName);
86 builder.append(", idClassName=");
87 builder.append(idClassName);
88 builder.append(", idContentSize=");
89 builder.append(idContent.length);
90 builder.append(", eventContentSize=");
91 builder.append(eventContent.length);
92 builder.append(", time=");
93 builder.append(time);
94 builder.append(", repeatIntervalMs=");
95 builder.append(repeatIntervalMs);
96 builder.append(", fromEntityUniqueId=");
97 builder.append(fromEntityUniqueId);
98 builder.append("]");
99 return builder.toString();
100 }
101
102 @SuppressWarnings("unchecked")
103 public Class<Event<?>> eventClass() {
104 try {
105 return (Class<Event<?>>) Class.forName(eventClassName);
106 } catch (ClassNotFoundException e) {
107 throw new RuntimeException(e);
108 }
109 }
110
111 @SuppressWarnings("unchecked")
112 public Class<? extends Serializable> idClass() {
113 try {
114 return (Class<? extends Serializable>) Class.forName(idClassName);
115 } catch (ClassNotFoundException e) {
116 throw new RuntimeException(e);
117 }
118 }
119
120 }