package uk.ac.cam.echo.server.models;
import org.codehaus.jackson.annotate.JsonCreator;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import uk.ac.cam.echo.data.Conversation;
import uk.ac.cam.echo.data.Message;
import uk.ac.cam.echo.data.User;
import uk.ac.cam.echo.server.HibernateUtil;
import uk.ac.cam.echo.server.serializers.MessageSerializer;
import javax.persistence.*;
import java.util.Map;
@JsonSerialize(using= MessageSerializer.class)
@Entity
@Table(name="Message")
public class MessageModel extends BaseModel implements Message {
public MessageModel() {
}
private static String[] allowed = {"contents", "senderId", "conversationId", "senderName"};
@JsonCreator
public MessageModel(Map<String, Object> props) {
super(props, allowed);
}
@Id
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="MessageIdSeq")
@SequenceGenerator(name="MessageIdSeq", sequenceName="Message_SEQ", allocationSize=1)
private long id;
private long timeStamp;
private String contents;
private String senderName;
@ManyToOne(targetEntity = ConversationModel.class)
private Conversation conversation;
@ManyToOne(targetEntity = UserModel.class)
private User sender;
/** Getter and Setters **/
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(long timeStamp) {
this.timeStamp = timeStamp;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public Conversation getConversation() {
return conversation;
}
public void setConversation(Conversation conversation) {
this.conversation = conversation;
}
public void setConversationId(Long id) {
if (id != null) {
this.conversation = (Conversation) HibernateUtil.getSession().load(ConversationModel.class, id);
}
}
public User getSender() {
return sender;
}
public String getSenderName() {
if (sender == null) return null;
if (senderName != null) return senderName;
if (sender.getDisplayName() != null) return sender.getDisplayName();
return sender.getUsername();
}
public void setSenderName(String senderName) {
this.senderName = senderName;
}
public void setSender(User sender) {
this.sender = sender;
}
public void setSenderId(Long id) {
if (id != null)
this.sender = (User) HibernateUtil.getSession().load(UserModel.class, id);
}
}