diff --git a/src/main/java/envoy/server/data/Message.java b/src/main/java/envoy/server/data/Message.java index 7582762..19e25a6 100644 --- a/src/main/java/envoy/server/data/Message.java +++ b/src/main/java/envoy/server/data/Message.java @@ -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 diff --git a/src/main/java/envoy/server/data/User.java b/src/main/java/envoy/server/data/User.java index 4090a25..e0de15f 100644 --- a/src/main/java/envoy/server/data/User.java +++ b/src/main/java/envoy/server/data/User.java @@ -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 diff --git a/src/main/java/envoy/server/database/PersistenceManager.java b/src/main/java/envoy/server/database/PersistenceManager.java index 0f36d04..4578f6f 100644 --- a/src/main/java/envoy/server/database/PersistenceManager.java +++ b/src/main/java/envoy/server/database/PersistenceManager.java @@ -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: envoy-server-standalone
* File: PersistenceManager.java
- * Created: 3 Jan 2020
- * + * Created: 1 Jan 2020
+ * * @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 getUnreadMessages(User user) {// TODO may need to be changed to clientId + return entityManager.createNamedQuery("getUnreadMessages").setParameter("recipient", user).getResultList(); + } +} \ No newline at end of file