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