View Javadoc
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          // no-arg constructor required by JPA
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      // TODO add new fields, numFailures, timeFirstFailure, timeLastFailure
42  
43      @Id
44      // @GeneratedValue(strategy = GenerationType.AUTO)
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 }