diff --git a/groupChat/GroupChatResourceTest.txt b/groupChat/GroupChatResourceTest.txt deleted file mode 100644 index 952a99337923da0effffded2f498dae7a0217516..0000000000000000000000000000000000000000 --- a/groupChat/GroupChatResourceTest.txt +++ /dev/null @@ -1,76 +0,0 @@ -import data.GroupChat; -import data.Message; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; -import org.junit.Test; -import resources.GroupChatResource; - -import javax.ws.rs.client.Entity; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class GroupChatResourceTest extends JerseyTest { - private final GroupChatResource groupChatResource = new GroupChatResource(); - private int groupChatId = 1; - - @Override - public Application configure() { - enable(TestProperties.LOG_TRAFFIC); - enable(TestProperties.DUMP_ENTITY); - return new ResourceConfig(GroupChatResource.class); - } - - @Test - public void testGetGroupChat() { - Response output = target("groupchat/" + groupChatId).request().get(); - assertEquals("Should return status 200", 200, output.getStatus()); - assertEquals("application/json", output.getHeaderString("Content-type")); - assertNotNull(output.getEntity()); - } - - @Test - public void testGetGroupChatByUserId() { - int userId = 1; - Response output = target("groupchat/user/" + userId).request().get(); - assertEquals("Should return status 200", 200, output.getStatus()); - assertEquals("application/json", output.getHeaderString("Content-type")); - assertNotNull(output.getEntity()); - } - - @Test - public void testGetMessages() { - Response output = target("groupchat/" + groupChatId + "/message").request().get(); - assertEquals("Should return status 200", 200, output.getStatus()); - assertEquals("application/json", output.getHeaderString("Content-type")); - assertNotNull(output.getEntity()); - } - - @Test - public void testPostGroupChat() { - GroupChat groupChat = new GroupChat(); - groupChat.setGroupChatName("testPostGroupChat"); - - Response output = target("/groupchat").request().post(Entity.entity(groupChat, MediaType.APPLICATION_JSON)); - assertEquals("Should return status 200",200,output.getStatus()); - assertEquals("application/json",output.getHeaderString("Content-type")); - assertEquals("testPostGroupChat", groupChatResource.postGroupChat(groupChat).getGroupChatName()); - } - - @Test - public void testPostMessage() { - Message groupChatMessage = new Message(); - groupChatMessage.setUserId1(1); - groupChatMessage.setMessageContent("testPostMessage"); - groupChatMessage.setGroupChatId(groupChatId); - - Response output = target("groupchat/" + groupChatId + "/message").request().post(Entity.entity(groupChatMessage, MediaType.APPLICATION_JSON)); - assertEquals("Should return status 200",200, output.getStatus()); - assertEquals("application/json", output.getHeaderString("Content-type")); - assertEquals("testPostMessage", groupChatResource.postMessage(groupChatId, groupChatMessage).getMessageContent()); - } -} diff --git a/src/main/java/dao/GroupChatDAO.java b/src/main/java/dao/GroupChatDAO.java index f2c5f339109a312ab30e990f0d6e3ddb4ae71346..4269d354e1345d2047a2ca8132513dc506c34848 100644 --- a/src/main/java/dao/GroupChatDAO.java +++ b/src/main/java/dao/GroupChatDAO.java @@ -1,13 +1,227 @@ package dao; +import data.GroupChat; +import data.Message; import data.User; +import java.sql.*; import java.util.ArrayList; +import java.util.List; + +import static dao.Database.close; public class GroupChatDAO { + private GroupChat getGroupChatFromResultSet(ResultSet resultSet){ + GroupChat groupChat = null; + try{ + if(resultSet.next()){ + groupChat = new GroupChat(); + groupChat.setGroupChatId(resultSet.getInt("groupChatId")); + groupChat.setGroupChatName(resultSet.getString("groupChatName")); + } + }catch (SQLException e){ + e.printStackTrace(); + } finally { + close(null, null, resultSet); + } + return groupChat; + } + + private ArrayList<Message> getMesagesFromResultSet(ResultSet resultSet) { + ArrayList<Message> messages = new ArrayList<>(); + try{ + while (resultSet.next()) { + Message message = new Message(); + message.setGroupChatId(resultSet.getInt("groupChatId")); + message.setMessageContent(resultSet.getString("messageContent")); + message.setTimestamp(resultSet.getTimestamp("timestamp")); + message.setUserId1(resultSet.getInt("userId1")); + message.setMessageId(resultSet.getInt("messageId")); + messages.add(message); + } + }catch (SQLException e){ + e.printStackTrace(); + } finally { + close(null, null, resultSet); + } + return messages; + } + + private ArrayList<User> getUsersFromResultSet(ResultSet resultSet) { + ArrayList<User> users = new ArrayList<>(); + UserDAO userDao = new UserDAO(); + try{ + while (resultSet.next()) { + User user = userDao.getUserById(resultSet.getInt("userId")); + users.add(user); + } + }catch (SQLException e){ + e.printStackTrace(); + } finally { + close(null, null, resultSet); + } + return users; + } + + private ArrayList<GroupChat> getGroupChatsFromUserIdResultSet(ResultSet resultSet) { + ArrayList<GroupChat> groupChats = new ArrayList<>(); + + try{ + while (resultSet.next()) { + int groupChatId = resultSet.getInt("groupChatId"); + GroupChat groupChat = getGroupChat(groupChatId); + groupChats.add(groupChat); + } + }catch (SQLException e){ + e.printStackTrace(); + } finally { + close(null, null, resultSet); + } + return groupChats; + } + //Made so that the rest of the application runs without group chats implemented. public ArrayList<User> getGroupChatUsers(int groupChatId){ - return null; + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + ArrayList<User> users = null; + try { + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement("SELECT * FROM user_groupChat WHERE groupChatId=?"); + preparedStatement.setInt(1, groupChatId); + resultSet = preparedStatement.executeQuery(); + users = getUsersFromResultSet(resultSet); + } catch (SQLException e) { + e.printStackTrace(); + }finally { + close(connection, preparedStatement, resultSet); + } + return users; + + } + + + + public void addGroupChat(GroupChat groupChat) { + + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + try { + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement( + "INSERT INTO groupChat (groupChatName) VALUES (?)", Statement.RETURN_GENERATED_KEYS); + + preparedStatement.setString(1, groupChat.getGroupChatName()); + int result = preparedStatement.executeUpdate(); + + if (result == 1) { + resultSet = preparedStatement.getGeneratedKeys(); + if (resultSet.next()) groupChat.setGroupChatId(resultSet.getInt(1)); + } + }catch (SQLIntegrityConstraintViolationException e){ + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + }finally{ + close(connection, preparedStatement, resultSet); + } + } + + + public GroupChat getGroupChat(int groupChatId) { + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + GroupChat groupChat = null; + try { + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement("SELECT * FROM groupChat WHERE groupChatId=?"); + preparedStatement.setInt(1, groupChatId); + resultSet = preparedStatement.executeQuery(); + groupChat = getGroupChatFromResultSet(resultSet); + + groupChat.setMessageList(getGroupChatMessages(groupChatId)); + groupChat.setUserList(getGroupChatUsers(groupChatId)); + } catch (SQLException e) { + e.printStackTrace(); + }finally { + close(connection, preparedStatement, resultSet); + } + return groupChat; + + } + + + public ArrayList<GroupChat> getGroupChatByUserId(int userId) { + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + ArrayList<GroupChat> groupChats = null; + try { + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement("SELECT * FROM user_groupChat WHERE userId=?"); + preparedStatement.setInt(1, userId); + resultSet = preparedStatement.executeQuery(); + groupChats = getGroupChatsFromUserIdResultSet(resultSet); + } catch (SQLException e) { + e.printStackTrace(); + }finally { + close(connection, preparedStatement, resultSet); + } + return groupChats; + } + + public ArrayList<Message> getGroupChatMessages(int groupChatId) { + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + ArrayList<Message> messages = null; + try { + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement("SELECT * FROM message WHERE groupChatId=?"); + preparedStatement.setInt(1, groupChatId); + resultSet = preparedStatement.executeQuery(); + messages = getMesagesFromResultSet(resultSet); + } catch (SQLException e) { + e.printStackTrace(); + }finally { + close(connection, preparedStatement, resultSet); + } + return messages; + } + + + + public void addMessage(Message message) { + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + try { + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement( + "INSERT INTO message (userId1, groupChatId, timestamp, messageContent) VALUES (?, ?, NOW(), ?)", Statement.RETURN_GENERATED_KEYS); + + preparedStatement.setInt(1, message.getUserId1()); + preparedStatement.setInt(2, message.getGroupChatId()); + preparedStatement.setString(3, message.getMessageContent()); + + int result = preparedStatement.executeUpdate(); + + if (result == 1) { + resultSet = preparedStatement.getGeneratedKeys(); + if (resultSet.next()) message.setMessageId(resultSet.getInt(1)); + } + }catch (SQLIntegrityConstraintViolationException e){ + message = new Message(); + } catch (SQLException e) { + e.printStackTrace(); + }finally{ + close(connection, preparedStatement, resultSet); + } } } diff --git a/src/main/java/dao/UserDAO.java b/src/main/java/dao/UserDAO.java index 2d9134acb22b76128ebbbff5b814ea5479183ff2..88ec688539f2f3bbf6b0b25adce54196ba22dcdd 100644 --- a/src/main/java/dao/UserDAO.java +++ b/src/main/java/dao/UserDAO.java @@ -76,7 +76,7 @@ public class UserDAO { * @param userId userId as int * @return requested user object if found, null if not found */ - private User getUserById(int userId) { + protected User getUserById(int userId) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; diff --git a/src/main/java/data/GroupChat.java b/src/main/java/data/GroupChat.java index 085d9b1526f36ee477dc6d3beb8bc9916d209e2f..97cf84f6713332e8ad517dbd3b9d041486746474 100644 --- a/src/main/java/data/GroupChat.java +++ b/src/main/java/data/GroupChat.java @@ -1,6 +1,55 @@ package data; +import java.util.ArrayList; + /** * Class for the GroupChat object as saved in database */ -public class GroupChat {} +public class GroupChat { + private int groupChatId; + private String groupChatName; + private ArrayList<Message> messageList = new ArrayList<>(); + private ArrayList<User> userList = new ArrayList<>(); + + public GroupChat() { + + } + + public GroupChat(int groupChatId, String groupChatName) { + this.groupChatId = groupChatId; + this.groupChatName = groupChatName; + } + + public int getGroupChatId() { + return groupChatId; + } + + public void setGroupChatId(int groupChatId) { + this.groupChatId = groupChatId; + } + + public String getGroupChatName() { + return groupChatName; + } + + public void setGroupChatName(String groupChatName) { + this.groupChatName = groupChatName; + } + + public ArrayList<Message> getMessageList() { + return messageList; + } + + public void setMessageList(ArrayList<Message> messageList) { + this.messageList = messageList; + } + + public ArrayList<User> getUserList() { + return userList; + } + + public void setUserList(ArrayList<User> userList) { + this.userList = userList; + } + +} diff --git a/groupChat/GroupChatDAOTest.txt b/src/test/java/GroupChatDAOTest.java similarity index 97% rename from groupChat/GroupChatDAOTest.txt rename to src/test/java/GroupChatDAOTest.java index d18bc05392566541e4265d92d7dd0f5c08b248d9..acf10ee5e5324beddbfec5756df2a8a1f2b04388 100644 --- a/groupChat/GroupChatDAOTest.txt +++ b/src/test/java/GroupChatDAOTest.java @@ -17,6 +17,7 @@ import java.sql.Statement; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; @@ -207,7 +208,7 @@ public class GroupChatDAOTest extends JerseyTest { message.setGroupChatId(groupChatId); ArrayList<Message> beforeAddMessage = groupChatDAO.getGroupChatMessages(groupChatId); - groupChatDAO.addMessage(groupChatId, message); + groupChatDAO.addMessage(message); ArrayList<Message> afterAddMessage = groupChatDAO.getGroupChatMessages(groupChatId); assertNotEquals(beforeAddMessage.size(), afterAddMessage.size()); @@ -216,14 +217,13 @@ public class GroupChatDAOTest extends JerseyTest { @Test public void testGetGroupChatUsers() { final int groupChatId = 1; - ArrayList<String> expected = new ArrayList<>(); + List<String> expected = new ArrayList<>(); expected.add("username"); final ArrayList<User> result = groupChatDAO.getGroupChatUsers(groupChatId); - ArrayList<String> resultUsernames = new ArrayList<>(); - - for (User user : result) resultUsernames.add(user.getUsername()); + List<String> resultUsernames = result.stream().map(User::getUsername).collect(Collectors.toList()); assertEquals(expected, resultUsernames); } } + diff --git a/src/test/java/GroupChatResourceTest.java b/src/test/java/GroupChatResourceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..da8bb3bff69a436bd06b21d55f121fef7a434682 --- /dev/null +++ b/src/test/java/GroupChatResourceTest.java @@ -0,0 +1,2 @@ +public class GroupChatResourceTest { +}