import java.sql.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class QuestionManager {
private String DBDriver;
private String DBHost;
private String DBUser;
private String DBPassword;
private ArrayList<Question> questions;
private ArrayList<Question> final_questions;
public QuestionManager(String DB_Driver, String DB_Host, String DB_User, String DB_Password){
DBDriver = DB_Driver;
DBHost = DB_Host;
DBUser = DB_User;
DBPassword = DB_Password;
questions = new ArrayList<>();
final_questions = new ArrayList<>();
refresh_questions();
}
public void refresh_questions(){
Connection con = null;
try {
Class.forName(DBDriver);
} catch (ClassNotFoundException exc) {
System.out.println("Exception in QuestionManager constructor (driver)" + exc);
}
try {
con = DriverManager.getConnection(DBHost, DBUser, DBPassword);
Statement st = con.createStatement();
ResultSet quest = st.executeQuery("select * from questions");
while (quest.next()) {
Question result = new Question();
result.id = quest.getInt(1);
result.quest = quest.getString(2);
for (int j = 3; j <= quest.getMetaData().getColumnCount(); j++) {
if (result.answers.size() == j - 3) {
result.answers.add("");
}
result.answers.set(j - 3, quest.getString(j));
}
result.correct = 0;
questions.add(result);
} //взяли и распарсили обычные вопросы
st = con.createStatement();
quest = st.executeQuery("select * from final");
while (quest.next()) {
Question result = new Question();
result.id = quest.getInt(1);
result.quest = quest.getString(2);
for (int j = 3; j <= quest.getMetaData().getColumnCount(); j++) {
if (result.answers.size() == j - 3) {
result.answers.add("");
}
result.answers.set(j - 3, quest.getString(j));
}
result.correct = 0;
final_questions.add(result);
}
//взяли и распарсили финальные вопросы
} catch(Exception exc){
System.out.println("Exception in QuestionManager constructor (connection)" + exc);
}
try {
if (con != null)
con.close();
} catch (SQLException exc) {
System.out.println("Exception in QuestionManager close connection" + exc);
}
}
public ArrayList<Question> getQuestions(){
return questions;
}
public ArrayList<Question> get_questions(int number){
ArrayList<Question> result = new ArrayList<>();
while(number > 0){
ArrayList<Integer> order = new ArrayList<>();
for (int j = 0; j < questions.size(); j++) { //order = [1,2,3..n]
order.add(j);
}
long seed = System.nanoTime();
Collections.shuffle(order, new Random(seed)); //order теперь случайная перестановка
for(int i = 0; i < Math.min(number, order.size()); i++){
result.add(shuffle_answers(questions.get(order.get(i)))); // заполнили result вопросами в порядке из order
}
order.clear();
number -= questions.size();
}
return result;
}
public ArrayList<Question> get_final_questions(int number){
ArrayList<Question> result = new ArrayList<>();
while(number > 0){
ArrayList<Integer> order = new ArrayList<>();
for (int j = 0; j < final_questions.size(); j++) {
order.add(j);
}
long seed = System.nanoTime();
Collections.shuffle(order, new Random(seed));
for(int i = 0; i < Math.min(number, order.size()); i++){
result.add(shuffle_answers(final_questions.get(order.get(i))));
}
order.clear();
number -= final_questions.size();
}
return result;
}
public Question shuffle_answers(Question quest){ //перемешивание ответов в вопросе
ArrayList<Integer> order = new ArrayList<Integer>();
for (int j = 0; j < quest.answers.size(); j++) {
order.add(j);
}
long seed = System.nanoTime();
Collections.shuffle(order, new Random(seed));
Collections.shuffle(quest.answers, new Random(seed));
quest.correct = order.indexOf(quest.correct);
order.clear();
return quest;
}
}