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.Id; | ||||
| import javax.persistence.NamedQueries; | ||||
| import javax.persistence.NamedQuery; | ||||
| import javax.persistence.Table; | ||||
| import javax.persistence.Temporal; | ||||
| import javax.persistence.TemporalType; | ||||
|  | ||||
| @@ -23,6 +26,13 @@ import envoy.data.MessageBuilder; | ||||
|  * @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.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 { | ||||
|  | ||||
| 	@Id | ||||
|   | ||||
| @@ -7,6 +7,8 @@ import javax.persistence.Entity; | ||||
| import javax.persistence.GeneratedValue; | ||||
| import javax.persistence.GenerationType; | ||||
| import javax.persistence.Id; | ||||
| import javax.persistence.NamedQuery; | ||||
| import javax.persistence.Table; | ||||
| import javax.persistence.Temporal; | ||||
| import javax.persistence.TemporalType; | ||||
|  | ||||
| @@ -24,6 +26,8 @@ import javax.persistence.TemporalType; | ||||
|  * @since Envoy Server Standalone v0.1-alpha | ||||
|  */ | ||||
| @Entity | ||||
| @Table(name = "users") | ||||
| @NamedQuery(query = "SELECT u FROM DBUser u WHERE u.id = :id", name = "getUserById") | ||||
| public class User { | ||||
|  | ||||
| 	@Id | ||||
|   | ||||
| @@ -1,21 +1,96 @@ | ||||
| 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> | ||||
|  * File: <strong>PersistenceManager.java</strong><br> | ||||
|  * Created: <strong>3 Jan 2020</strong><br> | ||||
|  *  | ||||
|  * Created: <strong>1 Jan 2020</strong><br> | ||||
|  * | ||||
|  * @author Leon Hofmeister | ||||
|  * @since Envoy Server Standalone v0.1-alpha | ||||
|  */ | ||||
| public class PersistenceManager { | ||||
|  | ||||
| 	private EntityManager entityManager = Persistence.createEntityManagerFactory("envoy").createEntityManager(); | ||||
|  | ||||
| 	/** | ||||
| 	 *  | ||||
| 	 * | ||||
| 	 * @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
	 delvh
					delvh