package mediawiki.task.config.nt2; import java.sql.Connection; import java.sql.PreparedStatement; import mediawiki.task.NormdatenTask2.NormdatenTask2Exception; import mediawiki.task.NormdatenTask2.NormdatenTask2ExceptionLevel; public class DatabaseHandler implements NormdatenTask2ErrorHandler { private Connection connection; private int runID; public DatabaseHandler(Connection c, int runID){ setConnection(c); setRunID(runID); } @Override public void handle(NormdatenTask2Exception e) throws Exception { if(e.getLevel() != NormdatenTask2ExceptionLevel.FINAL) { PreparedStatement s = connection.prepareStatement("INSERT INTO problems (article, typ, message, run) VALUES (?,?,?,?)"); s.setString(1, e.getArticle().getTitle()); s.setString(2, e.getType()); s.setString(3, e.getSimpleMessage()); s.setInt(4, getRunID()); s.executeUpdate(); s.closeOnCompletion(); } PreparedStatement s = connection.prepareStatement("DELETE FROM problems WHERE article = ? AND `timestamp` < NOW() AND run != ? AND (SELECT project FROM tasks WHERE tasks.ID = (SELECT task FROM runs WHERE runs.ID = problems.run)) = (SELECT project FROM tasks WHERE tasks.ID = (SELECT task FROM runs WHERE runs.ID = ?))"); s.setString(1, e.getArticle().getTitle()); s.setInt(2, getRunID()); s.setInt(3, getRunID()); s.executeUpdate(); s.closeOnCompletion(); } @Override public boolean accept(NormdatenTask2Exception e) { switch(e.getLevel()){ case INFO: case EXTERNAL: return false; case FINAL: case PROBLEM: case INTERNAL: return true; } return false; } public Connection getConnection() { return connection; } public void setConnection(Connection connection) { this.connection = connection; } public int getRunID() { return runID; } public void setRunID(int runID) { this.runID = runID; } }