Added PersistenceManager and Namedqueries
In theory, this code is all we need for database integration
This commit is contained in:
		@@ -4,6 +4,9 @@ import java.util.Date;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import javax.persistence.Entity;
 | 
					import javax.persistence.Entity;
 | 
				
			||||||
import javax.persistence.Id;
 | 
					import javax.persistence.Id;
 | 
				
			||||||
 | 
					import javax.persistence.NamedQueries;
 | 
				
			||||||
 | 
					import javax.persistence.NamedQuery;
 | 
				
			||||||
 | 
					import javax.persistence.Table;
 | 
				
			||||||
import javax.persistence.Temporal;
 | 
					import javax.persistence.Temporal;
 | 
				
			||||||
import javax.persistence.TemporalType;
 | 
					import javax.persistence.TemporalType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,6 +26,13 @@ import envoy.data.MessageBuilder;
 | 
				
			|||||||
 * @since Envoy Server Standalone v0.1-alpha
 | 
					 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Entity
 | 
					@Entity
 | 
				
			||||||
 | 
					@Table(name = "messages")
 | 
				
			||||||
 | 
					@NamedQueries(
 | 
				
			||||||
 | 
						{ @NamedQuery(query = "SELECT m FROM Message m WHERE m.recipient =:recipient AND m.state = 1", name = "getUnreadMessages"), @NamedQuery(
 | 
				
			||||||
 | 
							query = "SELECT m FROM Message m WHERE m.sender =:sender AND m.state = :state",
 | 
				
			||||||
 | 
							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 {
 | 
					public class Message {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Id
 | 
						@Id
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,8 @@ import javax.persistence.Entity;
 | 
				
			|||||||
import javax.persistence.GeneratedValue;
 | 
					import javax.persistence.GeneratedValue;
 | 
				
			||||||
import javax.persistence.GenerationType;
 | 
					import javax.persistence.GenerationType;
 | 
				
			||||||
import javax.persistence.Id;
 | 
					import javax.persistence.Id;
 | 
				
			||||||
 | 
					import javax.persistence.NamedQuery;
 | 
				
			||||||
 | 
					import javax.persistence.Table;
 | 
				
			||||||
import javax.persistence.Temporal;
 | 
					import javax.persistence.Temporal;
 | 
				
			||||||
import javax.persistence.TemporalType;
 | 
					import javax.persistence.TemporalType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,6 +26,8 @@ import javax.persistence.TemporalType;
 | 
				
			|||||||
 * @since Envoy Server Standalone v0.1-alpha
 | 
					 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Entity
 | 
					@Entity
 | 
				
			||||||
 | 
					@Table(name = "users")
 | 
				
			||||||
 | 
					@NamedQuery(query = "SELECT u FROM DBUser u WHERE u.id = :id", name = "getUserById")
 | 
				
			||||||
public class User {
 | 
					public class User {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Id
 | 
						@Id
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,21 +1,96 @@
 | 
				
			|||||||
package envoy.server.database;
 | 
					package envoy.server.database;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.persistence.EntityManager;
 | 
				
			||||||
 | 
					import javax.persistence.Persistence;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.hibernate.Session;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import envoy.server.data.Message;
 | 
				
			||||||
 | 
					import envoy.server.data.User;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Project: <strong>envoy-server-standalone</strong><br>
 | 
					 * Project: <strong>envoy-server-standalone</strong><br>
 | 
				
			||||||
 * File: <strong>PersistenceManager.java</strong><br>
 | 
					 * File: <strong>PersistenceManager.java</strong><br>
 | 
				
			||||||
 * Created: <strong>3 Jan 2020</strong><br>
 | 
					 * Created: <strong>1 Jan 2020</strong><br>
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @author Leon Hofmeister
 | 
					 * @author Leon Hofmeister
 | 
				
			||||||
 * @since Envoy Server Standalone v0.1-alpha
 | 
					 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class PersistenceManager {
 | 
					public class PersistenceManager {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private EntityManager entityManager = Persistence.createEntityManagerFactory("envoy").createEntityManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public PersistenceManager() { // TODO Auto-generated constructor stub
 | 
						public PersistenceManager() {
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * // TODO TESTING
 | 
				
			||||||
 | 
							 * User user = new User(3, "t");
 | 
				
			||||||
 | 
							 * User user2 = new User(2, "w");
 | 
				
			||||||
 | 
							 * Message msg = new MessageBuilder(user.getId(), user2.getId()).build();
 | 
				
			||||||
 | 
							 * entityManager.getTransaction().begin();
 | 
				
			||||||
 | 
							 * entityManager.persist(user);
 | 
				
			||||||
 | 
							 * entityManager.persist(user2);
 | 
				
			||||||
 | 
							 * entityManager.persist(msg);
 | 
				
			||||||
 | 
							 * entityManager.getTransaction().commit();
 | 
				
			||||||
 | 
							 */ // TODO delete until here
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Adds a user to the database.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param User the {@link User} to add to the database
 | 
				
			||||||
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void addUser(User User) { entityManager.persist(User); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Adds a message to the database.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param message the {@link Message} to add to the database
 | 
				
			||||||
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void addMessage(Message message) { entityManager.persist(message); }// TODO these functions or the one below?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * This is a delegate function for {@link EntityManager#persist} in order to add
 | 
				
			||||||
 | 
						 * an {@link User} / a {@link Message} into the database
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param obj the object to add to the database
 | 
				
			||||||
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void addObject(Object obj) { entityManager.persist(obj); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Updates a row of database objects, either a Message or a User with new data.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param obj the object to update (existing User/Message)
 | 
				
			||||||
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void updateObject(Object obj) { entityManager.unwrap(Session.class).merge(obj); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Searches for a user with a specific id.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param id - the id to search for
 | 
				
			||||||
 | 
						 * @return the user with the specified id
 | 
				
			||||||
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public User getUserById(long id) { return (User) entityManager.createNamedQuery("getUserById").setParameter("id", id).getSingleResult(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Returns all messages received while being offline.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @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
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						@SuppressWarnings("unchecked")
 | 
				
			||||||
 | 
						public List<Message> getUnreadMessages(User user) {// TODO may need to be changed to clientId
 | 
				
			||||||
 | 
							return entityManager.createNamedQuery("getUnreadMessages").setParameter("recipient", user).getResultList();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user