package envoy.server.data; import java.util.Date; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import envoy.data.MessageBuilder; /** * This class serves as a way to let Hibernate communicate with the server * without bringing the dependency of JPA/Hibernate into the client.
* It will be referenced as "database message" to clarify between the different * message objects.
*
* Project: envoy-server-standalone
* File: Message.java
* Created: 02.01.2020
* * @author Kai S. K. Engelbart * @since Envoy Server Standalone v0.1-alpha */ @Entity @Table(name = "messages") @NamedQueries( { @NamedQuery( query = "SELECT m FROM Message m WHERE m.recipient =:recipient AND m.status = envoy.data.Message$MessageStatus.SENT", name = "getUnreadMessages" ), @NamedQuery( query = "SELECT m FROM Message m WHERE m.sender =:sender AND m.status = :status", name = "find read messages"//TODO do we need this namedQuery? ), @NamedQuery(query = "SELECT m FROM Message m WHERE m.id = :messageId", name = "get message") }//TODO do we need this namedQuery? ) public class Message { @Id private long id; @ManyToOne private User sender; @ManyToOne private User recipient; @Temporal(TemporalType.TIMESTAMP) private Date creationDate; @Temporal(TemporalType.TIMESTAMP) private Date receivedDate; @Temporal(TemporalType.TIMESTAMP) private Date readDate; private envoy.data.Message.MessageStatus status; private String text; private byte[] attachment; /** * The constructor for a database object * * @since Envoy Server Standalone v0.1-alpha */ public Message() {} // TODO: everything except ID /** * @param message the {@link envoy.data.Message} to convert into a database * {@link Message} * @since Envoy Server Standalone v0.1-alpha */ public Message(envoy.data.Message message) { id = message.getId(); status = message.getStatus(); text = message.getText(); } /** * @return a database {@link Message} converted into an * {@link envoy.data.Message} * @since Envoy Server Standalone v0.1-alpha */ public envoy.data.Message toCommonMessage() { // TODO: Attachment, dates return new MessageBuilder(sender.getId(), recipient.getId()).setText(text).setDate(creationDate).setStatus(status).build(); } /** * @return the id of a {link envoy.data.Message} * @since Envoy Server Standalone v0.1-alpha */ public long getId() { return id; } /** * @param id the id to set * @since Envoy Server Standalone v0.1-alpha * @see Message#getId() */ public void setId(long id) { this.id = id; } /** * @return the sender of a {link envoy.data.Message} * @since Envoy Server Standalone v0.1-alpha */ public User getSender() { return sender; } /** * @param sender the sender to set * @since Envoy Server Standalone v0.1-alpha * @see Message#getSender() */ public void setSender(User sender) { this.sender = sender; } /** * @return the recipient of a {link envoy.data.Message} * @since Envoy Server Standalone v0.1-alpha */ public User getRecipient() { return recipient; } /** * @param recipient the recipient to set * @since Envoy Server Standalone v0.1-alpha * @see Message#getRecipient() */ public void setRecipient(User recipient) { this.recipient = recipient; } /** * @return the date at which a {link envoy.data.Message} has been created * @since Envoy Server Standalone v0.1-alpha */ public Date getCreationDate() { return creationDate; } /** * @param creationDate the creation date to set * @since Envoy Server Standalone v0.1-alpha * @see Message#getCreationDate() */ public void setCreationDate(Date creationDate) { this.creationDate = creationDate; } /** * @return the date at which a {link envoy.data.Message} has been received by * the server * @since Envoy Server Standalone v0.1-alpha */ public Date getReceivedDate() { return receivedDate; } /** * @param receivedDate the received date to set * @since Envoy Server Standalone v0.1-alpha * @see Message#getReceivedDate() */ public void setReceivedDate(Date receivedDate) { this.receivedDate = receivedDate; } /** * @return the date at which a {link envoy.data.Message} has been read * @since Envoy Server Standalone v0.1-alpha */ public Date getReadDate() { return readDate; } /** * @param readDate the read date to set * @since Envoy Server Standalone v0.1-alpha * @see Message#getReadDate() */ public void setReadDate(Date readDate) { this.readDate = readDate; } /** * @return the status of a {link envoy.data.Message} * @since Envoy Server Standalone v0.1-alpha */ public envoy.data.Message.MessageStatus getStatus() { return status; } /** * @param status the new status of a {link envoy.data.Message} * @since Envoy Server Standalone v0.1-alpha */ public void setStatus(envoy.data.Message.MessageStatus status) { this.status = status; } /** * @return the text content of a {link envoy.data.Message} * @since Envoy Server Standalone v0.1-alpha */ public String getText() { return text; } /** * @param text the new text content of a {@link envoy.data.Message} * @since Envoy Server Standalone v0.1-alpha */ public void setText(String text) { this.text = text; } /** * @return the attachment of a {@link envoy.data.Message} * @since Envoy Server Standalone v0.1-alpha */ public byte[] getAttachment() { return attachment; } /** * @param attachment the new attachment * @since Envoy Server Standalone v0.1-alpha */ public void setAttachment(byte[] attachment) { this.attachment = attachment; } }