Implemented Groups on the database and implemented MSChange management
This commit is contained in:
		| @@ -2,7 +2,14 @@ package envoy.server.data; | ||||
|  | ||||
| import java.util.Set; | ||||
|  | ||||
| import javax.persistence.*; | ||||
| import javax.persistence.CascadeType; | ||||
| import javax.persistence.Entity; | ||||
| import javax.persistence.GeneratedValue; | ||||
| import javax.persistence.GenerationType; | ||||
| import javax.persistence.Id; | ||||
| import javax.persistence.Inheritance; | ||||
| import javax.persistence.InheritanceType; | ||||
| import javax.persistence.ManyToMany; | ||||
|  | ||||
| /** | ||||
|  * This class acts as a superclass for all contacts, being {@link User}s and | ||||
| @@ -16,12 +23,12 @@ import javax.persistence.*; | ||||
|  * @since Envoy Server Standalone v0.1-alpha | ||||
|  */ | ||||
|  | ||||
| @MappedSuperclass | ||||
| // TODO add queries | ||||
| @Entity | ||||
| @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) | ||||
| public abstract class Contact { | ||||
|  | ||||
| 	@Id | ||||
| 	@GeneratedValue(strategy = GenerationType.IDENTITY) | ||||
| 	@GeneratedValue(strategy = GenerationType.TABLE) | ||||
| 	protected long		id; | ||||
| 	protected String	name; | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,9 @@ package envoy.server.data; | ||||
|  | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import javax.persistence.*; | ||||
| import javax.persistence.Entity; | ||||
| import javax.persistence.NamedQuery; | ||||
| import javax.persistence.Table; | ||||
|  | ||||
| import envoy.data.User; | ||||
|  | ||||
| @@ -21,7 +23,7 @@ import envoy.data.User; | ||||
|  */ | ||||
| @Entity | ||||
| @Table(name = "groups") | ||||
| @NamedQueries({ @NamedQuery(query = "SELECT g FROM Group g WHERE g.name = :name", name = "getGroupByName") }) | ||||
| @NamedQuery(query = "SELECT g FROM Group g WHERE g.name = :name", name = "getGroupByName") | ||||
| public class Group extends Contact { | ||||
|  | ||||
| 	/** | ||||
|   | ||||
| @@ -6,7 +6,6 @@ import javax.persistence.CascadeType; | ||||
| 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; | ||||
| @@ -29,11 +28,11 @@ import envoy.data.MessageBuilder; | ||||
|  */ | ||||
| @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.recipient = :user AND m.status = envoy.data.Message$MessageStatus.SENT) " | ||||
| 			+ "OR (m.sender = :user) AND ((m.status = envoy.data.Message$MessageStatus.RECEIVED) AND (m.receivedDate > :lastSeen)" | ||||
| 			+ "OR (m.status = envoy.data.Message$MessageStatus.READ) AND (m.readDate > :lastSeen))", | ||||
| 	name = "getPendingMessages" | ||||
| ) | ||||
| public class Message { | ||||
|  | ||||
|   | ||||
| @@ -190,14 +190,18 @@ public class PersistenceManager { | ||||
| 	public ConfigItem getConfigItemById(String key) { return entityManager.find(ConfigItem.class, key); } | ||||
|  | ||||
| 	/** | ||||
| 	 * Returns all messages received while being offline. | ||||
| 	 * Returns all messages received while being offline or the ones that have | ||||
| 	 * changed. | ||||
| 	 * | ||||
| 	 * @param user - the user who wants to receive his unread messages | ||||
| 	 * @param user the user who wants to receive his unread messages | ||||
| 	 * @return all messages that the client does not yet have (unread messages) | ||||
| 	 * @since Envoy Server Standalone v0.1-alpha | ||||
| 	 */ | ||||
| 	public List<Message> getUnreadMessages(User user) { | ||||
| 		return entityManager.createNamedQuery("getUnreadMessages").setParameter("recipient", user).getResultList(); | ||||
| 	public List<Message> getPendingMessages(User user) { | ||||
| 		return entityManager.createNamedQuery("getPendingMessages") | ||||
| 			.setParameter("user", user) | ||||
| 			.setParameter("lastSeen", user.getLastSeen()) | ||||
| 			.getResultList(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|   | ||||
| @@ -1,7 +1,11 @@ | ||||
| package envoy.server.processors; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.*; | ||||
| import java.util.Arrays; | ||||
| import java.util.Date; | ||||
| import java.util.HashSet; | ||||
| import java.util.InputMismatchException; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import javax.persistence.NoResultException; | ||||
| @@ -11,6 +15,7 @@ import envoy.data.Message.MessageStatus; | ||||
| import envoy.data.User; | ||||
| import envoy.data.User.UserStatus; | ||||
| import envoy.event.HandshakeRejectionEvent; | ||||
| import envoy.event.MessageStatusChangeEvent; | ||||
| import envoy.server.data.Message; | ||||
| import envoy.server.data.PersistenceManager; | ||||
| import envoy.server.net.ConnectionManager; | ||||
| @@ -61,13 +66,19 @@ public class LoginCredentialProcessor implements ObjectProcessor<LoginCredential | ||||
| 		System.out.println("Sending contacts..."); | ||||
| 		writeProxy.write(socketID, contacts); | ||||
| 		System.out.println("Acquiring pending messages for the client..."); | ||||
| 		List<Message> pendingMessages = PersistenceManager.getInstance().getUnreadMessages(user); | ||||
| 		List<Message> pendingMessages = PersistenceManager.getInstance().getPendingMessages(user); | ||||
| 		for (Message msg : pendingMessages) { | ||||
| 			if (msg.getStatus() == MessageStatus.SENT) { | ||||
| 				System.out.println("Sending message " + msg.toCommonMessage()); | ||||
| 				writeProxy.write(socketID, msg.toCommonMessage()); | ||||
| 				msg.setReceivedDate(new Date()); | ||||
| 				msg.setStatus(MessageStatus.RECEIVED); | ||||
| 				PersistenceManager.getInstance().updateMessage(msg); | ||||
| 			} else { | ||||
| 				var evt = new MessageStatusChangeEvent(msg.toCommonMessage()); | ||||
| 				System.out.println("Sending messageStatusChangeEvent " + evt); | ||||
| 				writeProxy.write(socketID, evt); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 DieGurke
					DieGurke