diff options
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/gitorious/GitoriousRepositoryDao.java')
-rw-r--r-- | src/main/java/io/trygvis/esper/testing/gitorious/GitoriousRepositoryDao.java | 65 |
1 files changed, 42 insertions, 23 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousRepositoryDao.java b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousRepositoryDao.java index 5f57441..bcb27de 100644 --- a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousRepositoryDao.java +++ b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousRepositoryDao.java @@ -1,43 +1,67 @@ package io.trygvis.esper.testing.gitorious; +import fj.data.*; + import java.net.*; import java.sql.*; import java.util.*; +import java.util.Date; +import java.util.List; public class GitoriousRepositoryDao extends Dao { public GitoriousRepositoryDao(Connection c) throws SQLException { super(c); } + private static final String ALL_FIELDS = "project_slug, name, atom_feed, last_update, last_successful_update"; + + private List<GitoriousRepository> executeQuery(PreparedStatement statement) throws SQLException { + try (ResultSet rs = statement.executeQuery()) { + List<GitoriousRepository> list = new ArrayList<>(); + + while (rs.next()) { + list.add(new GitoriousRepository( + rs.getString(1), + rs.getString(2), + URI.create(rs.getString(3)), + Option.fromNull(rs.getTimestamp(4)).map(timestampToDate), + Option.fromNull(rs.getTimestamp(5)).map(timestampToDate))); + } + + return list; + } + } + private final PreparedStatement countRepositories = prepareStatement("SELECT count(*) FROM gitorious_repository WHERE project_slug=? and name=?"); - public int countRepositories(GitoriousRepository repository) throws SQLException { - countRepositories.setString(1, repository.projectSlug); - countRepositories.setString(2, repository.name); + public int countRepositories(String projectSlug, String name) throws SQLException { + countRepositories.setString(1, projectSlug); + countRepositories.setString(2, name); try (ResultSet rs = countRepositories.executeQuery()) { rs.next(); return rs.getInt(1); } } - private final PreparedStatement selectForProject = prepareStatement("SELECT project_slug, name FROM gitorious_repository WHERE project_slug=?"); + private final PreparedStatement selectForProject = prepareStatement("SELECT " + ALL_FIELDS + " FROM gitorious_repository WHERE project_slug=?"); public List<GitoriousRepository> selectForProject(String projectSlug) throws SQLException { selectForProject.setString(1, projectSlug); return executeQuery(selectForProject); } - private final PreparedStatement selectAll = prepareStatement("SELECT project_slug, name FROM gitorious_repository"); + private final PreparedStatement select = prepareStatement("SELECT " + ALL_FIELDS + " FROM gitorious_repository"); - public List<GitoriousRepository> selectAll() throws SQLException { - return executeQuery(selectAll); + public List<GitoriousRepository> select() throws SQLException { + return executeQuery(select); } - private final PreparedStatement insertRepository = prepareStatement("INSERT INTO gitorious_repository(project_slug, name) VALUES(?, ?)"); + private final PreparedStatement insertRepository = prepareStatement("INSERT INTO gitorious_repository(project_slug, name, atom_feed) VALUES(?, ?, ?)"); - public void insertRepository(GitoriousRepository repository) throws SQLException { - insertRepository.setString(1, repository.projectSlug); - insertRepository.setString(2, repository.name); + public void insertRepository(String projectSlug, String name, URI atomFeed) throws SQLException { + insertRepository.setString(1, projectSlug); + insertRepository.setString(2, name); + insertRepository.setString(3, atomFeed.toASCIIString()); insertRepository.executeUpdate(); } @@ -56,18 +80,13 @@ public class GitoriousRepositoryDao extends Dao { deleteForProject.executeUpdate(); } - private List<GitoriousRepository> executeQuery(PreparedStatement statement) throws SQLException { - try (ResultSet rs = statement.executeQuery()) { - List<GitoriousRepository> list = new ArrayList<>(); - - while (rs.next()) { - list.add(new GitoriousRepository( - rs.getString(1), - rs.getString(2) - )); - } + private final PreparedStatement updateTimestamp = prepareStatement("UPDATE gitorious_repository SET last_update=?, last_successful_update=? WHERE project_slug=? AND name=?"); - return list; - } + public void updateTimestamp(String projectName, String slug, Timestamp lastUpdate, Option<Date> lastSuccessfulUpdate) throws SQLException { + updateTimestamp.setTimestamp(1, lastUpdate); + updateTimestamp.setTimestamp(2, lastSuccessfulUpdate.map(dateToTimestamp).toNull()); + updateTimestamp.setString(3, slug); + updateTimestamp.setString(4, projectName); + updateTimestamp.executeUpdate(); } } |