From 24d90ffe96fe7e047b455dc49b52ee7ceaefc678 Mon Sep 17 00:00:00 2001 From: esoe Date: Thu, 19 May 2022 17:03:42 +0300 Subject: [PATCH] qq --- docs/diagrams/src/anyreport.puml | 13 +- src/main/java/ru/egspt/App.java | 13 +- src/main/java/ru/egspt/BaseControls.java | 11 +- src/main/java/ru/egspt/DataPane.java | 130 +++++++++++++++++ src/main/java/ru/egspt/ReportPane.java | 133 ++++-------------- src/main/java/ru/egspt/ReportTableModel.java | 41 ++++-- src/main/java/ru/egspt/TagControls.java | 17 ++- target/classes/ru/egspt/App.class | Bin 2606 -> 2800 bytes target/classes/ru/egspt/BaseControls.class | Bin 2217 -> 2345 bytes target/classes/ru/egspt/DataPane.class | Bin 0 -> 4823 bytes target/classes/ru/egspt/ReportPane.class | Bin 4828 -> 2876 bytes .../classes/ru/egspt/ReportTableModel.class | Bin 1876 -> 2180 bytes target/classes/ru/egspt/TagControls.class | Bin 1624 -> 1772 bytes 13 files changed, 226 insertions(+), 132 deletions(-) create mode 100644 src/main/java/ru/egspt/DataPane.java create mode 100644 target/classes/ru/egspt/DataPane.class 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 8d92cca15f63bc16ecb0f5ff81d8403e09fa9b92..2386238263bb0c336a1df55c295befa97f4568c9 100644 GIT binary patch literal 2800 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 diff --git a/target/classes/ru/egspt/BaseControls.class b/target/classes/ru/egspt/BaseControls.class index 46a68051e2ea2d641d6828a14d9c6a697b5d3224..ae979208ce509e921ac76d519a883963d1457e44 100644 GIT binary patch delta 370 zcmY+9xl03K5XFC+Yt3fW910>rv@=18g<7apP;5lRRz$W~(rHN6!UMEX@QTOheG4`z zW3fdF!B+Gi(Eml8H6B>ZH}lPVZ{AEfR*oCbAJs>om%ED59UO|}Y-iYVtO;w@)@bfb zjTPoIcCMIrGC%D>gGH8gmNa7jK(!FG41*+_CR=Q)zF=2>$z$$nBz~Ebc7Cqlc=HWP z?3*00s!?CGof_iVsJGyZcA*ABqk$`vYqb_y4^QJKAe+9bCcTZ{cseEK*=ToWtggK*8FkP5gK{UzH o2cq$FmlkpBak>0+YY+u;bRF%Y>iBXqJx!eGx1Gj~P<-5e0{2!_pa1{> delta 228 zcmYL?J!%4R5XFDHy8qSnBdY|#s*urM!_vX#xZS&ilcm6w^fEufvS8?Rx1g1ydU5>ZWVWWNq4UN%JdL z^O|^r;$@Ih4x$gf_*V7Eh9N&#l$kS9vT5+nSSd!52@mSI r`q@y&((Ui@^V5)G5K;}9-&?YpfF}|>YpTS5TRO@_ZJvsS9&MI4${Hxb diff --git a/target/classes/ru/egspt/DataPane.class b/target/classes/ru/egspt/DataPane.class new file mode 100644 index 0000000000000000000000000000000000000000..4c9c13a888c5bf7d507bb6a8ce809961fd94e310 GIT binary patch literal 4823 zcmb_f`F~W^75~0$GnrgS2#7!;t6(xQ8B1A&09GQFgh^NuLJ}(al03t}WM-Io0}-v* z3bnLUtCY6dR%#dRUbJR{rdZq3QtaN^-R|vw(NEj&U1sLZWRze0@L}G4_nvd^_k7Rt zPG0-(%dY@fgMa%_W?@b;9dgD}2{&|y?b^HSnBzl*h5AGGQF|hkIu?nIg}UT+)I!Zj zJmx0jQTb|NUU;TVJ2l6gn3J?!XCT}=ur=+v@tB3{3T5>+h3902`v&^5veoI7lT7J5 z0!Px3EEJoj*Pt$gA!C{ zv{mP^W#k+3^1Btz0);u=>x@QYUSp4Tra+}?QzRB~w^%4|YVNmC(Lr1Rl%ql5dMv1h zg&PDaQRTxD3v&zT*X;SROol1xkpHC<(bPl$i?Kp#-^d^|sVIb^He=fBCK=lH=6-2) zm4FX^KbkBAjIul7%9Ef#HT-gQvp@h5PkMaVNg8tN!|@S2 z+HWT#GC*dt!aW#C5qO@2Y|hD4Xv%Njo=6Z`fOoAIxD{(H%uYFOI-#N>GeaJ26lj-6 zwdzO*AbYl1V2eDfQ)h;1ol@m?B0+nFmyv79yfoV(a0eD-RXg$-@57zsP?8?9kGY|( z@#LtJ4BPj`)70CB2C3XB(1jfqs(G(Ivd~~?mr8oC+m6{|PLeMA(QTo!C!TZU%!#?}o*3>NKIDwJ%1kdk*yp5NKlWOv>Y$*L^kW})x7jJz zhd~QVy!kS$(1-dWZqymouK2K@`Bg$l23Lzz<1XCo!vXS_K>s;36KDpPg?D%*8ypdPSgCrqV^cDr5BB8F4WU z!H@5=bhSYre!vfW?v@!}-vBP_Yknkf9p=kxUK6O3*IdS{e*BaLWt4Ph(Pm}W{)NCV z@hdhqa#xI=Dd8ot_?T>7#OngTk%j1E}$r0zyh@8h}Nk3!~ zwaN6vGG0>7p;MqtjxSu5$$>*XIbNtIhYR)OXrZ1QEYy=tLp>RB^<+rYlg&vznG@>C zpz%42H*r+r??S#kjtZ`T9liU4R3+A5j$}M`ZzESVu?aNU!ya~iIaZ4i`XsPo}>5z!z6te z2xhRAJZ&Sz@6KR*F!&-G>%$rJ$W=@I9^-KnjHok-> z${^1&_+;bi3_g9b%#u#<@N>`n?~Q3ZD>cv5&8u5Hg)jAR-I9yXSLIu)@wSEceND#d zLXo@AD|a_mNa2NyhH|(ZGW$2GGF;0@tYgO9ilx}VXl%qL4&}FT-G$A}mn}HRw_2bI<_ZZJ2~qlXFJGQn4EQ!vmSaMCTF|o^=@*uhyM2BG^_Cm?Dg<+EmLi- znr-gqESF#BOFy6vBK#U0@|1gZE>hJ*^;?>;@Vk=ceou366q_5Tx!5(#{kf#MztG%2 zip?cx?#MOFailQLh7?+$l68OT0#mk3m3$SqfuqWd{-{+NCoMSul~A58R(_zQGKY^6 R%2$e&Pn1;tr^5HI{{ylVd657B literal 0 HcmV?d00001 diff --git a/target/classes/ru/egspt/ReportPane.class b/target/classes/ru/egspt/ReportPane.class index 79880c501d9a699711b127f595a728cd37ceca1c..05c1e9ba92c9e9e5143269cef3cc37eda9ad17a1 100644 GIT binary patch literal 2876 zcma)8TXz#x7~LmHn5Ky29w5FvtwYA`dX)~5UnhD8-n~FE; zUA#QVvroRNOVXuX%OBux@Ta)cea;z@Nhsn==FFMzviG;Y@0|Sc_iw)g7{<3j_yjhV zDoJaxTy&CCR?#jwlV-sRA|MdCVqQ0ICd)T+g~jBU+|CQMmz2@8IiI)WmOxkfQM;5t zhsSW-&Pw0jbWLCO@)&n^+v{W9KtMXNUg_mg`D%8fIk|W z5eSShe;9sr8d#4FA&|6z7PQJ$w}Ewfwb_7yR#Hso3f4qrY2GTSv`mt=7tH*OS;|S; z?q(&jC@;)JmioihBOfhb}EA%@qVSoNq9NIB`fakF49S|vhiLqecs zf~sGZ?)wbvN0MbTvsr>B(LyHaq} z`7{~?5pDLCU@Wsxvh#U)kc4p!jufau$=&#J`s?$kd(w|VdBEM21AI#$zNV=zmpTaQ z{%v?mV7(rV?TTwzMjDYnX9WbyAym)SFcC?Ez8<(d_ts||&gi&VoR$s5ca}+?bEi$m zWEXnQMY-c1j2{{J7@u%@St8G|=(bcpTk5e5uVntrz~{It5M(-?D3De8+Ut%g9aGSx zcJ|gTlFgpoOv7yw&e)aGf^{Y*>9lKbQk(r!Gwk3{_<5bSz$dR1u6%Oh)RU8$Z#NT$lU81+(b5DE)9r0E8=lFbpNPXE=UvBzI#o5B&P0R*tM1Zl{(Sfb# z#BRR#aM#cgx!21#nXS*wR%SLI_Y(grTRc%ke?8?^1;48)WjEpkBhzluq207hg6*n2 zoYflLJB%R#944uqq`JFG=J8(;iNveeyNUyIs~DR58N(|$8adw5vV!N+62_@`po%li zShn!)?m;){CD6}veH$;30S}hLE|vuC#_%GGzwX*u= EU+^uH4*&oF literal 4828 zcmb_f`Fm8=8Gdgv$xJ2(69OWb7&gIV(qxoEQV41#Vol5;!Sc*28Nko=8iim2ks@P9mOk@3do%A3h6p`|bPe*>LJ`BsLxHk;_pF z)syj0r-kLci)A{gIqk%pr0qJRy+flr(ykkiS-7%LRxeX{X;yf6bT}(pl}=TCn2+kDlS)V3?3NN6wkM*Cv8Yv=uh!~DNEm(dS(7)=7oU>;UEQ0bW4FYh z1l1mG)p~3h`TD&4E`_r|VX5~xqtTGp7}U-bs8nu`#3JrZ7RsBNM=bcdh%1P4)C*jN zl~u5CjX(t|{aDS|70|EQ3t+7bQ_>;-Yi6UV*&rIRUTR;tr%Ces+f-M%VNI7mgq2eNQLvC#o z=#*PEYD(bR?HRIlQkC0@1nm_bMz$sQ(rlN&tyq~=?aJr8AGZ;`q&;jO zcEda3$tfqb}<3$sVNK19>uQs!9+af#N19#6bB~uJCm+5Gei&eI4L)P-4-glDCi^u*u&MG zcFOf*%))AK#!M*m;o*oIb*8i{e(Yt2l@OBQ)go1RJNEf;H~Gu)&=rrylLGg^rY93o zd-4Fe(;%hCYP&OtaZJiYq+81h+@i8_;9kN`sxB17C}yN=#KI;mn{7n~wFcv5!sK&z zx6Yaa0#O{)VbH=B8vmautrizZ;1H{T(Hn`RBC5Ign#N@{R_e1YtSx9}29cLXI$Msk zjO2Z+paN&JF>LnolU)p8meuP?IBDmA9}ieqnJby1&J@Ihc*u`;S`axA7LUNgc$WqL zwBz1ty9~_IrsjOY%O!$5f}@htdFT7h|DeC-qPw|DI3Oa~K@m^`*edMH& zTUSWskW@dYncUGa3xRhLA!A5UAj%1c4d&?K*Dbw>yB z6uu+_^koaHN~WPMmvYd~S6Q^V3>vnlbt8QSUzY~9$V?mv;5k;fN0YAE%1-?= zfuG|SY-Y@=V)RS`Z@Cq3Gquj)Re@j0((|*`=o0l!sYoNE^1MUdTE`PSlpY3_HZG5tU7+)XlH5lMqaTu#HhBXTL3XRSnCrG?c*(^0bo_zb%8?L!sxqabw+UGtcz zb1Ew4G2JV{?+^Jhh~+&9@%brP_hCKxzLo*rz}ZH$;yQGo34LUL5FzYAiwFIvLElIJ zlSnD_eB7A`JYdjwNVNRFAp>`hnK#RM5xm0&9;J!!{yex9%xe&eKpTyR`FlOuaf1g) zhXK;Y_jDEr-?bWu)lMMN!WmL{WQ?}oF^@;)aGalyjuFuDd7PNT$?_YY#%g|^%-{nJ zFW~Vq$h{0c-mocyPaP|>q!ZkH@`?Yxwt%Ok=E>USwT<)mVn63Cx%hlVezh8Jx%|vn z%RIg&<8`*k$gkYV#U&FD+oe3+*u|91U1 z)?4*tkADCd4%ZnDPm#29hQk-EM&W06Qpn`RO{47(pOqF~kmx05|jK0_^jFXmp4V6${C{}*3 Wq%xl%C6q4~D?eOP`5y}3KmP~W;C=A` diff --git a/target/classes/ru/egspt/ReportTableModel.class b/target/classes/ru/egspt/ReportTableModel.class index 0710ca69ab33352ec26d0dc36b7106f14d09b3af..08a90e378798421f3fc7d1322afd10c19599a3eb 100644 GIT binary patch literal 2180 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 delta 442 zcmaiuyG{a85QhJ=?7FZX1TR?;(L|z&sD#95Wl6lUC?XecsJr2Wh6veRZMC;N?_iI` z78X`kK7kKmXKx&1LSdp7Gn1M5Xa4Uk`pS)$kH;qfD{y+oMkqXtEskyM$cNChy4+i8nprzzSDsrii6 zzyGmaGf+icM~xxzn}*|1-l@x)+O&OJKC9`0bB+dP<-2+vxrYjc@N3f5@;3_sHWvdF zzG{F{fJ%>c3Jl6=gemJ7LIe{unFB`_QRHb-K#Vxz7$k-H{SQYtrY?&NPH+lFR}E4z x`T+D@$tX@?21o`tlegNc_@7~n98F?K5JQq2CW#?M3{%7~{U-y%1-UD*KLNq1SZ@FT