package regexgolf2.services.persistence.mappers;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import regexgolf2.model.Requirement;
import regexgolf2.services.persistence.database.Database;
import com.google.java.contract.Ensures;
import com.google.java.contract.Requires;
public class RequirementMapper
{
private final Database _db;
@Requires("db != null")
public RequirementMapper(Database db)
{
_db = db;
}
@Ensures("result != null")
public List<Requirement> getAllFor(int challengeId) throws SQLException
{
List<Requirement> requirements = new ArrayList<>();
String sql = "SELECT expectedMatchResult, word FROM requirements WHERE challenge = ?;";
PreparedStatement ps = _db.getConnection().prepareStatement(sql);
ps.setInt(1, challengeId);
ResultSet rs = ps.executeQuery();
while(rs.next())
{
Requirement r = new Requirement(rs.getBoolean(1), rs.getString(2));
requirements.add(r);
}
ps.close();
return requirements;
}
@Requires("requirements != null")
public void insert(Collection<Requirement> requirements, int challengeId) throws SQLException
{
String requirementSQL = "INSERT INTO requirements (challenge, expectedMatchResult, word) VALUES (?, ?, ?);";
PreparedStatement requirementPS = _db.getConnection().prepareStatement(requirementSQL);
for (Requirement requirement : requirements)
{
requirementPS.setInt(1, challengeId);
requirementPS.setBoolean(2, requirement.getExpectedMatchResult());
requirementPS.setString(3, requirement.getWord());
requirementPS.execute();
}
requirementPS.close();
}
public void delete(int challengeId) throws SQLException
{
String sql = "DELETE FROM requirements WHERE challenge = ?";
PreparedStatement ps = _db.getConnection().prepareStatement(sql);
ps.setInt(1, challengeId);
ps.execute();
ps.close();
}
}