diff --git a/groupChat/GroupChatDAO.txt b/groupChat/GroupChatDAO.txt deleted file mode 100644 index 91f62ea849e22f154908fafed49504853166b9df..0000000000000000000000000000000000000000 --- a/groupChat/GroupChatDAO.txt +++ /dev/null @@ -1,222 +0,0 @@ -package dao; - -import data.GroupChat; -import data.Message; -import data.User; -import java.sql.*; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.TimeZone; - -import static dao.Database.close; - - -/** - * Data access object for GroupChat - */ -public class GroupChatDAO { - - /** - * Add a new GroupChat - * @param groupChat GroupChat to be added - * @return GroupChat, empty GroupChat object if unsuccessful - */ - - - public GroupChat addGroupChat(GroupChat groupChat){ - PreparedStatement preparedStatement = null; - Connection connection = 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()){ - int groupChatId = resultSet.getInt(1); - groupChat.setGroupChatId(groupChatId); - - ArrayList<User> users = groupChat.getUserList(); - preparedStatement = connection.prepareStatement("INSERT INTO user_groupChat (userId, groupChatId) VALUES (?, ?) "); - for(User user:users){ - preparedStatement.setInt(1, user.getUserId()); - preparedStatement.setInt(2, groupChatId); - preparedStatement.executeUpdate(); - } - return groupChat; - } - } - - }catch (SQLException e){ - e.printStackTrace(); - }finally{ - close(connection, preparedStatement, resultSet); - } - return new GroupChat(); - } - - /** - * Get a GroupChat, with given groupChatId - * @param groupChatId groupChatId as int - * @return requested GroupChat if found, empty GroupChat object if not found - */ - - - public GroupChat getGroupChat(int groupChatId){ - PreparedStatement preparedStatement = null; - Connection connection = null; - ResultSet resultSet = null; - GroupChat groupChat = new GroupChat(); - try{ - connection = Database.instance().getConnection(); - preparedStatement = connection.prepareStatement("SELECT * FROM groupChat WHERE groupChatId = ?"); - preparedStatement.setInt(1, groupChatId); - resultSet = preparedStatement.executeQuery(); - while(resultSet.next()) { - groupChat.setGroupChatId(groupChatId); - groupChat.setGroupChatName(resultSet.getString("groupChatName")); - } - }catch(SQLException e){ - e.printStackTrace(); - }finally{ - close(connection, preparedStatement, resultSet); - } - return groupChat; - } - - - - /** - * Get all GroupChats for user with given userId - * @param userId int userId of the user - * @return ArrayList of GroupChats - */ - - - public ArrayList<GroupChat> getGroupChatByUserId(int userId){ - ArrayList<GroupChat> groupChats = new ArrayList<>(); - PreparedStatement preparedStatement = null; - Connection connection = null; - ResultSet resultSet = null; - try{ - connection = Database.instance().getConnection(); - preparedStatement = connection.prepareStatement("SELECT * FROM groupChat WHERE groupChatId IN (SELECT groupChatId FROM user_groupChat WHERE userId = ?)"); - preparedStatement.setInt(1, userId); - resultSet = preparedStatement.executeQuery(); - GroupChat groupChat; - while(resultSet.next()){ - groupChat = new GroupChat(); - groupChat.setGroupChatId(resultSet.getInt("groupChatId")); - groupChat.setGroupChatName(resultSet.getString("groupChatName")); - groupChats.add(groupChat); - } - return groupChats; - }catch (SQLException e){ - e.printStackTrace(); - }finally{ - close(connection, preparedStatement, resultSet); - } - return groupChats; - } - - /** - * Get all messages for a GroupChat - * @param groupChatId groupChatId as int - * @return ArrayList of Messages - */ - - - public ArrayList<Message> getGroupChatMessages(int groupChatId){ - ArrayList<Message> messages = new ArrayList<>(); - PreparedStatement preparedStatement = null; - Connection connection = null; - ResultSet resultSet = null; - try{ - connection = Database.instance().getConnection(); - preparedStatement = connection.prepareStatement("SELECT * FROM message WHERE groupChatId = ?"); - preparedStatement.setInt(1, groupChatId); - resultSet = preparedStatement.executeQuery(); - - Message message; - while(resultSet.next()){ - message = new Message(); - message.setMessageId(resultSet.getInt("messageId")); - message.setUserId1(resultSet.getInt("userId1")); - Calendar cal = Calendar.getInstance(); - cal.setTimeZone(TimeZone.getTimeZone("UTC")); - message.setTimestamp(resultSet.getTimestamp("timestamp",cal)); - message.setMessageContent(resultSet.getString("messageContent")); - message.setGroupChatId(resultSet.getInt("groupChatId")); - messages.add(message); - } - }catch (SQLException e){ - e.printStackTrace(); - }finally { - close(connection, preparedStatement, resultSet); - } - return messages; - } - - /** - * Adds a Message to a GroupChat - * @param groupChatId groupChatId as int - * @param message Message object to be added to GroupChat - * @return The message that was added - */ - - public Message addMessage(int groupChatId, Message message){ - PreparedStatement preparedStatement = null; - Connection connection = null; - try{ - connection = Database.instance().getConnection(); - preparedStatement = connection.prepareStatement("INSERT INTO message (userId1, timestamp, messageContent, groupChatId) VALUES (?, NOW(), ?, ?)"); - preparedStatement.setInt(1, message.getUserId1()); - preparedStatement.setString(2, message.getMessageContent()); - preparedStatement.setInt(3, groupChatId); - - preparedStatement.executeUpdate(); - }catch (SQLException e){ - e.printStackTrace(); - }finally{ - close(connection, preparedStatement, null); - } - return message; - } - - /** - * Get all users in a GroupChat - * @param groupChatId groupChatId as int - * @return ArrayList of Users the GroupChat - */ - - - public ArrayList<User> getGroupChatUsers(int groupChatId){ - ArrayList<User> users = new ArrayList<>(); - PreparedStatement preparedStatement = null; - ResultSet resultSet = null; - Connection connection = null; - try{ - connection = Database.instance().getConnection(); - preparedStatement = connection.prepareStatement("SELECT * FROM user WHERE user.userId IN (SELECT userId FROM user_groupChat WHERE groupChatId = ?)"); - preparedStatement.setInt(1, groupChatId); - resultSet = preparedStatement.executeQuery(); - - User user; - while(resultSet.next()){ - user = new User(); - user.setUserId(resultSet.getInt("userId")); - user.setUsername(resultSet.getString("username")); - users.add(user); - } - }catch(SQLException e){ - e.printStackTrace(); - }finally{ - close(connection, preparedStatement, resultSet); - } - return users; - } -} diff --git a/pom.xml b/pom.xml index 5961d8e59a59f02464e6668678a5b08864899e77..85dee391011400d6d8ced5fe8961a1d9c6685c4d 100644 --- a/pom.xml +++ b/pom.xml @@ -107,6 +107,16 @@ <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> + <dependency> + <groupId>org.glassfish.jersey.test-framework</groupId> + <artifactId>jersey-test-framework-core</artifactId> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.12</version> + <scope>compile</scope> + </dependency> </dependencies> <properties> <jersey.version>2.26</jersey.version> diff --git a/src/main/java/dao/GroupChatDAO.java b/src/main/java/dao/GroupChatDAO.java index f2c5f339109a312ab30e990f0d6e3ddb4ae71346..91f62ea849e22f154908fafed49504853166b9df 100644 --- a/src/main/java/dao/GroupChatDAO.java +++ b/src/main/java/dao/GroupChatDAO.java @@ -1,13 +1,222 @@ package dao; +import data.GroupChat; +import data.Message; import data.User; - +import java.sql.*; import java.util.ArrayList; +import java.util.Calendar; +import java.util.TimeZone; + +import static dao.Database.close; + +/** + * Data access object for GroupChat + */ public class GroupChatDAO { - //Made so that the rest of the application runs without group chats implemented. + /** + * Add a new GroupChat + * @param groupChat GroupChat to be added + * @return GroupChat, empty GroupChat object if unsuccessful + */ + + + public GroupChat addGroupChat(GroupChat groupChat){ + PreparedStatement preparedStatement = null; + Connection connection = 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()){ + int groupChatId = resultSet.getInt(1); + groupChat.setGroupChatId(groupChatId); + + ArrayList<User> users = groupChat.getUserList(); + preparedStatement = connection.prepareStatement("INSERT INTO user_groupChat (userId, groupChatId) VALUES (?, ?) "); + for(User user:users){ + preparedStatement.setInt(1, user.getUserId()); + preparedStatement.setInt(2, groupChatId); + preparedStatement.executeUpdate(); + } + return groupChat; + } + } + + }catch (SQLException e){ + e.printStackTrace(); + }finally{ + close(connection, preparedStatement, resultSet); + } + return new GroupChat(); + } + + /** + * Get a GroupChat, with given groupChatId + * @param groupChatId groupChatId as int + * @return requested GroupChat if found, empty GroupChat object if not found + */ + + + public GroupChat getGroupChat(int groupChatId){ + PreparedStatement preparedStatement = null; + Connection connection = null; + ResultSet resultSet = null; + GroupChat groupChat = new GroupChat(); + try{ + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement("SELECT * FROM groupChat WHERE groupChatId = ?"); + preparedStatement.setInt(1, groupChatId); + resultSet = preparedStatement.executeQuery(); + while(resultSet.next()) { + groupChat.setGroupChatId(groupChatId); + groupChat.setGroupChatName(resultSet.getString("groupChatName")); + } + }catch(SQLException e){ + e.printStackTrace(); + }finally{ + close(connection, preparedStatement, resultSet); + } + return groupChat; + } + + + + /** + * Get all GroupChats for user with given userId + * @param userId int userId of the user + * @return ArrayList of GroupChats + */ + + + public ArrayList<GroupChat> getGroupChatByUserId(int userId){ + ArrayList<GroupChat> groupChats = new ArrayList<>(); + PreparedStatement preparedStatement = null; + Connection connection = null; + ResultSet resultSet = null; + try{ + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement("SELECT * FROM groupChat WHERE groupChatId IN (SELECT groupChatId FROM user_groupChat WHERE userId = ?)"); + preparedStatement.setInt(1, userId); + resultSet = preparedStatement.executeQuery(); + GroupChat groupChat; + while(resultSet.next()){ + groupChat = new GroupChat(); + groupChat.setGroupChatId(resultSet.getInt("groupChatId")); + groupChat.setGroupChatName(resultSet.getString("groupChatName")); + groupChats.add(groupChat); + } + return groupChats; + }catch (SQLException e){ + e.printStackTrace(); + }finally{ + close(connection, preparedStatement, resultSet); + } + return groupChats; + } + + /** + * Get all messages for a GroupChat + * @param groupChatId groupChatId as int + * @return ArrayList of Messages + */ + + + public ArrayList<Message> getGroupChatMessages(int groupChatId){ + ArrayList<Message> messages = new ArrayList<>(); + PreparedStatement preparedStatement = null; + Connection connection = null; + ResultSet resultSet = null; + try{ + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement("SELECT * FROM message WHERE groupChatId = ?"); + preparedStatement.setInt(1, groupChatId); + resultSet = preparedStatement.executeQuery(); + + Message message; + while(resultSet.next()){ + message = new Message(); + message.setMessageId(resultSet.getInt("messageId")); + message.setUserId1(resultSet.getInt("userId1")); + Calendar cal = Calendar.getInstance(); + cal.setTimeZone(TimeZone.getTimeZone("UTC")); + message.setTimestamp(resultSet.getTimestamp("timestamp",cal)); + message.setMessageContent(resultSet.getString("messageContent")); + message.setGroupChatId(resultSet.getInt("groupChatId")); + messages.add(message); + } + }catch (SQLException e){ + e.printStackTrace(); + }finally { + close(connection, preparedStatement, resultSet); + } + return messages; + } + + /** + * Adds a Message to a GroupChat + * @param groupChatId groupChatId as int + * @param message Message object to be added to GroupChat + * @return The message that was added + */ + + public Message addMessage(int groupChatId, Message message){ + PreparedStatement preparedStatement = null; + Connection connection = null; + try{ + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement("INSERT INTO message (userId1, timestamp, messageContent, groupChatId) VALUES (?, NOW(), ?, ?)"); + preparedStatement.setInt(1, message.getUserId1()); + preparedStatement.setString(2, message.getMessageContent()); + preparedStatement.setInt(3, groupChatId); + + preparedStatement.executeUpdate(); + }catch (SQLException e){ + e.printStackTrace(); + }finally{ + close(connection, preparedStatement, null); + } + return message; + } + + /** + * Get all users in a GroupChat + * @param groupChatId groupChatId as int + * @return ArrayList of Users the GroupChat + */ + + public ArrayList<User> getGroupChatUsers(int groupChatId){ - return null; + ArrayList<User> users = new ArrayList<>(); + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + Connection connection = null; + try{ + connection = Database.instance().getConnection(); + preparedStatement = connection.prepareStatement("SELECT * FROM user WHERE user.userId IN (SELECT userId FROM user_groupChat WHERE groupChatId = ?)"); + preparedStatement.setInt(1, groupChatId); + resultSet = preparedStatement.executeQuery(); + + User user; + while(resultSet.next()){ + user = new User(); + user.setUserId(resultSet.getInt("userId")); + user.setUsername(resultSet.getString("username")); + users.add(user); + } + }catch(SQLException e){ + e.printStackTrace(); + }finally{ + close(connection, preparedStatement, resultSet); + } + return users; } } diff --git a/src/main/java/data/GroupChat.java b/src/main/java/data/GroupChat.java index 085d9b1526f36ee477dc6d3beb8bc9916d209e2f..6ab7f2f93d898b880c24ec33cd4dc194014b298d 100644 --- a/src/main/java/data/GroupChat.java +++ b/src/main/java/data/GroupChat.java @@ -1,6 +1,53 @@ 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 ID,String name){ + this.groupChatID=ID; + this.groupChatName=name; + } + + public int getGroupChatID() { + return groupChatID; + } + + public String getGroupChatName() { + return groupChatName; + } + + public ArrayList<Message> getMessageList() { + return messageList; + } + + public ArrayList<User> getUserList() { + return userList; + } + + + public void setGroupChatName(String groupChatName) { + this.groupChatName = groupChatName; + } + + public void setMessageList(ArrayList<Message> messageList) { + this.messageList=messageList; + } + + public void setUserList(ArrayList<User> userList) { + this.userList = userList; + } + + public void setGroupChatId(int groupChatId) { + this.groupChatID=groupChatId; + } +} diff --git a/src/main/java/resources/GroupChatResource.java b/src/main/java/resources/GroupChatResource.java index a24331a5faa8f57bafa5f563108d5615153573af..fd72bf0396b36b4f1fa8354d07a74e147c7bb649 100644 --- a/src/main/java/resources/GroupChatResource.java +++ b/src/main/java/resources/GroupChatResource.java @@ -1,9 +1,12 @@ package resources; +import dao.GroupChatDAO; import data.GroupChat; +import data.Message; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; +import java.util.ArrayList; /** * GroupChat resource exposed at "/groupchat" path @@ -20,7 +23,16 @@ public class GroupChatResource { @Path ("{groupChatId}") @Produces (MediaType.APPLICATION_JSON) public GroupChat getGroupChat(@PathParam("groupChatId") int groupChatId){ - return null; + GroupChatDAO groupChatDAO=new GroupChatDAO(); + GroupChat groupChat = groupChatDAO.getGroupChat(groupChatId); + groupChat.setMessageList(groupChatDAO.getGroupChatMessages(groupChatId)); + groupChat.setUserList(groupChatDAO.getGroupChatUsers(groupChatId)); + return groupChat; } + public void postMessage(int groupChatID, String groupChatMessage){ + + } + + } diff --git a/groupChat/GroupChatDAOTest.txt b/src/test/GroupChatDAOTest.java similarity index 100% rename from groupChat/GroupChatDAOTest.txt rename to src/test/GroupChatDAOTest.java diff --git a/groupChat/GroupChatResourceTest.txt b/src/test/java/GroupChatResourceTest.java similarity index 99% rename from groupChat/GroupChatResourceTest.txt rename to src/test/java/GroupChatResourceTest.java index 952a99337923da0effffded2f498dae7a0217516..5e6ccf94f07a331128e7681483d80db0e0bd2173 100644 --- a/groupChat/GroupChatResourceTest.txt +++ b/src/test/java/GroupChatResourceTest.java @@ -1,6 +1,7 @@ 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;