diff --git a/pages/css/style.css b/pages/css/style.css index f32557e..3f134a7 100644 --- a/pages/css/style.css +++ b/pages/css/style.css @@ -49,6 +49,7 @@ body { height: -moz-calc(100% - 50px); height: -webkit-calc(100% - 50px); height: calc(100% - 50px); + overflow: auto; } html, body { diff --git a/src/io/github/norbipeti/chat/server/IOHelper.java b/src/io/github/norbipeti/chat/server/IOHelper.java index de28363..7a47da7 100644 --- a/src/io/github/norbipeti/chat/server/IOHelper.java +++ b/src/io/github/norbipeti/chat/server/IOHelper.java @@ -116,7 +116,7 @@ public class IOHelper { // provider.SetValues(() -> // user.setSessionid(UUID.randomUUID().toString())); user.setSessionid(UUID.randomUUID().toString()); - provider.save(user); + user = provider.save(user); ZonedDateTime expiretime = ZonedDateTime.now(ZoneId.of("GMT")).plus(Period.of(2, 0, 0)); exchange.getResponseHeaders().add("Set-Cookie", "user_id=" + user.getId() + "; expires=" + expiretime.format(DateTimeFormatter.RFC_1123_DATE_TIME)); diff --git a/src/io/github/norbipeti/chat/server/Main.java b/src/io/github/norbipeti/chat/server/Main.java index 6445a2c..4fca01c 100644 --- a/src/io/github/norbipeti/chat/server/Main.java +++ b/src/io/github/norbipeti/chat/server/Main.java @@ -38,44 +38,42 @@ public class Main { user2.setName("Teszt"); // TODO: // http://www.journaldev.com/3524/spring-hibernate-integration-example-tutorial user2.setEmail("test2@test.com"); - user2.getContacts().add(user); - provider.save(user); - List users = provider.getUsers(); - user = users.get(0); + user = provider.save(user); + user2 = provider.save(user2); user.getContacts().add(user2); - provider.save(user2); - users = provider.getUsers(); - user2 = users.get(1); - LogManager.getLogger().log(Level.DEBUG, users); + user2.getContacts().add(user); LogManager.getLogger().log(Level.DEBUG, "1st's contact: " + user.getContacts().get(0)); LogManager.getLogger().log(Level.DEBUG, "2nd's contact: " + user2.getContacts().get(0)); - Conversation convo = new Conversation(); - //convo.getUsers().add(user); - //user.getConversations().add(convo); - //convo.getUsers().add(user2); - //user2.getConversations().add(convo); //TODO: Fix duplicate + Conversation conversation = new Conversation(); + conversation = provider.save(conversation); + conversation.getUsers().add(user); + user.getConversations().add(conversation); + LogManager.getLogger().debug("User: " + user); + conversation.getUsers().add(user2); + LogManager.getLogger().debug("User2: " + user2); + user2.getConversations().add(conversation); // TODO: Fix + // duplicate // key constraint Message msg = new Message(); msg.setSender(user); msg.setTime(new Date()); msg.setMessage("Teszt 1"); - convo.getMesssages().add(msg); + conversation.getMesssages().add(msg); Message msg2 = new Message(); msg2.setSender(user2); msg2.setTime(new Date()); msg2.setMessage("Teszt 2"); - convo.getMesssages().add(msg2); - provider.save(convo); - provider.save(user); - provider.save(user2); - User loggedinuser = new User(); - loggedinuser.setName("NorbiPeti"); - loggedinuser.setSessionid("093b1395-8c31-4f3b-ba67-828a755af92e"); - loggedinuser.setEmail("sznp@asd.com"); - convo.getUsers().add(loggedinuser); - loggedinuser.getConversations().add(convo); - provider.save(loggedinuser); - provider.save(convo); + conversation.getMesssages().add(msg2); + // provider.save(user); + // provider.save(user2); + /* + * User loggedinuser = new User(); provider.save(loggedinuser); + * loggedinuser.setName("NorbiPeti"); loggedinuser.setSessionid( + * "093b1395-8c31-4f3b-ba67-828a755af92e"); + * loggedinuser.setEmail("sznp@asd.com"); + * conversation.getUsers().add(loggedinuser); + * loggedinuser.getConversations().add(conversation); + */ } LogManager.getLogger().log(Level.INFO, "Starting webserver..."); HttpServer server = HttpServer.create(new InetSocketAddress(InetAddress.getLocalHost(), 8080), 10); diff --git a/src/io/github/norbipeti/chat/server/db/DataProvider.java b/src/io/github/norbipeti/chat/server/db/DataProvider.java index f157a10..de8ee85 100644 --- a/src/io/github/norbipeti/chat/server/db/DataProvider.java +++ b/src/io/github/norbipeti/chat/server/db/DataProvider.java @@ -13,24 +13,17 @@ import io.github.norbipeti.chat.server.db.domain.*; public class DataProvider implements AutoCloseable { private EntityManagerFactory emf; + private EntityManager em; public DataProvider() { emf = Persistence.createEntityManagerFactory("ChatServerPU"); + em = emf.createEntityManager(); + em.getTransaction().begin(); } - public void save(T object) { - EntityManager em = null; - try { - em = emf.createEntityManager(); - em.getTransaction().begin(); - Session s = em.unwrap(Session.class); - s.saveOrUpdate(object); - em.persist(object); - em.getTransaction().commit(); - } finally { - em.close(); - } - + public T save(T object) { + T obj = em.merge(object); + return obj; } public List getUsers() { @@ -46,21 +39,15 @@ public class DataProvider implements AutoCloseable { } private List get(Class cl) { - EntityManager em = emf.createEntityManager(); TypedQuery query = em.createQuery("SELECT x FROM " + cl.getSimpleName() + " x", cl); List results = query.getResultList(); Hibernate.initialize(results); - em.close(); return results; } public void removeUser(User user) { - EntityManager em = emf.createEntityManager(); - em.getTransaction().begin(); User managedUser = em.find(User.class, user.getId()); em.remove(managedUser); - em.getTransaction().commit(); - em.close(); } public User getUser(Long id) { @@ -68,32 +55,28 @@ public class DataProvider implements AutoCloseable { } private T get(Class cl, Long id) { - EntityManager em = emf.createEntityManager(); T result = em.find(cl, id); - em.close(); return result; } @Deprecated public void SetValues(Runnable action) { - EntityManager em = emf.createEntityManager(); - em.getTransaction().begin(); action.run(); em.flush(); - em.getTransaction().commit(); - em.close(); } @Override public void close() { + if (em != null) { + em.flush(); + em.close(); + } if (emf != null) emf.close(); } public boolean isEntityManaged(Object entity) { - EntityManager em = emf.createEntityManager(); boolean ret = em.contains(entity); - em.close(); return ret; } } diff --git a/src/io/github/norbipeti/chat/server/db/domain/Conversation.java b/src/io/github/norbipeti/chat/server/db/domain/Conversation.java index d4f055f..7c44ab3 100644 --- a/src/io/github/norbipeti/chat/server/db/domain/Conversation.java +++ b/src/io/github/norbipeti/chat/server/db/domain/Conversation.java @@ -23,7 +23,10 @@ public class Conversation extends ChatDatabaseEntity { // inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = // "id", unique = false), uniqueConstraints = @UniqueConstraint(name = // "USER_CONV_UN", columnNames = {"user_id", "conversation_id" })) - @JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(name = "conversation_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")) + // @JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(name = + // "conversation_id", referencedColumnName = "id"), inverseJoinColumns = + // @JoinColumn(name = "user_id", referencedColumnName = "id")) + @JoinTable(name = "User_Conversation") private Set users; public List getMesssages() { diff --git a/src/io/github/norbipeti/chat/server/db/domain/Message.java b/src/io/github/norbipeti/chat/server/db/domain/Message.java index b26cbcb..84a5650 100644 --- a/src/io/github/norbipeti/chat/server/db/domain/Message.java +++ b/src/io/github/norbipeti/chat/server/db/domain/Message.java @@ -11,12 +11,12 @@ public class Message extends ChatDatabaseEntity { @Column(name = "id", unique = true, nullable = false) private Long id; @ManyToOne - //@JoinTable(name="user_message") + // @JoinTable(name="user_message") private User sender; private Date time; private String message; @ManyToOne(fetch = FetchType.EAGER) - //@JoinTable(name="conversation_message") + // @JoinTable(name="conversation_message") private Conversation conversation; public User getSender() { diff --git a/src/io/github/norbipeti/chat/server/db/domain/User.java b/src/io/github/norbipeti/chat/server/db/domain/User.java index 8970a50..81be3eb 100644 --- a/src/io/github/norbipeti/chat/server/db/domain/User.java +++ b/src/io/github/norbipeti/chat/server/db/domain/User.java @@ -18,6 +18,7 @@ public class User extends ChatDatabaseEntity { private String email; private String password; @ElementCollection(fetch = FetchType.EAGER) + @ManyToMany(cascade = CascadeType.ALL) private List contacts; private String salt; // @Column(columnDefinition = "CHAR(16) FOR BIT DATA") @@ -27,7 +28,10 @@ public class User extends ChatDatabaseEntity { // @ManyToMany(fetch = FetchType.EAGER, mappedBy = "users") @ManyToMany(mappedBy = "users", fetch = FetchType.EAGER, cascade = CascadeType.ALL) // @ManyToMany(mappedBy = "users") - //@JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(referencedColumnName = "id", unique = false), inverseJoinColumns = @JoinColumn(referencedColumnName = "id", unique = false)) + // @JoinTable(name = "User_Conversation", joinColumns = + // @JoinColumn(referencedColumnName = "id", unique = false), + // inverseJoinColumns = @JoinColumn(referencedColumnName = "id", unique = + // false)) private Set conversations; public List getContacts() { diff --git a/src/io/github/norbipeti/chat/server/page/RegisterAjaxPage.java b/src/io/github/norbipeti/chat/server/page/RegisterAjaxPage.java index cbf2c02..71452d0 100644 --- a/src/io/github/norbipeti/chat/server/page/RegisterAjaxPage.java +++ b/src/io/github/norbipeti/chat/server/page/RegisterAjaxPage.java @@ -40,9 +40,8 @@ public class RegisterAjaxPage extends Page { user.setEmail(post.getString("email")); user.setSalt(BCrypt.gensalt()); // http://www.mindrot.org/projects/jBCrypt/ user.setPassword(BCrypt.hashpw(post.getString("pass"), user.getSalt())); - provider.save(user); - User managedUser = provider.getUser(user.getId()); - IOHelper.LoginUser(exchange, managedUser, provider); + user = provider.save(user); + IOHelper.LoginUser(exchange, user, provider); IOHelper.SendResponse(200, "Success", exchange); } catch (Exception e) { throw e;