package regexgolf2.services.persistence.mappers;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import regexgolf2.model.Solution;
import regexgolf2.services.persistence.PersistenceException;
import regexgolf2.services.persistence.database.Database;
import com.google.java.contract.Ensures;
import com.google.java.contract.Requires;
public class SolutionMapper
{
private final Database _db;
@Requires("db != null")
public SolutionMapper(Database db)
{
_db = db;
}
@Ensures("result != null")
public List<SolutionDTO> getAll() throws PersistenceException
{
List<SolutionDTO> solutions = new ArrayList<>();
String sql = "SELECT id, challenge, regex FROM solutions;";
try
{
PreparedStatement ps = _db.getConnection().prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next())
{
SolutionDTO solution = new SolutionDTO();
Solution solutionObj = new Solution();
solution.solution = solutionObj;
solution.challengeId = rs.getInt(2);
solutionObj.trySetSolution(rs.getString(3));
solutions.add(solution);
}
ps.close();
return solutions;
} catch (SQLException ex)
{
throw new PersistenceException(ex);
}
}
public void insert(Solution solution, int challengeId) throws PersistenceException
{
//solution ID is filled by the autoincrement column
String sql = "INSERT INTO solutions (challenge, regex) VALUES (?, ?);";
try
{
PreparedStatement ps = _db.getConnection().prepareStatement(sql);
ps.setInt(1, challengeId);
ps.setString(2, solution.getSolution());
ps.execute();
ps.close();
} catch (SQLException ex)
{
throw new PersistenceException(ex);
}
}
public void update(Solution solution, int challengeId) throws PersistenceException
{
String sql = "UPDATE solutions SET regex = ? WHERE challenge = ?;";
try
{
PreparedStatement ps = _db.getConnection().prepareStatement(sql);
ps.setString(1, solution.getSolution());
ps.setInt(2, challengeId);
ps.execute();
ps.close();
} catch (SQLException ex)
{
throw new PersistenceException(ex);
}
}
public class SolutionDTO
{
public int challengeId;
public Solution solution;
}
}