100 lines
3.2 KiB
Java
100 lines
3.2 KiB
Java
package envoy.server.data;
|
|
|
|
import java.time.Instant;
|
|
import java.util.*;
|
|
|
|
import javax.persistence.*;
|
|
|
|
import envoy.data.Group;
|
|
|
|
/**
|
|
* @author Maximilian Käfer
|
|
* @since Envoy Server Standalone v0.1-beta
|
|
*/
|
|
@Entity
|
|
@NamedQuery(
|
|
name = GroupMessage.getPendingGroupMsg,
|
|
query = "SELECT m FROM GroupMessage m JOIN m.memberMessageStatus s WHERE KEY(s) = :userId AND (m.creationDate > :lastSeen "
|
|
+ "OR m.status = envoy.data.Message$MessageStatus.RECEIVED AND m.receivedDate > :lastSeen "
|
|
+ "OR m.status = envoy.data.Message$MessageStatus.READ AND m.readDate > :lastSeen "
|
|
+ "OR m.lastStatusChangeDate > :lastSeen)"
|
|
)
|
|
public final class GroupMessage extends Message {
|
|
|
|
/**
|
|
* Named query retrieving pending group messages sent to a group containing a
|
|
* specific user (parameter {@code userId}) that were sent after a certain time
|
|
* stamp (parameter {@code :lastSeen}).
|
|
*
|
|
* @since Envoy Server Standalone v0.1-beta
|
|
*/
|
|
public static final String getPendingGroupMsg = "GroupMessage.getPendingGroupMsg";
|
|
|
|
@ElementCollection
|
|
private Map<Long, envoy.data.Message.MessageStatus> memberMessageStatus;
|
|
|
|
@Column(name = "last_status_change_date")
|
|
protected Instant lastStatusChangeDate;
|
|
|
|
/**
|
|
* The constructor for a database object.
|
|
*
|
|
* @since Envoy Server Standalone v0.1-beta
|
|
*/
|
|
public GroupMessage() {}
|
|
|
|
/**
|
|
* Constructs a database groupMessage from a common groupMessage.
|
|
*
|
|
* @param groupMessage the {@link envoy.data.GroupMessage} to convert
|
|
* into a
|
|
* database {@link GroupMessage}
|
|
* @param lastStatusChangeDate the time stamp to set
|
|
* @since Envoy Server Standalone v0.2-beta
|
|
*/
|
|
public GroupMessage(envoy.data.GroupMessage groupMessage, Instant lastStatusChangeDate) {
|
|
super(groupMessage);
|
|
memberMessageStatus = groupMessage.getMemberStatuses();
|
|
this.lastStatusChangeDate = lastStatusChangeDate;
|
|
}
|
|
|
|
/**
|
|
* Converts this groupMessage into an instance of
|
|
* {@link envoy.data.GroupMessage}.
|
|
*
|
|
* @return a {@link envoy.data.GroupMessage} containing the same values as this
|
|
* groupMessage
|
|
* @since Envoy Server Standalone v0.1-beta
|
|
*/
|
|
@Override
|
|
public envoy.data.GroupMessage toCommon() {
|
|
return prepareBuilder().buildGroupMessage((Group) recipient.toCommon(), new HashMap<>(memberMessageStatus));
|
|
}
|
|
|
|
/**
|
|
* @return the memberMessageStatus
|
|
* @since Envoy Server Standalone v0.1-beta
|
|
*/
|
|
public Map<Long, envoy.data.Message.MessageStatus> getMemberMessageStatus() { return memberMessageStatus; }
|
|
|
|
/**
|
|
* @param memberMessageStatus the memberMessageStatus to set
|
|
* @since Envoy Server Standalone v0.1-beta
|
|
*/
|
|
public void setMemberMessageStatus(Map<Long, envoy.data.Message.MessageStatus> memberMessageStatus) {
|
|
this.memberMessageStatus = memberMessageStatus;
|
|
}
|
|
|
|
/**
|
|
* @return the date at which one of the member statuses changed last
|
|
* @since Envoy Server Standalone v0.2-beta
|
|
*/
|
|
public Instant getLastStatusChangeDate() { return lastStatusChangeDate; }
|
|
|
|
/**
|
|
* @param date the date to set
|
|
* @since Envoy Server Standalone v0.2-beta
|
|
*/
|
|
public void setLastStatusChangeDate(Instant date) { lastStatusChangeDate = date; }
|
|
}
|