package server.events; import database.DatabaseConnection; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import server.Randomizer; import tools.Pair; public class MapleOxQuizFactory { private final Map<Pair<Integer, Integer>, MapleOxQuizEntry> questionCache = new HashMap(); private static final MapleOxQuizFactory instance = new MapleOxQuizFactory(); public MapleOxQuizFactory() { initialize(); } public static MapleOxQuizFactory getInstance() { return instance; } public Map.Entry<Pair<Integer, Integer>, MapleOxQuizEntry> grabRandomQuestion() { int size = this.questionCache.size(); while (true) { for (Map.Entry oxquiz : this.questionCache.entrySet()) { if (Randomizer.nextInt(size) == 0) { return oxquiz; } } } } private void initialize() { try { Connection con = DatabaseConnection.getConnection(); try (PreparedStatement ps = con.prepareStatement("SELECT * FROM wz_oxdata"); ResultSet rs = ps.executeQuery()) { while (rs.next()) { this.questionCache.put(new Pair(rs.getInt("questionset"), rs.getInt("questionid")), get(rs)); } ps.close(); } } catch (SQLException e) { e.printStackTrace(); } } private MapleOxQuizEntry get(ResultSet rs) throws SQLException { return new MapleOxQuizEntry(rs.getString("question"), rs.getString("display"), getAnswerByText(rs.getString("answer")), rs.getInt("questionset"), rs.getInt("questionid")); } private int getAnswerByText(String text) { if (text.equalsIgnoreCase("x")) { return 0; } if (text.equalsIgnoreCase("o")) { return 1; } return -1; } public static class MapleOxQuizEntry { private final String question; private final String answerText; private final int answer; private final int questionset; private final int questionid; public MapleOxQuizEntry(String question, String answerText, int answer, int questionset, int questionid) { this.question = question; this.answerText = answerText; this.answer = answer; this.questionset = questionset; this.questionid = questionid; } public String getQuestion() { return this.question; } public String getAnswerText() { return this.answerText; } public int getAnswer() { return this.answer; } public int getQuestionSet() { return this.questionset; } public int getQuestionId() { return this.questionid; } } }