package me.desht.chesscraft.results; import chesspresso.Chess; import me.desht.chesscraft.ChessCraft; import me.desht.chesscraft.chess.ChessGame; import me.desht.chesscraft.enums.GameResult; import me.desht.dhutils.Debugger; import me.desht.dhutils.LogUtils; import java.sql.*; public class ResultEntry implements DatabaseSavable { private final String playerWhite, playerBlack; private final String gameName; private final long startTime, endTime; private final GameResult result; private final String pgnResult; private final String pgnData; ResultEntry(ChessGame game, GameResult rt) { playerWhite = game.getPlayer(Chess.WHITE).getResultsName(); playerBlack = game.getPlayer(Chess.BLACK).getResultsName(); gameName = game.getName(); startTime = game.getStarted(); endTime = game.getFinished(); result = rt; pgnResult = game.getPGNResult(); pgnData = ChessCraft.getInstance().getConfig().getBoolean("results.pgn_db") ? game.getPGN() : null; } ResultEntry(String plw, String plb, String gn, long start, long end, String pgnRes, GameResult rt) { playerWhite = plw; playerBlack = plb; gameName = gn; startTime = start; endTime = end; result = rt; pgnResult = pgnRes; pgnData = null; } ResultEntry(ResultSet rs) throws SQLException { playerWhite = rs.getString("playerwhite"); playerBlack = rs.getString("playerBlack"); gameName = rs.getString("gameName"); startTime = rs.getDate("startTime").getTime(); endTime = rs.getDate("endTime").getTime(); result = GameResult.valueOf(rs.getString("result")); pgnResult = rs.getString("pgnResult"); pgnData = null; } public String getPlayerWhite() { return playerWhite; } public String getPlayerBlack() { return playerBlack; } public String getGameName() { return gameName; } public long getStartTime() { return startTime; } public long getEndTime() { return endTime; } public GameResult getResult() { return result; } public String getPgnResult() { return pgnResult; } public String getWinner() { if (pgnResult.equals("1-0")) { return playerWhite; } else if (pgnResult.equals("0-1")) { return playerBlack; } else { return null; } } public String getLoser() { if (pgnResult.equals("1-0")) { return playerBlack; } else if (pgnResult.equals("0-1")) { return playerWhite; } else { return null; } } public void saveToDatabase(Connection connection) throws SQLException { String tableName = Results.getResultsHandler().getTableName("results"); PreparedStatement stmt = connection.prepareStatement( "INSERT INTO " + tableName + " (playerWhite, playerBlack, gameName, startTime, endTime, result, pgnResult)" + " VALUES (?, ?, ?, ?, ?, ?, ?)", PreparedStatement.RETURN_GENERATED_KEYS); stmt.setString(1, playerWhite); stmt.setString(2, playerBlack); stmt.setString(3, gameName); stmt.setTimestamp(4, new Timestamp(startTime)); stmt.setTimestamp(5, new Timestamp(endTime)); stmt.setString(6, result.toString()); stmt.setString(7, pgnResult); Debugger.getInstance().debug("execute SQL: " + stmt); int inserted = stmt.executeUpdate(); if (inserted != 1) { LogUtils.warning("SQL insertion in '" + tableName + "' returned " + inserted + " rows - expected 1"); } if (pgnData == null) { return; } ResultSet rs = stmt.getGeneratedKeys(); if (rs.next()) { int rowId = rs.getInt(1); if (rowId != -1 && pgnData != null) { tableName = Results.getResultsHandler().getTableName("pgn"); PreparedStatement pgnStmt = connection.prepareStatement("INSERT INTO " + tableName + " VALUES(?,?)"); pgnStmt.setInt(1, rowId); pgnStmt.setString(2, pgnData); Debugger.getInstance().debug("execute SQL: " + pgnStmt); inserted = pgnStmt.executeUpdate(); if (inserted != 1) { LogUtils.warning("SQL insertion in '" + tableName + "' returned " + inserted + " rows - expected 1"); } } } else { LogUtils.warning("can't get generated key for SQL insert, aux tables will not be updated"); } } }