Family-Map-Project / FamilyMapServer / FamilyMapServerStudent-master / src / dao / EventDAO.java
EventDAO.java
Raw
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<Event> findEventsForUser(String username) throws DataAccessException
    {
        List<Event> 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<Event> findEventsForPerson(String personID) throws DataAccessException
    {
        List<Event> 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");
        }
    }
}