diff --git a/docs/diagrams/src/anyreport.puml b/docs/diagrams/src/anyreport.puml index 001d23a..53c595b 100644 --- a/docs/diagrams/src/anyreport.puml +++ b/docs/diagrams/src/anyreport.puml @@ -6,6 +6,7 @@ package moodle-anyreport{ class App{ - accessPane : AccessPane - tagPane : TagPane + - dataPane : DataPane - reportPane : ReportPane } 'панель подключения к базе данных @@ -16,10 +17,12 @@ package moodle-anyreport{ BasePane --> App 'панель управления тегами для формирования выборки пользователей class TagPane{} - TagPane --> App + TagPane --> DataPane 'панель отображения отчета по выборке + class DataPane{} + DataPane -->App class ReportPane{} - ReportPane -->App + ReportPane --> App /'методы обработки действий пользователя клики мыши, нажатия клавишь, итд. @@ -40,7 +43,7 @@ package moodle-anyreport{ + getXLSXReport() : void + getTextReport() : void } - ReportControls --> ReportPane + ReportControls --> DataPane 'модель данных для текстового отчета class ReportTextModel{ @@ -61,7 +64,7 @@ package moodle-anyreport{ ReportXLSXModel --> ReportControls 'модель данных для отображения в gui class ReportTableModel{} - ReportTableModel --> ReportControls + DataTableModel --> ReportControls /'Общий инструментарий работы с базой данных '/ @@ -106,7 +109,7 @@ package moodle-anyreport{ } Data --> ReportTextModel Data --> ReportXLSXModel - Data --> ReportTableModel + Data --> DataTableModel /'формирование перечня пользователей - на основании тегов diff --git a/src/main/java/ru/egspt/App.java b/src/main/java/ru/egspt/App.java index 353af4a..3bc4719 100644 --- a/src/main/java/ru/egspt/App.java +++ b/src/main/java/ru/egspt/App.java @@ -13,15 +13,16 @@ public class App extends JPanel{ private Base base = new Base(); private Data data = new Data(); private TagModel tagModel = new TagModel(); + private TagPane tagPane = new TagPane(this); + private DataPane dataPane = new DataPane(this); private ReportPane reportPane = new ReportPane(this); private AccessPane accessPane = new AccessPane(this); - private TagPane tagPane = new TagPane(this); public void init(){ this.setLayout(new BorderLayout()); this.add(getAccessPane(), BorderLayout.NORTH); - this.add(getTagPane(), BorderLayout.SOUTH); - this.add(getReportPane(), BorderLayout.CENTER); + this.add(getDataPane(), BorderLayout.CENTER); + this.add(getReportPane(), BorderLayout.SOUTH); this.setVisible(true); } public void initFrame(){ @@ -55,6 +56,12 @@ public class App extends JPanel{ public AccessPane getAccessPane() { return accessPane; } + /** + * @return the dataPane + */ + public DataPane getDataPane() { + return dataPane; + } /** * @return the reportPane */ diff --git a/src/main/java/ru/egspt/BaseControls.java b/src/main/java/ru/egspt/BaseControls.java index 505d819..ee8d108 100644 --- a/src/main/java/ru/egspt/BaseControls.java +++ b/src/main/java/ru/egspt/BaseControls.java @@ -15,12 +15,15 @@ public class BaseControls { app.getData().setUsers(app.getData().getUsersFromBase(app.getBase())); app.getData().setQuizes(app.getData().getQuizesFromBase(app.getBase())); app.getData().setResults(app.getData().getResultsFromBase(app.getBase())); + //данные в панель данных + app.getDataPane().init(); + app.getDataPane().setUsers(app.getData()); + app.getDataPane().setQuizes(app.getData()); + app.getDataPane().setResults(app.getData()); + app.getDataPane().setVisible(true); //данные в панель отчетов app.getReportPane().init(); - app.getReportPane().setUsers(app.getData()); - app.getReportPane().setQuizes(app.getData()); - app.getReportPane().setResults(app.getData()); - app.getReportPane().setVisible(true); + app.getReportPane().setReportData(app.getData()); } diff --git a/src/main/java/ru/egspt/DataPane.java b/src/main/java/ru/egspt/DataPane.java new file mode 100644 index 0000000..a7a183d --- /dev/null +++ b/src/main/java/ru/egspt/DataPane.java @@ -0,0 +1,130 @@ +package ru.egspt; + +import java.awt.Color; +import java.awt.BorderLayout; + +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.border.LineBorder; +import javax.swing.border.TitledBorder; + +public class DataPane extends JPanel{ + private JPanel controlPane = new JPanel();//панель кнопок - пока не надо + private JButton generateXLSXButton = new JButton("create xlsx"); + private JButton generateTXTButton = new JButton("create txt"); + private JPanel usersPane = new JPanel();//панель пользователей + private JPanel quizesPane = new JPanel();//панель опросов + private JPanel resultsPane = new JPanel();//панель результатов + private JTable usersTable; + private JTable quizesTable; + private JTable resultsTable; + private UsersTableModel usersTableModel; + private QuizesTableModel quizesTableModel; + private ResultsTableModel resultsTableModel; + public DataPane(){} + public DataPane(App app){ + setupUsersPane(app); + setupQuizesPane(app); + setupResultsPane(app); + } + public void init(){ + this.setupControlPane(); + this.setLayout(new BorderLayout()); + this.add(controlPane, BorderLayout.NORTH); + this.add(usersPane, BorderLayout.WEST); + this.add(quizesPane, BorderLayout.CENTER); + this.add(resultsPane, BorderLayout.EAST); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "data", TitledBorder.CENTER, TitledBorder.CENTER); + this.setBorder(border); + this.setVisible(true); + } + public void setupControlPane(){ + controlPane.add(generateXLSXButton); + controlPane.add(generateTXTButton); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "ControlPane", TitledBorder.CENTER, TitledBorder.CENTER); + controlPane.setBorder(border); + } + /** + * Настройка панели пользователей + */ + public void setupUsersPane(App app){ + usersTableModel = new UsersTableModel(app.getData()); + usersTable = new JTable(usersTableModel); + //настройка заголовков + int i = 0; + while (i < usersTable.getColumnCount()){ + usersTable.getColumnModel().getColumn(i).setHeaderValue(usersTableModel.getHeader()[i]); + i++; + } + JScrollPane scrollPane = new JScrollPane(usersTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + usersPane.setLayout(new BorderLayout()); + usersPane.add(scrollPane); + usersPane.add(app.getTagPane(), BorderLayout.NORTH);//добавили панель тегов + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "Users", TitledBorder.CENTER, TitledBorder.CENTER); + usersPane.setBorder(border); + } + /** + * Настройка панели опросов + */ + public void setupQuizesPane(App app){ + quizesTableModel = new QuizesTableModel(app.getData()); + quizesTable = new JTable(quizesTableModel); + //настройка заголовков + int i = 0; + while (i < quizesTable.getColumnCount()){ + quizesTable.getColumnModel().getColumn(i).setHeaderValue(quizesTableModel.getHeader()[i]); + i++; + } + JScrollPane scrollPane = new JScrollPane(quizesTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + quizesPane.setLayout(new BorderLayout()); + quizesPane.add(scrollPane, BorderLayout.CENTER); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "Quizes", TitledBorder.CENTER, TitledBorder.CENTER); + quizesPane.setBorder(border); + } + /** + * Настройка панели результатов + */ + public void setupResultsPane(App app){ + resultsTableModel = new ResultsTableModel(app.getData()); + resultsTable = new JTable(resultsTableModel); + //настройка заголовков + int i = 0; + while (i < resultsTable.getColumnCount()){ + resultsTable.getColumnModel().getColumn(i).setHeaderValue(resultsTableModel.getHeader()[i]); + i++; + } + JScrollPane scrollPane = new JScrollPane(resultsTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + resultsPane.setLayout(new BorderLayout()); + resultsPane.add(scrollPane, BorderLayout.CENTER); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "Results", TitledBorder.CENTER, TitledBorder.CENTER); + resultsPane.setBorder(border); + } + public void setQuizes(Data data){ + getQuizesTableModel().setData(data); + } + + public void setUsers(Data data){ + getUsersTableModel().setData(data); + } + public void setResults(Data data){ + getResultsTableModel().setData(data); + } + /** + * @return the tableModel + */ + public UsersTableModel getUsersTableModel() { + return usersTableModel; + } + /** + * @return the quizesTableModel + */ + public QuizesTableModel getQuizesTableModel() { + return quizesTableModel; + } + public ResultsTableModel getResultsTableModel() { + return resultsTableModel; + } + +} diff --git a/src/main/java/ru/egspt/ReportPane.java b/src/main/java/ru/egspt/ReportPane.java index 3dd0e4f..d3e8e5c 100644 --- a/src/main/java/ru/egspt/ReportPane.java +++ b/src/main/java/ru/egspt/ReportPane.java @@ -3,129 +3,58 @@ package ru.egspt; import java.awt.Color; import java.awt.BorderLayout; -import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; -import javax.swing.table.TableColumnModel; -public class ReportPane extends JPanel{ - private JPanel controlPane = new JPanel();//панель кнопок - пока не надо - private JButton generateXLSXButton = new JButton("create xlsx"); - private JButton generateTXTButton = new JButton("create txt"); - private JPanel usersPane = new JPanel();//панель пользователей - private JPanel quizesPane = new JPanel();//панель опросов - private JPanel resultsPane = new JPanel();//панель результатов - private JTable usersTable; - private JTable quizesTable; - private JTable resultsTable; - private UsersTableModel usersTableModel; - private QuizesTableModel quizesTableModel; - private ResultsTableModel resultsTableModel; +public class ReportPane extends JPanel { + private JPanel reportTablePane = new JPanel(); + private ReportTableModel reportTableModel; + private JTable reportTable; + private JPanel reportTextPane = new JPanel(); + private JPanel reportSettingsPane = new JPanel(); + public ReportPane(){} public ReportPane(App app){ - setupUsersPane(app); - setupQuizesPane(app); - setupResultsPane(app); + setupReportTablePane(app); } public void init(){ - this.setupControlPane(); this.setLayout(new BorderLayout()); - this.add(controlPane, BorderLayout.NORTH); - this.add(usersPane, BorderLayout.WEST); - this.add(quizesPane, BorderLayout.CENTER); - this.add(resultsPane, BorderLayout.EAST); + this.add(reportTablePane, BorderLayout.NORTH); + //this.add(reportTextPane, BorderLayout.WEST); + //this.add(reportSettingsPane, BorderLayout.CENTER); TitledBorder border = new TitledBorder(new LineBorder(Color.black), "report", TitledBorder.CENTER, TitledBorder.CENTER); this.setBorder(border); this.setVisible(true); } - public void setupControlPane(){ - controlPane.add(generateXLSXButton); - controlPane.add(generateTXTButton); - TitledBorder border = new TitledBorder(new LineBorder(Color.black), "ControlPane", TitledBorder.CENTER, TitledBorder.CENTER); - controlPane.setBorder(border); - } - /** - * Настройка панели пользователей - */ - public void setupUsersPane(App app){ - usersTableModel = new UsersTableModel(app.getData()); - usersTable = new JTable(usersTableModel); - //настройка заголовков - int i = 0; - while (i < usersTable.getColumnCount()){ - usersTable.getColumnModel().getColumn(i).setHeaderValue(usersTableModel.getHeader()[i]); - i++; - } - JScrollPane scrollPane = new JScrollPane(usersTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - usersPane.setLayout(new BorderLayout()); - usersPane.add(scrollPane); - usersPane.add(new TagPane(app), BorderLayout.NORTH); - TitledBorder border = new TitledBorder(new LineBorder(Color.black), "Users", TitledBorder.CENTER, TitledBorder.CENTER); - usersPane.setBorder(border); - } - /** - * Настройка панели опросов - */ - public void setupQuizesPane(App app){ - quizesTableModel = new QuizesTableModel(app.getData()); - quizesTable = new JTable(quizesTableModel); - //настройка заголовков - int i = 0; - while (i < quizesTable.getColumnCount()){ - quizesTable.getColumnModel().getColumn(i).setHeaderValue(quizesTableModel.getHeader()[i]); - i++; - } - JScrollPane scrollPane = new JScrollPane(quizesTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - quizesPane.setLayout(new BorderLayout()); - quizesPane.add(scrollPane, BorderLayout.CENTER); - TitledBorder border = new TitledBorder(new LineBorder(Color.black), "Quizes", TitledBorder.CENTER, TitledBorder.CENTER); - quizesPane.setBorder(border); - } - /** - * Настройка панели результатов - */ - public void setupResultsPane(App app){ - resultsTableModel = new ResultsTableModel(app.getData()); - resultsTable = new JTable(resultsTableModel); + public void setupReportTablePane(App app){ + reportTableModel = new ReportTableModel(app); + reportTable = new JTable(reportTableModel); //настройка заголовков int i = 0; - while (i < resultsTable.getColumnCount()){ - resultsTable.getColumnModel().getColumn(i).setHeaderValue(resultsTableModel.getHeader()[i]); + while (i < reportTable.getColumnCount()){ + reportTable.getColumnModel().getColumn(i).setHeaderValue(reportTableModel.getHeader()[i]); i++; } - JScrollPane scrollPane = new JScrollPane(resultsTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - resultsPane.setLayout(new BorderLayout()); - resultsPane.add(scrollPane, BorderLayout.CENTER); - TitledBorder border = new TitledBorder(new LineBorder(Color.black), "Results", TitledBorder.CENTER, TitledBorder.CENTER); - resultsPane.setBorder(border); - } - public void setQuizes(Data data){ - getQuizesTableModel().setData(data); - } - - public void setUsers(Data data){ - getUsersTableModel().setData(data); - } - public void setResults(Data data){ - getResultsTableModel().setData(data); - } - /** - * @return the tableModel - */ - public UsersTableModel getUsersTableModel() { - return usersTableModel; - } + JScrollPane scrollPane = new JScrollPane(reportTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + reportTablePane.setLayout(new BorderLayout()); + reportTablePane.add(scrollPane); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "report tables", TitledBorder.CENTER, TitledBorder.CENTER); + reportTablePane.setBorder(border); + reportTablePane.setVisible(true); + } + public void setReportData(Data data){ + getReportTableModel().setData(data); + } + public void setupReportTextPane(){} + public void setupReportSettingsPane(){} /** - * @return the quizesTableModel + * @return the reportTableModel */ - public QuizesTableModel getQuizesTableModel() { - return quizesTableModel; - } - public ResultsTableModel getResultsTableModel() { - return resultsTableModel; + public ReportTableModel getReportTableModel() { + return reportTableModel; } } diff --git a/src/main/java/ru/egspt/ReportTableModel.java b/src/main/java/ru/egspt/ReportTableModel.java index ffe18bf..eda1831 100644 --- a/src/main/java/ru/egspt/ReportTableModel.java +++ b/src/main/java/ru/egspt/ReportTableModel.java @@ -3,10 +3,11 @@ package ru.egspt; import javax.swing.table.AbstractTableModel; public class ReportTableModel extends AbstractTableModel{ - private String[] header = {"id", "login", "mail"}; + private String[] header = new String[]{"id", "login", "mail"}; private Object[][] data; - public ReportTableModel(Data data){ - setData(data); + public ReportTableModel(){} + public ReportTableModel(App app){ + setData(app.getData()); } @Override public int getRowCount() { @@ -28,25 +29,41 @@ public class ReportTableModel extends AbstractTableModel{ public Object[][] getData() { return data; } + /** + * Настройка заголовков отчета + * @param data + */ + public void setHeader(Data data){ + /** + * Определение количества заголовков: + * первые три (с нумерацией строк - четыре) заголовка определяются таблицей пользователей и всегда постоянны + * остальные заголовки определяются: + * количеством тестов, в прохождении которых участвовали пользователи, помноженным на + * количество отчетных данных (результат сдачи теста и время потраченное на прохождение теста) + */ + //String[] h = new String[3 + 0]; + // + } /** * */ - public void setData(Data data) { + public void setData(Data report) { //создаем объект data - инициализация переменной - int row = 0; - row = data.getUsers().size(); - int col = 3;//по количеству заголовков - this.data = new Object[row][col]; + this.data = new Object[report.getUsers().size()][3]; //заполняем модель данными пользователей int i = 0; - while (i < data.getUsers().size()){ - this.data[i][0] = data.getUsers().get(i).getId(); - this.data[i][1] = data.getUsers().get(i).getLogin(); - this.data[i][2] = data.getUsers().get(i).getMail(); + while (i < report.getUsers().size()){ + this.data[i][0] = report.getUsers().get(i).getId(); + this.data[i][1] = report.getUsers().get(i).getLogin(); + this.data[i][2] = report.getUsers().get(i).getMail(); i++; this.fireTableDataChanged(); } } + + public void setData(Object[][] data){ + this.data = data; + } /** * @return the header */ diff --git a/src/main/java/ru/egspt/TagControls.java b/src/main/java/ru/egspt/TagControls.java index 1ca413d..d2f645c 100644 --- a/src/main/java/ru/egspt/TagControls.java +++ b/src/main/java/ru/egspt/TagControls.java @@ -9,10 +9,13 @@ public class TagControls { app.getTagPane().updateTagArea(app.getTagModel()); app.getTagPane().getCurrentTagField().setText(""); //Выводим пользователей в отчет - Data data = new Data(); - data.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); - app.getReportPane().setUsers(data); - app.getReportPane().getUsersTableModel().fireTableDataChanged(); + Data report = new Data(); + report.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); + report.setResults(app.getData().getResults()); + report.setQuizes(app.getData().getQuizes()); + //report.setHeaders(); + app.getReportPane().setReportData(report); + app.getReportPane().getReportTableModel().fireTableDataChanged(); } //удаляем тег из модели public static void removeTag(App app){ @@ -25,7 +28,9 @@ public class TagControls { //Выводим пользователей в отчет Data data = new Data(); data.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); - app.getReportPane().setUsers(data); - app.getReportPane().getUsersTableModel().fireTableDataChanged(); + //app.getDataPane().setUsers(data); + //app.getDataPane().getUsersTableModel().fireTableDataChanged(); + app.getReportPane().setReportData(data); + app.getReportPane().getReportTableModel().fireTableDataChanged(); } } diff --git a/target/classes/ru/egspt/App.class b/target/classes/ru/egspt/App.class index 8d92cca..2386238 100644 Binary files a/target/classes/ru/egspt/App.class and b/target/classes/ru/egspt/App.class differ diff --git a/target/classes/ru/egspt/BaseControls.class b/target/classes/ru/egspt/BaseControls.class index 46a6805..ae97920 100644 Binary files a/target/classes/ru/egspt/BaseControls.class and b/target/classes/ru/egspt/BaseControls.class differ diff --git a/target/classes/ru/egspt/DataPane.class b/target/classes/ru/egspt/DataPane.class new file mode 100644 index 0000000..4c9c13a Binary files /dev/null and b/target/classes/ru/egspt/DataPane.class differ diff --git a/target/classes/ru/egspt/ReportPane.class b/target/classes/ru/egspt/ReportPane.class index 79880c5..05c1e9b 100644 Binary files a/target/classes/ru/egspt/ReportPane.class and b/target/classes/ru/egspt/ReportPane.class differ diff --git a/target/classes/ru/egspt/ReportTableModel.class b/target/classes/ru/egspt/ReportTableModel.class index 0710ca6..08a90e3 100644 Binary files a/target/classes/ru/egspt/ReportTableModel.class and b/target/classes/ru/egspt/ReportTableModel.class differ diff --git a/target/classes/ru/egspt/TagControls.class b/target/classes/ru/egspt/TagControls.class index 1951a62..7e5755b 100644 Binary files a/target/classes/ru/egspt/TagControls.class and b/target/classes/ru/egspt/TagControls.class differ