|
|
|
package ru.egspt;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import javax.swing.table.AbstractTableModel;
|
|
|
|
|
|
|
|
public class ReportTableModel extends AbstractTableModel{
|
|
|
|
private Object[] header;
|
|
|
|
private Object[][] data;
|
|
|
|
//создаем модель без данных
|
|
|
|
public ReportTableModel(){}
|
|
|
|
public ReportTableModel(Object[] header, Object[][] data){
|
|
|
|
setHeader(header);
|
|
|
|
setData(data);
|
|
|
|
}
|
|
|
|
//создаем модель по данным Data
|
|
|
|
public ReportTableModel(Data data){
|
|
|
|
setHeader(getHeaderByQuize(data));
|
|
|
|
setData(data);
|
|
|
|
}
|
|
|
|
//создаем модель по данным предварительно переданным в App
|
|
|
|
public ReportTableModel(App app){
|
|
|
|
setHeader(getHeaderByQuize(app.getData()));
|
|
|
|
setData(app.getData());
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public int getRowCount() {
|
|
|
|
return getData().length;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getColumnCount() {
|
|
|
|
return getHeader().length;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Object getValueAt(int rowIndex, int columnIndex) {
|
|
|
|
return getData()[rowIndex][columnIndex];
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* @param header the header to set
|
|
|
|
*/
|
|
|
|
public void setHeader(Object[] header) {
|
|
|
|
this.header = header;
|
|
|
|
fireTableDataChanged();
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Настройка заголовков отчета
|
|
|
|
* @param data
|
|
|
|
*/
|
|
|
|
public Object[] getHeaderByQuize(Data report){
|
|
|
|
/**
|
|
|
|
* Определение количества заголовков:
|
|
|
|
* первые три заголовка определяются таблицей пользователей и всегда постоянны
|
|
|
|
* остальные заголовки определяются:
|
|
|
|
* количеством тестов, в прохождении которых участвовали пользователи, помноженным на
|
|
|
|
* количество отчетных данных (результат сдачи теста и время потраченное на прохождение теста)
|
|
|
|
*/
|
|
|
|
ArrayList<Object> header = new ArrayList<Object>();
|
|
|
|
header.add("id");
|
|
|
|
header.add("login");
|
|
|
|
header.add("mail");
|
|
|
|
//заголовки по названиям опросов
|
|
|
|
int i = 0;
|
|
|
|
while (i < report.getQuizes().size()){
|
|
|
|
header.add(report.getQuizes().get(i).getName());
|
|
|
|
//System.out.println("Пишем заголовок: " + report.getQuizes().get(i).getName());
|
|
|
|
header.add("");
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
return header.toArray();
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* @return the header
|
|
|
|
*/
|
|
|
|
public Object[] getHeader() {
|
|
|
|
return header;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public void setData(Object[][] data){
|
|
|
|
this.data = data;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public void setData(Data report) {
|
|
|
|
//создаем объект data - инициализация переменной
|
|
|
|
Object[][] d = new Object[report.getUsers().size()][3 + 2*report.getQuizes().size()];
|
|
|
|
System.out.println("Количество столбцов Object[][] d: " + (3 + 2*report.getQuizes().size()));
|
|
|
|
System.out.println("Количество строк Object[][] d: " + report.getUsers().size());
|
|
|
|
//построчно заполняем модель отчета данными
|
|
|
|
int userCurr = 0;
|
|
|
|
while (userCurr < report.getUsers().size()){
|
|
|
|
ArrayList<Object> string = new ArrayList<>();//новая строка отчета
|
|
|
|
//пишем данные пользователя (первые три столбца)
|
|
|
|
string.add(report.getUsers().get(userCurr).getId());
|
|
|
|
string.add(report.getUsers().get(userCurr).getLogin());
|
|
|
|
string.add(report.getUsers().get(userCurr).getMail());
|
|
|
|
Boolean find = false;
|
|
|
|
//перебираем остальные заголовки (перечень опросов)
|
|
|
|
int quizCurr = 0;
|
|
|
|
while (quizCurr < report.getQuizes().size()){
|
|
|
|
|
|
|
|
if (find == false){
|
|
|
|
//перебираем результаты, ищем результаты по текущему опросу
|
|
|
|
int resultCurr = 0;
|
|
|
|
while (resultCurr < report.getResults().size()){
|
|
|
|
//если текущий результат относится к текущему опросу:
|
|
|
|
if (report.getResults().get(resultCurr).getQuizid() == report.getQuizes().get(quizCurr).getId()){
|
|
|
|
//если текущий результат относится к текущему пользователю
|
|
|
|
if (report.getResults().get(resultCurr).getUserid() == report.getUsers().get(userCurr).getId()){
|
|
|
|
string.add(report.getResults().get(resultCurr).getGrade());
|
|
|
|
string.add(report.getResults().get(resultCurr).getTime());
|
|
|
|
find = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
resultCurr++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
string.add("");
|
|
|
|
string.add("");
|
|
|
|
find = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
quizCurr++;
|
|
|
|
}
|
|
|
|
//пишем строку в d
|
|
|
|
int j = 0;
|
|
|
|
while (j < string.size()){
|
|
|
|
//while (j < 3){
|
|
|
|
d[userCurr][j] = string.toArray()[j];
|
|
|
|
j++;
|
|
|
|
}
|
|
|
|
|
|
|
|
userCurr++;
|
|
|
|
}
|
|
|
|
this.data = d;
|
|
|
|
fireTableDataChanged();
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* @return the data
|
|
|
|
*/
|
|
|
|
public Object[][] getData() {
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
}
|