package dao; import model.Event; import model.Person; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; /** * Event data access object that performs operations associated with events */ public class EventDAO { private final Connection conn; public EventDAO(Connection conn) { this.conn = conn; } /** * Creates an event * @param event */ public void createEvent(Event event) throws DataAccessException { String sql = "INSERT INTO Events (eventID, associatedUsername, personID, latitude, longitude, " + "country, city, eventType, year) VALUES(?,?,?,?,?,?,?,?,?)"; try (PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, event.getEventID()); stmt.setString(2, event.getUsername()); stmt.setString(3, event.getPersonID()); stmt.setFloat(4, event.getLatitude()); stmt.setFloat(5, event.getLongitude()); stmt.setString(6, event.getCountry()); stmt.setString(7, event.getCity()); stmt.setString(8, event.getEventType()); stmt.setInt(9, event.getYear()); stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); throw new DataAccessException("Error encountered while inserting into the database"); } } /** * Returns the event with the given eventID * @param eventID * @return * @throws DataAccessException */ public Event getEventByID(String eventID) throws DataAccessException { Event event; ResultSet rs = null; String sql = "SELECT * FROM Events WHERE eventID = ?;"; try (PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, eventID); rs = stmt.executeQuery(); if (rs.next()) { event = new Event(rs.getString("eventID"), rs.getString("associatedUsername"), rs.getString("personID"), rs.getFloat("latitude"), rs.getFloat("longitude"), rs.getString("country"), rs.getString("city"), rs.getString("eventType"), rs.getInt("year")); return event; } } catch (SQLException e) { e.printStackTrace(); throw new DataAccessException("Error encountered while finding event"); } finally { if(rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } return null; } /** * Returns a list of all events associated with a given user * @param username * @return a list of event objects associated with a given User */ public List findEventsForUser(String username) throws DataAccessException { List eventList = new ArrayList<>(); Event event; ResultSet rs = null; String sql = "SELECT * FROM Events WHERE associatedUsername = ?;"; try (PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, username); rs = stmt.executeQuery(); while (rs.next()) { event = new Event(rs.getString("eventID"), rs.getString("associatedUsername"), rs.getString("personID"), rs.getFloat("latitude"), rs.getFloat("longitude"), rs.getString("country"), rs.getString("city"), rs.getString("eventType"), rs.getInt("year")); eventList.add(event); } return eventList; } catch (SQLException e) { e.printStackTrace(); throw new DataAccessException("Error encountered while finding person"); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } } /** * Returns a list of all events associated with a given person * @param personID * @return a list of event objects associated with a given User */ public List findEventsForPerson(String personID) throws DataAccessException { List eventList = new ArrayList<>(); Event event; ResultSet rs = null; String sql = "SELECT * FROM Events WHERE personID = ?;"; try (PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, personID); rs = stmt.executeQuery(); while (rs.next()) { event = new Event(rs.getString("eventID"), rs.getString("associatedUsername"), rs.getString("personID"), rs.getFloat("latitude"), rs.getFloat("longitude"), rs.getString("country"), rs.getString("city"), rs.getString("eventType"), rs.getInt("year")); eventList.add(event); } return eventList; } catch (SQLException e) { e.printStackTrace(); throw new DataAccessException("Error encountered while finding person"); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } } /** * Removes all events associated with a user */ public void removeUserEvents(String username) throws DataAccessException { String sql = "DELETE FROM Events WHERE associatedUsername = ?;"; try(PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, username); stmt.executeUpdate(); } catch(SQLException e) { e.printStackTrace(); throw new DataAccessException("Error encountered while deleting user's events from the database"); } } /** * Removes all events associated with a person */ public void removePersonEvents(String personID) throws DataAccessException { String sql = "DELETE FROM Events WHERE personID = ?;"; try(PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, personID); stmt.executeUpdate(); } catch(SQLException e) { e.printStackTrace(); throw new DataAccessException("Error encountered while deleting person's events from the database"); } } /** * Removes every event from the database */ public void removeAllEvents() throws DataAccessException { String sql = "DELETE FROM Events"; try(PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.executeUpdate(); } catch(SQLException e) { e.printStackTrace(); throw new DataAccessException("Error encountered while deleting from the database"); } } }