2020-04-18 16:28:38 +02:00
package envoy.server.data ;
2020-07-16 17:04:35 +02:00
import java.time.Instant ;
2020-09-25 14:29:23 +02:00
import java.util.* ;
2020-04-18 16:28:38 +02:00
2020-07-05 16:53:27 +02:00
import javax.persistence.* ;
2020-04-18 16:28:38 +02:00
2020-07-02 14:54:58 +02:00
import envoy.data.Group ;
2020-04-28 20:08:33 +02:00
2020-04-18 16:28:38 +02:00
/ * *
* @author Maximilian K & auml ; fer
* @since Envoy Server Standalone v0 . 1 - beta
* /
@Entity
2020-10-19 18:17:51 +02:00
@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) " )
2020-08-22 13:37:07 +02:00
public final class GroupMessage extends Message {
2020-04-18 16:28:38 +02:00
2020-07-06 11:40:13 +02:00
/ * *
2020-10-19 18:17:51 +02:00
* 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 } ) .
*
2020-07-06 11:40:13 +02:00
* @since Envoy Server Standalone v0 . 1 - beta
* /
2020-06-27 21:58:53 +02:00
public static final String getPendingGroupMsg = " GroupMessage.getPendingGroupMsg " ;
2020-04-18 16:28:38 +02:00
@ElementCollection
private Map < Long , envoy . data . Message . MessageStatus > memberMessageStatus ;
2020-06-15 11:59:48 +02:00
@Column ( name = " last_status_change_date " )
2020-07-16 17:04:35 +02:00
protected Instant lastStatusChangeDate ;
2020-06-09 21:05:30 +02:00
2020-04-18 16:28:38 +02:00
/ * *
* The constructor for a database object .
*
* @since Envoy Server Standalone v0 . 1 - beta
* /
public GroupMessage ( ) { }
/ * *
* Constructs a database groupMessage from a common groupMessage .
*
2020-10-19 18:17:51 +02:00
* @param groupMessage the { @link envoy . data . GroupMessage } to convert into a database
* { @link GroupMessage }
2020-07-06 11:40:13 +02:00
* @param lastStatusChangeDate the time stamp to set
2020-07-16 17:04:35 +02:00
* @since Envoy Server Standalone v0 . 2 - beta
2020-04-18 16:28:38 +02:00
* /
2020-07-16 17:04:35 +02:00
public GroupMessage ( envoy . data . GroupMessage groupMessage , Instant lastStatusChangeDate ) {
2020-06-06 15:42:10 +02:00
super ( groupMessage ) ;
2020-07-06 11:40:13 +02:00
memberMessageStatus = groupMessage . getMemberStatuses ( ) ;
2020-06-09 21:05:30 +02:00
this . lastStatusChangeDate = lastStatusChangeDate ;
2020-04-18 16:28:38 +02:00
}
2020-04-28 20:08:33 +02:00
/ * *
2020-10-19 18:17:51 +02:00
* Converts this groupMessage into an instance of { @link envoy . data . GroupMessage } .
2020-04-28 20:08:33 +02:00
*
2020-10-19 18:17:51 +02:00
* @return a { @link envoy . data . GroupMessage } containing the same values as this groupMessage
2020-04-28 20:08:33 +02:00
* @since Envoy Server Standalone v0 . 1 - beta
* /
2020-06-06 15:42:10 +02:00
@Override
public envoy . data . GroupMessage toCommon ( ) {
2020-10-19 18:17:51 +02:00
return prepareBuilder ( ) . buildGroupMessage ( ( Group ) recipient . toCommon ( ) ,
new HashMap < > ( memberMessageStatus ) ) ;
2020-04-28 20:08:33 +02:00
}
2020-04-18 16:28:38 +02:00
/ * *
* @return the memberMessageStatus
* @since Envoy Server Standalone v0 . 1 - beta
* /
2020-10-19 18:17:51 +02:00
public Map < Long , envoy . data . Message . MessageStatus > getMemberMessageStatus ( ) {
return memberMessageStatus ;
}
2020-04-18 16:28:38 +02:00
/ * *
* @param memberMessageStatus the memberMessageStatus to set
* @since Envoy Server Standalone v0 . 1 - beta
* /
2020-10-19 18:17:51 +02:00
public void setMemberMessageStatus (
Map < Long , envoy . data . Message . MessageStatus > memberMessageStatus ) {
2020-04-18 16:28:38 +02:00
this . memberMessageStatus = memberMessageStatus ;
}
2020-06-09 21:05:30 +02:00
/ * *
* @return the date at which one of the member statuses changed last
2020-07-16 17:04:35 +02:00
* @since Envoy Server Standalone v0 . 2 - beta
2020-06-09 21:05:30 +02:00
* /
2020-07-16 17:04:35 +02:00
public Instant getLastStatusChangeDate ( ) { return lastStatusChangeDate ; }
2020-06-09 21:05:30 +02:00
/ * *
* @param date the date to set
2020-07-16 17:04:35 +02:00
* @since Envoy Server Standalone v0 . 2 - beta
2020-06-09 21:05:30 +02:00
* /
2020-07-16 17:04:35 +02:00
public void setLastStatusChangeDate ( Instant date ) { lastStatusChangeDate = date ; }
2020-04-18 16:28:38 +02:00
}