PageRenderTime 27ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/cs108finalproject/src/web/DBMessages.java

https://bitbucket.org/aneeshk/cs108-finalproject
Java | 358 lines | 226 code | 64 blank | 68 comment | 16 complexity | 2776740cfc4ff314182f978ec07912b7 MD5 | raw file
  1. package web;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. import java.sql.Statement;
  5. import java.util.ArrayList;
  6. public class DBMessages {
  7. static String table = "messages";
  8. private Statement stmt;
  9. public static final int NUM_FIELDS = 9;
  10. public static final int SUCCESS = 1;
  11. public static final int FAILURE = -1;
  12. /**
  13. * Constructor for DBMessages class that sets the instance variable Statement stmt
  14. * @param stmt - stmt for the database quering
  15. */
  16. public DBMessages(Statement stmt) {
  17. this.stmt = stmt;
  18. }
  19. //------------------------------------------ Start of Get Methods --------------------------------------------
  20. /**
  21. * Grabs an ArrayList of MessagesRow's for the receiverID
  22. * @param receiverID
  23. * @return ArrayList<MessagesRow>
  24. */
  25. public ArrayList<MessagesRow> getRecievedMessages(int receiverID) {
  26. String query = "SELECT * FROM " + table;
  27. if(receiverID > 0) {
  28. query += " WHERE receiverID = \"" + receiverID + "\"";
  29. }
  30. ResultSet rs = QueryDatabase.getQuery(query, stmt);
  31. if(rs == null) {
  32. System.out.println("No messages for receiverID: " + receiverID + " exist");
  33. return null;
  34. }
  35. ArrayList<MessagesRow> messages = new ArrayList<MessagesRow>();
  36. try {
  37. while(rs.next()) {
  38. messages.add(new MessagesRow(rs.getInt("messageID"),
  39. rs.getInt("receiverID"),
  40. rs.getInt("senderID"),
  41. rs.getString("messageTitle"),
  42. rs.getString("message"),
  43. rs.getLong("dateSent"),
  44. rs.getInt("dateRead"),
  45. rs.getString("messageType"),
  46. rs.getInt("quizChallengeID"),
  47. rs.getInt("friendRequest")));
  48. }
  49. } catch (SQLException e) {
  50. e.printStackTrace();
  51. }
  52. return messages;
  53. }
  54. /**
  55. * Get unread messages for a user
  56. * @param receiverID userID of user to get messages for
  57. * @return ArrayList of unread messages
  58. */
  59. public ArrayList<MessagesRow> getUnreadMessages(int receiverID) {
  60. String query = String.format("SELECT * FROM %s WHERE receiverID = '%d' AND dateRead = '0'", table, receiverID);
  61. ResultSet rs = QueryDatabase.getQuery(query, stmt);
  62. if(rs == null) {
  63. System.out.println("No messages for receiverID: " + receiverID + " exist");
  64. return null;
  65. }
  66. ArrayList<MessagesRow> messages = new ArrayList<MessagesRow>();
  67. try {
  68. while(rs.next()) {
  69. messages.add(new MessagesRow(rs.getInt("messageID"),
  70. rs.getInt("receiverID"),
  71. rs.getInt("senderID"),
  72. rs.getString("messageTitle"),
  73. rs.getString("message"),
  74. rs.getLong("dateSent"),
  75. rs.getInt("dateRead"),
  76. rs.getString("messageType"),
  77. rs.getInt("quizChallengeID"),
  78. rs.getInt("friendRequest")));
  79. }
  80. } catch (SQLException e) {
  81. e.printStackTrace();
  82. }
  83. return messages;
  84. }
  85. /**
  86. * Grabs an ArrayList of MessagesRow's that the userID has sent
  87. * @param senderID
  88. * @return ArrayList<MessagesRow>
  89. */
  90. public ArrayList<MessagesRow> getSentMessages(int senderID) {
  91. String query = "SELECT * FROM " + table;
  92. if(senderID > 0) {
  93. query += " WHERE senderID = \"" + senderID + "\"";
  94. }
  95. ResultSet rs = QueryDatabase.getQuery(query, stmt);
  96. if(rs == null) {
  97. System.out.println("No quizes for senderID: " + senderID + " exist");
  98. return null;
  99. }
  100. ArrayList<MessagesRow> messages = new ArrayList<MessagesRow>();
  101. try {
  102. while(rs.next()) {
  103. messages.add(new MessagesRow(rs.getInt("messageID"),
  104. rs.getInt("receiverID"),
  105. rs.getInt("senderID"),
  106. rs.getString("messageTitle"),
  107. rs.getString("message"),
  108. rs.getLong("dateSent"),
  109. rs.getInt("dateRead"),
  110. rs.getString("messageType"),
  111. rs.getInt("quizChallengeID"),
  112. rs.getInt("friendRequest")));
  113. }
  114. } catch (SQLException e) {
  115. e.printStackTrace();
  116. }
  117. return messages;
  118. }
  119. /**
  120. * Grabs an ArrayList of MessagesRow's that the userID has sent
  121. * @param senderID
  122. * @return ArrayList<MessagesRow>
  123. */
  124. public MessagesRow getMessage(int messageID) {
  125. String query = "SELECT * FROM " + table;
  126. if(messageID > 0) {
  127. query += " WHERE messageID = \"" + messageID + "\"";
  128. }
  129. ResultSet rs = QueryDatabase.getQuery(query, stmt);
  130. if(rs == null) {
  131. System.out.println("No quizes for messageID: " + messageID + " exist");
  132. return null;
  133. }
  134. MessagesRow row = null;
  135. try {
  136. while(rs.next()) {
  137. row = new MessagesRow(rs.getInt("messageID"),
  138. rs.getInt("receiverID"),
  139. rs.getInt("senderID"),
  140. rs.getString("messageTitle"),
  141. rs.getString("message"),
  142. rs.getLong("dateSent"),
  143. rs.getInt("dateRead"),
  144. rs.getString("messageType"),
  145. rs.getInt("quizChallengeID"),
  146. rs.getInt("friendRequest"));
  147. }
  148. } catch (SQLException e) {
  149. e.printStackTrace();
  150. }
  151. return row;
  152. }
  153. //------------------------------------------- End of Get Messages Methods ----------------------------------
  154. //----------------------------------------------------------------------------------------------------------
  155. //-------------------------------------------- Start of Send Messages --------------------------------------
  156. public int sendMessage(MessagesRow row) {
  157. return sendMessage(row.receiverID, row.senderID, row.messageTitle, row.message, row.dateSent.getTimeInMillis(),
  158. row.dateRead, row.messageType, row.quizChallengeID, row.friendRequest);
  159. }
  160. public int sendMessage(int receiverID, int senderID, String messageTitle, String message,
  161. Long dateSent, int dateRead, String messageType, int quizChallengeID, int friendRequest) {
  162. String dSent;
  163. if(dateSent == null)
  164. dSent = "";
  165. else
  166. dSent = dateSent.toString();
  167. if(messageType == null)
  168. messageType = "";
  169. return sendMessage(receiverID+"", senderID+"", messageTitle, message,
  170. dSent, dateRead+"", messageType, quizChallengeID+"", friendRequest+"");
  171. }
  172. /**
  173. * Adds a new MessageRow to the database
  174. * @param receiverID - ID receiving the message
  175. * @param senderID - ID sending the message
  176. * @param message - The message being sent
  177. * @param dateSent - The date this message was sent
  178. * @param dateRead - The time this message gets read
  179. * @param quizChallengeID - If sending a quiz, this ID is the quizID of the quiz
  180. * @return messageID on success, -1 on failure
  181. */
  182. public int sendMessage(String receiverID, String senderID, String messageTitle, String message, String dateSent,
  183. String dateRead, String messageType, String quizChallengeID, String friendRequest) {
  184. ArrayList<Object> row = new ArrayList<Object>();
  185. row.add(receiverID);
  186. row.add(senderID);
  187. row.add(messageTitle);
  188. row.add(message);
  189. row.add(dateSent);
  190. row.add(dateRead);
  191. row.add(messageType);
  192. row.add(quizChallengeID);
  193. row.add(friendRequest);
  194. return sendMessage(row);
  195. }
  196. /**
  197. * Adds a new MessageRow to the database
  198. * @param row - ArrayList<Object> with all the info for adding a MessagesRow
  199. * @return messageID on success, -1 on failure
  200. */
  201. public int sendMessage(ArrayList<Object> row) {
  202. if(row.size() < (NUM_FIELDS-1)) {
  203. //System.err.println("This isn't a proper entry");
  204. return FAILURE;
  205. }
  206. String receiverID = (String)row.get(0);
  207. String senderID = (String)row.get(1);
  208. String messageTitle = (String)row.get(2);
  209. String message = (String)row.get(3);
  210. String dateSent = (String)row.get(4);
  211. String dateRead = (String)row.get(5);
  212. String messageType = (String)row.get(6);
  213. String quizChallengeID = (String)row.get(7);
  214. String friendRequest = (String)row.get(8);
  215. String query = "INSERT INTO " + table;
  216. query += "(receiverID";
  217. query += ", senderID";
  218. query += ", messageTitle";
  219. query += ", message";
  220. query += ", dateSent";
  221. query += ", dateRead";
  222. query += ", messageType";
  223. query += ", quizChallengeID";
  224. query += ", friendRequest";
  225. query += ") VALUES (";
  226. query += "\"" + receiverID + "\"";
  227. query += ",";
  228. query += "\"" + senderID + "\"";
  229. query += ",";
  230. query += "\"" + DatabaseCompliance.makeStringDatabaseCompatible(messageTitle,
  231. DatabaseCompliance.MESSAGE_TITLE_MAX_LENGTH) + "\"";
  232. query += ",";
  233. query += "\"" + DatabaseCompliance.makeStringDatabaseCompatible(message,
  234. DatabaseCompliance.MESSAGE_MAX_LENGTH) + "\"";
  235. query += ",";
  236. query += "\"" + dateSent + "\"";
  237. query += ",";
  238. query += "\"" + dateRead + "\"";
  239. query += ",";
  240. query += "\"" + DatabaseCompliance.makeStringDatabaseCompatible(messageType,
  241. DatabaseCompliance.MESSAGE_TYPE_MAX_LENGTH) + "\"";
  242. query += ",";
  243. query += "\"" + quizChallengeID + "\"";
  244. query += ",";
  245. query += "\"" + friendRequest + "\"";
  246. query += ")";
  247. return QueryDatabase.setQueryWithAutoID(query, stmt);
  248. }
  249. //------------------------------------------- End of Send Messages Methods -----------------------------------
  250. //------------------------------------------------------------------------------------------------------------
  251. //------------------------------------------------ Update Methods --------------------------------------------
  252. /**
  253. * Updates dateRead to a non-zero number (In most cases, 1)
  254. * @param messageID
  255. */
  256. public void updateDateReadToTrue(int messageID) {
  257. String query = "UPDATE " + table + " SET dateRead = 1 WHERE messageID = " + messageID;
  258. QueryDatabase.setQuery(query, stmt);
  259. }
  260. //-------------------------------------------- End of Update Methods --------------------------------------------
  261. //---------------------------------------------------------------------------------------------------------------
  262. //----------------------------------------------- Delete Methods ------------------------------------------------
  263. /**
  264. * Deletes a message from the database
  265. * @param messageID
  266. */
  267. public void deleteMessage(int messageID) {
  268. String query = "DELETE FROM " + table + " WHERE messageID = " + messageID;
  269. QueryDatabase.setQuery(query, stmt);
  270. }
  271. /**
  272. * Remove friend request messages sent between userA and userB
  273. * in the database.
  274. * @param userA userID
  275. * @param userB userID
  276. */
  277. public void deleteFriendRequests(int userA, int userB)
  278. {
  279. String query1 = String.format("DELETE FROM %s WHERE receiverID = %d AND senderID = %d AND friendRequest = 1", table, userA, userB);
  280. String query2 = String.format("DELETE FROM %s WHERE receiverID = %d AND senderID = %d AND friendRequest = 1", table, userB, userA);
  281. QueryDatabase.setQuery(query1, stmt);
  282. QueryDatabase.setQuery(query2, stmt);
  283. }
  284. //--------------------------------------------- End of Delete Methods -------------------------------------------
  285. /*
  286. * Removes messages sent or received by authored by the user with the given ID
  287. */
  288. public void clearMessages(int userID) {
  289. String query = "DELETE FROM " + table + " WHERE receiverID = " + userID;
  290. String query2 = "DELETE FROM " + table + " WHERE senderID = " + userID;
  291. QueryDatabase.setQuery(query, stmt);
  292. QueryDatabase.setQuery(query2, stmt);
  293. }
  294. }