You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
5.1 KiB

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