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: 1 Jan 2020
* * @author Leon Hofmeister * @since Envoy Server Standalone v0.1-alpha */ public class PersistenceManager { private static final PersistenceManager persistenceManager = new PersistenceManager(); /** * Creates the singleton instance of the @link{PersistenceManager}. * * @since Envoy Server Standalone v0.1-alpha */ private PersistenceManager() {} /** * @return the {@link PersistenceManager} singleton * @since Envoy Server Standalone v0.1-alpha */ public static PersistenceManager getPersistenceManager() { return persistenceManager; } private EntityManager entityManager = Persistence.createEntityManagerFactory("envoy").createEntityManager(); /** * Adds a {@link 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 {@link 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); } /** * Updates a {@link User} in the database * * @param user the {@link User} to add to the database * @since Envoy Server Standalone v0.1-alpha */ public void updateUser(User user) { entityManager.unwrap(Session.class).merge(user); } /** * Updates a {@link Message} in the database. * * @param message the message to update * @since Envoy Server Standalone v0.1-alpha */ public void updateMessage(Message message) { entityManager.unwrap(Session.class).merge(message); } /** * Searches for a {@link 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(); } /** * Searches for a {@link Message} with a specific id. * * @param id - the id to search for * @return the message with the specified id * @since Envoy Server Standalone v0.1-alpha */ public Message getMessageById(long id) { return (Message) entityManager.createNamedQuery("getMessageById").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) { return entityManager.createNamedQuery("getUnreadMessages").setParameter("recipient", user).getResultList(); } /** * @param user the User whose contacts should be retrieved * @return the contacts of this User - currently everyone using Envoy * @since Envoy Server Standalone v0.1-alpha */ @SuppressWarnings("unchecked") public List getContacts(User user) { return entityManager.createQuery("FROM User").getResultList(); } // TODO current solution gets all users, not just contacts. Should be changed to // entityManager.createNamedQuery("getContactsOfUser").setParameter("user", // user).getResultList(); }