From c86c89375309de3d343fef7d6f596bbc2e35f850 Mon Sep 17 00:00:00 2001 From: esoe Date: Mon, 16 May 2022 16:26:33 +0300 Subject: [PATCH] reportpane --- src/main/java/ru/egspt/AccessPane.java | 19 ++----- src/main/java/ru/egspt/App.java | 53 +++++++++++++++--- src/main/java/ru/egspt/BaseControls.java | 31 +++++----- src/main/java/ru/egspt/Data.java | 1 - src/main/java/ru/egspt/ReportPane.java | 35 ++++++++---- src/main/java/ru/egspt/ReportTableModel.java | 29 ++++++---- src/main/java/ru/egspt/TagControls.java | 44 ++++++--------- src/main/java/ru/egspt/TagPane.java | 42 ++------------ src/main/java/ru/egspt/UserListModel.java | 2 +- target/classes/ru/egspt/AccessPane.class | Bin 3797 -> 3277 bytes target/classes/ru/egspt/App.class | Bin 1822 -> 2421 bytes target/classes/ru/egspt/BaseControls.class | Bin 1839 -> 2074 bytes target/classes/ru/egspt/ReportPane.class | Bin 1779 -> 2320 bytes .../classes/ru/egspt/ReportTableModel.class | Bin 1778 -> 1876 bytes target/classes/ru/egspt/TagControls.class | Bin 1632 -> 1631 bytes target/classes/ru/egspt/TagPane.class | Bin 5179 -> 3594 bytes target/classes/ru/egspt/UserListModel.class | Bin 3373 -> 3388 bytes 17 files changed, 133 insertions(+), 123 deletions(-) diff --git a/src/main/java/ru/egspt/AccessPane.java b/src/main/java/ru/egspt/AccessPane.java index 4f7d437..a85df15 100644 --- a/src/main/java/ru/egspt/AccessPane.java +++ b/src/main/java/ru/egspt/AccessPane.java @@ -2,11 +2,9 @@ package ru.egspt; import javax.swing.JPanel; import java.awt.Color; import javax.swing.JButton; -import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPasswordField; import javax.swing.JTextField; -import javax.swing.WindowConstants; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; @@ -23,7 +21,7 @@ public class AccessPane extends JPanel { private JButton connButton = new JButton("Подключиться"); private JButton DisconnButton = new JButton("Отключиться"); - public AccessPane(Base base, Data data, ReportPane reportPane){ + public AccessPane(App app){ loginField.setText("esoe");//значения по умолчанию linkField.setText("www.egspt.ru");//значения по умолчанию this.add(loginLabel); @@ -34,16 +32,17 @@ public class AccessPane extends JPanel { this.add(linkField); //настройка кнопки connButton this.add(connButton); - connButton.addActionListener(e -> BaseControls.ConnectToServer(base, data, this, reportPane)); + connButton.addActionListener(e -> BaseControls.ConnectToServer(app)); //настройка кнопки отключения от базы this.add(DisconnButton); - DisconnButton.addActionListener(e -> BaseControls.DisconnectFromServer(base)); + DisconnButton.addActionListener(e -> BaseControls.DisconnectFromServer(app)); TitledBorder border = new TitledBorder(new LineBorder(Color.black), "connection to mysql", TitledBorder.CENTER, TitledBorder.CENTER); this.setBorder(border); //this.setBorder(BorderFactory.createTitledBorder("аккаунт сервера базы данных")); this.setSize(320, 240); this.setVisible(true); } + /** * @return the loginField */ @@ -63,15 +62,7 @@ public class AccessPane extends JPanel { return linkField; } public static void main( String[] args ){ - Base base = new Base(); - //Data data; - System.out.println( "Проверка работоспособности класса Account ..." ); - JFrame mainframe = new JFrame("connaction"); - AccessPane acc = new AccessPane(base); - mainframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - mainframe.add(acc); - mainframe.setSize(320, 240); - mainframe.setVisible(true); + } } diff --git a/src/main/java/ru/egspt/App.java b/src/main/java/ru/egspt/App.java index 8ce63a9..4c308ba 100644 --- a/src/main/java/ru/egspt/App.java +++ b/src/main/java/ru/egspt/App.java @@ -8,16 +8,17 @@ import javax.swing.WindowConstants; * Основной класс сборки приложения */ public class App extends JPanel{ - public Base base = new Base(); - public Data data = new Data(); - public ReportPane rp = new ReportPane(); - public AccessPane ap = new AccessPane(base, data, rp); - public TagPane tp = new TagPane(base, new TagModel()); + private Base base = new Base(); + private Data data = new Data(); + private TagModel tagModel = new TagModel(); + private ReportPane reportPane = new ReportPane(this); + private AccessPane accessPane = new AccessPane(this); + private TagPane tagPane = new TagPane(this); public void init(){ - this.add(ap); - this.add(tp); - this.add(rp); + this.add(getAccessPane()); + this.add(getTagPane()); + this.add(getReportPane()); this.setVisible(true); } public void initFrame(){ @@ -27,6 +28,42 @@ public class App extends JPanel{ mainframe.setSize(640, 480); mainframe.setVisible(true); } + /** + * @return the base + */ + public Base getBase() { + return base; + } + /** + * @return the data + */ + public Data getData() { + return data; + } + /** + * @return the tagModel + */ + public TagModel getTagModel() { + return tagModel; + } + /** + * @return the accessPane + */ + public AccessPane getAccessPane() { + return accessPane; + } + /** + * @return the reportPane + */ + public ReportPane getReportPane() { + return reportPane; + } + /** + * @return the tagPane + */ + public TagPane getTagPane() { + return tagPane; + } public static void main( String[] args ) { System.out.println( "Работает подготовщик отчетов по результатам тестирования пользователей ..." ); diff --git a/src/main/java/ru/egspt/BaseControls.java b/src/main/java/ru/egspt/BaseControls.java index 6ae4066..2f1b8cc 100644 --- a/src/main/java/ru/egspt/BaseControls.java +++ b/src/main/java/ru/egspt/BaseControls.java @@ -2,23 +2,26 @@ package ru.egspt; public class BaseControls { // - public static void ConnectToServer(Base base, Data data, AccessPane accessPane, ReportPane reportPane){ + public static void ConnectToServer(App app){ System.out.println("Инициировано событие ConnectToServer ..."); - String link = accessPane.getLinkField().getText(); - base.getAccess().setLink(link); - String login = accessPane.getLoginField().getText(); - base.getAccess().setLogin(login); - String password = String.valueOf(accessPane.getPassField().getPassword()); - base.getAccess().setPassword(password); - base.connect();//подключиться к базе - data.setUsersFromBase(base); - //данные в консоль - //data.getUsersToConsole(data.getUsers()); + String link = app.getAccessPane().getLinkField().getText(); + app.getBase().getAccess().setLink(link); + String login = app.getAccessPane().getLoginField().getText(); + app.getBase().getAccess().setLogin(login); + String password = String.valueOf(app.getAccessPane().getPassField().getPassword()); + app.getBase().getAccess().setPassword(password); + app.getBase().connect();//подключиться к базе + app.getData().setUsersFromBase(app.getBase()); + app.getData().getUsersToConsole(app.getData().getUsers()); //данные в панель отчетов - reportPane.setData(data); + app.getReportPane().init(); + app.getReportPane().setData(app.getData()); + app.getReportPane().setVisible(true); + } - public static void DisconnectFromServer(Base base){ + + public static void DisconnectFromServer(App app){ System.out.println("Инициировано событие DisconnectFromServer ..."); - base.disconnect(); + app.getBase().disconnect(); } } diff --git a/src/main/java/ru/egspt/Data.java b/src/main/java/ru/egspt/Data.java index b5cfe02..2924ac5 100644 --- a/src/main/java/ru/egspt/Data.java +++ b/src/main/java/ru/egspt/Data.java @@ -1,4 +1,3 @@ package ru.egspt; public class Data extends UserListModel{ - } diff --git a/src/main/java/ru/egspt/ReportPane.java b/src/main/java/ru/egspt/ReportPane.java index 7d15aa1..89c1bb9 100644 --- a/src/main/java/ru/egspt/ReportPane.java +++ b/src/main/java/ru/egspt/ReportPane.java @@ -11,11 +11,23 @@ import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; public class ReportPane extends JPanel{ - JPanel controlPane = new JPanel();//панель кнопок - пока не надо - JButton generateXLSXButton = new JButton("create xlsx"); - JButton generateTXTButton = new JButton("create txt"); - JPanel tabPane = new JPanel();//панель таблицы - public ReportPane(){ + private JPanel controlPane = new JPanel();//панель кнопок - пока не надо + private JButton generateXLSXButton = new JButton("create xlsx"); + private JButton generateTXTButton = new JButton("create txt"); + private JPanel tabPane = new JPanel();//панель таблицы + private JTable table; + private ReportTableModel tableModel; + public ReportPane(){} + public ReportPane(App app){ + tableModel = new ReportTableModel(app.getData()); + table = new JTable(tableModel); + table.setPreferredScrollableViewportSize(new Dimension(500, 70)); + table.setFillsViewportHeight(true); + JScrollPane scrollPane = new JScrollPane(table); + tabPane.add(scrollPane); + } + + public void init(){ controlPane.add(generateXLSXButton); controlPane.add(generateTXTButton); this.add(controlPane); @@ -25,10 +37,13 @@ public class ReportPane extends JPanel{ this.setVisible(true); } public void setData(Data data){ - JTable table = new JTable(new ReportTableModel(data)); - table.setPreferredScrollableViewportSize(new Dimension(500, 70)); - table.setFillsViewportHeight(true); - JScrollPane scrollPane = new JScrollPane(table); - tabPane.add(scrollPane); + getTableModel().setData(data); } + /** + * @return the tableModel + */ + public ReportTableModel getTableModel() { + return tableModel; + } + } diff --git a/src/main/java/ru/egspt/ReportTableModel.java b/src/main/java/ru/egspt/ReportTableModel.java index a2a6ce1..ffe18bf 100644 --- a/src/main/java/ru/egspt/ReportTableModel.java +++ b/src/main/java/ru/egspt/ReportTableModel.java @@ -6,16 +6,8 @@ public class ReportTableModel extends AbstractTableModel{ private String[] header = {"id", "login", "mail"}; private Object[][] data; public ReportTableModel(Data data){ - //заполняем модель данными - int i = 0; - while (i < data.getUsers().size()){ - this.data[0][i] = data.getUsers().get(i).getId(); - this.data[1][i] = data.getUsers().get(i).getLogin(); - this.data[2][i] = data.getUsers().get(i).getMail(); - i++; - } + setData(data); } - @Override public int getRowCount() { return getData().length; @@ -37,10 +29,23 @@ public class ReportTableModel extends AbstractTableModel{ return data; } /** - * @param data the data to set + * */ - public void setData(Object[][] data) { - this.data = data; + public void setData(Data data) { + //создаем объект data - инициализация переменной + int row = 0; + row = data.getUsers().size(); + int col = 3;//по количеству заголовков + this.data = new Object[row][col]; + //заполняем модель данными пользователей + 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(); + i++; + this.fireTableDataChanged(); + } } /** * @return the header diff --git a/src/main/java/ru/egspt/TagControls.java b/src/main/java/ru/egspt/TagControls.java index 323dabc..3212917 100644 --- a/src/main/java/ru/egspt/TagControls.java +++ b/src/main/java/ru/egspt/TagControls.java @@ -2,38 +2,30 @@ package ru.egspt; public class TagControls { //добавляем тег в модель - public static void addTag(Base base, TagModel tm, TagPane tp){ + public static void addTag(App app){ //тег в модель - tm.addTag(tp.getCurrentTag()); + app.getTagModel().addTag(app.getTagPane().getCurrentTag()); //обновляем текстовую область - tp.updateTagArea(tm); - //tp.getTagArea().update(tp.getTagArea().getGraphics()); - tp.getCurrentTagField().setText(""); - //выводим пользователей в консоль - UserListModel ul = new UserListModel(); - ul.setUsersFromBase(base); - int i = 0; - while (i < ul.getUsers().size()){ - System.out.println(ul.getUsers().get(i).getLogin()); - i++; - } - } - //добавляем тег в модель - public static void addTag(TagModel tm, TagPane tp){ - //тег в модель - tm.addTag(tp.getCurrentTag()); - //обновляем текстовую область - tp.updateTagArea(tm); - //tp.getTagArea().update(tp.getTagArea().getGraphics()); - tp.getCurrentTagField().setText(""); + 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().setData(data); + app.getReportPane().getTableModel().fireTableDataChanged(); } //удаляем тег из модели - public static void removeTag(TagModel tm, TagPane tp){ + public static void removeTag(App app){ //удаляем тег из модели - tm.removeTag(tp.getCurrentTag()); + app.getTagModel().removeTag(app.getTagPane().getCurrentTag()); //обновляем текстовую область - tp.updateTagArea(tm); + app.getTagPane().updateTagArea(app.getTagModel()); //tp.getTagArea().update(tp.getTagArea().getGraphics()); - tp.getCurrentTagField().setText(""); + app.getTagPane().getCurrentTagField().setText(""); + //Выводим пользователей в отчет + Data data = new Data(); + data.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); + app.getReportPane().setData(data); + app.getReportPane().getTableModel().fireTableDataChanged(); } } diff --git a/src/main/java/ru/egspt/TagPane.java b/src/main/java/ru/egspt/TagPane.java index f161602..03c5760 100644 --- a/src/main/java/ru/egspt/TagPane.java +++ b/src/main/java/ru/egspt/TagPane.java @@ -1,12 +1,10 @@ package ru.egspt; import javax.swing.JButton; -import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; -import javax.swing.WindowConstants; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; import java.awt.Color; @@ -17,36 +15,18 @@ public class TagPane extends JPanel{ private JButton addTagButton = new JButton("Добавить"); private JButton removeTagButton = new JButton("Удалить"); private JTextArea tagArea = new JTextArea(); - public TagPane(Base base, TagModel tm){ + public TagPane(App app){ this.add(newTagLabel); this.add(CurrentTagField); this.add(addTagButton); - addTagButton.addActionListener(e -> TagControls.addTag(base, tm, this)); + addTagButton.addActionListener(e -> TagControls.addTag(app)); this.add(removeTagButton); - removeTagButton.addActionListener(e -> TagControls.removeTag(tm, this)); + removeTagButton.addActionListener(e -> TagControls.removeTag(app)); //заполняем tagArea tagArea.setText("Перечень тегов:"); int i = 0; - while (i < tm.getTags().size()){ - tagArea.append(tm.getTags().get(i)); - i++; - } - this.add(tagArea); - TitledBorder border = new TitledBorder(new LineBorder(Color.black), "tag-controls", TitledBorder.CENTER, TitledBorder.CENTER); - this.setBorder(border); - } - public TagPane(TagModel tm){ - this.add(newTagLabel); - this.add(CurrentTagField); - this.add(addTagButton); - addTagButton.addActionListener(e -> TagControls.addTag(tm, this)); - this.add(removeTagButton); - removeTagButton.addActionListener(e -> TagControls.removeTag(tm, this)); - //заполняем tagArea - tagArea.setText("Перечень тегов:"); - int i = 0; - while (i < tm.getTags().size()){ - tagArea.append(tm.getTags().get(i)); + while (i < app.getTagModel().getTags().size()){ + tagArea.append(app.getTagModel().getTags().get(i)); i++; } this.add(tagArea); @@ -80,16 +60,4 @@ public class TagPane extends JPanel{ public JTextField getCurrentTagField() { return CurrentTagField; } - public static void main( String[] args ){ - //Base base = new Base(); - //Data data; - TagModel tm = new TagModel(); - System.out.println( "Проверка работоспособности класса TagPane ..." ); - JFrame mainframe = new JFrame("TagPane-test"); - TagPane tp = new TagPane(tm); - mainframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - mainframe.add(tp); - mainframe.setSize(320, 240); - mainframe.setVisible(true); - } } diff --git a/src/main/java/ru/egspt/UserListModel.java b/src/main/java/ru/egspt/UserListModel.java index 58dee03..6979625 100644 --- a/src/main/java/ru/egspt/UserListModel.java +++ b/src/main/java/ru/egspt/UserListModel.java @@ -4,7 +4,7 @@ import java.sql.ResultSet; import java.util.ArrayList; public class UserListModel { - private ArrayList users; + private ArrayList users = new ArrayList<>(); public UserListModel(){ } /** diff --git a/target/classes/ru/egspt/AccessPane.class b/target/classes/ru/egspt/AccessPane.class index ba8412a1b6df69fb032f705758ca5f2670e3ae1a..f69b8f9f0caf4a4d5c5f41f22ef2b65b3512a612 100644 GIT binary patch delta 1075 zcmZva*-sNu6vn>`oo)<5DIg&GS_)V+m_Ud|MNA-&7!eRbae!J2LtCc>6cJQZ+!e1I z?&7{Bq67>^h_58-gYjAZ1fO^@F`j8_5W>ryd(V8ovwZjdNcs|Qoc%L34WJ0G$BZJ2 zFj=aUE}Pxq_4sU?Jf8QJY+Z=Swm4Xt%V+eld@gjGrdo$OE^9K`PCl$jPuztj9U2){ zv`gKRP3rO4%G|PB5wRP4_%}^bT0QoPFhOE4TdEd|N^|S72qoJ6 zBAjUFvalvy7SRb8gU)OB)i`_Y41%SiBDc;629JmXQ230{6dfvgJk-OYLAYBxRl=Z= z6o;3JHwKE!lFMPM@hMK1qm)4}OPwukQf47T!QzSev_4Hcgflvv=1iXua~4qy5oKsO~4F@#GZE~|p*ElzK1K(keGcLr5vLy`6xZs>5GR~vFdZ(@Y^ z80Lhl3@H}!HF`6LA73Beb|nfne;BhztJMC(`YB@)TB<{=8jFrysN*p3)9BNj5^(M8&RtRfo{ z$%Q10ka`p;c!gAqBORYAk%3uc;XAT1haAkqg5R(*0eQ@beE6tTYM^OK)=ejBA3Zoo zp3GCBL+GWp7!IS4+rkqv)CRS52G;sn(Z3ghEW;7>b2&U=U_n>BtZo2(M4Bm&jlOC= z!8(qjx3mek5Gb-?8Q6fMI2MHSNUy?d!9G7YfX)Ar4977DL>kpQ4w7ow5P#VZIJJZ( z&s1Oj&2|pw!3d_uunc^0DV$Ak`4XBO9;S>TxB^b!SlZp9*d5%*1OM(J9^(m~(m(Yz KKEn&T!uY?0#L;>H delta 1569 zcma)5TXPd-7=FHHlTDT#+oq+^*h5;|AxRIZ8Xahz@le32I1W=vF$(G?SxV|=H|%bU z;30~qa!{)uB6t?h3QD229T;)E@xmD{yr|bW{sFJKaC~orcn+&Y!?d?5x_Z8o-BqO=E!EzZKS25Z*w9dXR00Dvv0(F6Wu3__0dTjp>DWsuD4N;0hW@;rh03IBzXh(na^a?=!jEV;=v4Ks)%3|qJB zrfM15q?(InjY2W6DK4j?X=F6D&>xjTBYRYG>6UFyWNpKYdIO3%@Z!h8R* z<|GMIXkrLzN+FX|I{FxfV|RGKTteRSrhCDU1lmf|ct^zBL~Pkw4H~*_8k!}8;~3GR zw=;a03R~cZ_Hce zjo54&g==4rM~WApk$X zYWP&>S0T~W-NPS}qNN?_i%6%>;qiGW;hf(;kKO%3qEVPbK2gi=tHnQaC{Q`r z=c$p8@*7aXiv*70B^;!)j#85JrFi%gv*G+eKcAD0g9a8L#l-s>p2) z<$&wkaKpG)agd)`6)Aaf_ue2bgx5%fB{T`b>7bD=Vk#XzJddNlc#vGrX14$LcaY~RozPrJ7>^*DvFDB{7zl6{M0` zX}Yv=$4*Za^QB_JEZCXhFr|>s=s1f>HU|y*!713)Y;CjnfQ?Q37&zLui)to(%D^|?QC9`bURAi|==5-WMWJ?rRZ5aseu~ke@Gf6g6Wg7WR z2fk47qw}lt*m>e?)E{xJ)*mIDznl%{ne&^g+HjuMe{h~VFA}n?e=i6gKXp-w`U9ux ztku7B*6TkB-@W6H1ea?4A-~TFAea~bN%?2*YGR!=Pc1-aoxk4`qobo5Dp*xPe|tmR z)p1*Du9hT%TtONuE}wfkE+Zz=mpa}-j5#yPD|}SMh>Vkl$YJenFHHa3QsZ zU8!~S&97lk75x@HTgfB*^z}fl-NfgQ-*vnHt`k6JcUg zIOht{8r~0#_Awn`Xr0)_YvLT+eH_ZWn+y#$46!D@p*)irA#Z3M)AO+_Yq**nX|G{! zgyt6JMtUL-dX#@^_;`fIJ`0QuxS8)~90QDr{}9-RgV>KFIN%!W^Dgxb%74fV44PE1 zh$Y{2+T8O1F%nkHr&`IGP%`I#2zjiPJRU;s#7$T}`8v}ph3#3xwBX#S}Q1+lNn5F-F6NbmSq!G!-<2 z?6N>#fS)(ZCEHQ%lu;fwPOPt+mCAFYLt`X3xhS_uu=R=*Yy+OL(Ipk{sDWcJG^7Q(_oHbQLc_}fJqNYd zS%*MM`!ex4UA!&ZIT-s0;yz9jZ{|NbFx#VLb+5li_X~SQA&0A zih+0Wo`7C4oh7Scd2xi3w^YZw6vK=y3#Nvt|BkAs@5EKY3eqZWDwvK*yszr<0f(^_ zM_zKU7aW`O&HNSOnt>0IB2HrGD`S?A~rP}&j8F&lbteLd8IBU@( zO2$6R;(gnDS2!*UrEPoNoUzo{c5)yyiWdp`YU6v?&Xq3!CDNkPTX~PYl{d{>c?Y7LMo9`Sb#H_{}V56A|+viCEO0p>GEsv(@kDV)b? zk1*ytZ4v6UUc~|_yRe9lThzCSQPcxFSc-gF!)FZ$R&qU;u3>}!&4A9&EzTY%82LG7 eH;jIkQx(yt8o(V`+;x-UF3TzS`;z+*^8W&@=)`vb diff --git a/target/classes/ru/egspt/BaseControls.class b/target/classes/ru/egspt/BaseControls.class index ac62d0735a43df0873e5eee5e0a64eec7a7804e5..797702d7407f5b934c7588e47fcb87d200388b29 100644 GIT binary patch literal 2074 zcma)7YgZdp6x|mB1L2nPD21XT^_kF?_@F+TTFb+zH9RaSYEj!EOw*xBCeBQF_-w1T z)%pYc8MbRVvRq4kfS@jPBM@B*PUPN};k5=b%u4`X$1Wo)asDlp8m6z{6V!}Mi|*ePx=OT2us*X(@l!@ui;&lVBk#8Nn za!9;^Hw8NDB9LD5W~~gjr}377^Sm_m?b;=AA*_L?i7S;ZN=zy-l(Jc;V3$M2>WFEH z85P~3qLoL5XC&Umds@2%)AJ(jMhf9tx~JbIWDR^kk@xAhFG^w-a{^rivS(*M zC6de2aV+4nfe-iJ>+r@%EFwoW*Ue(pn!mvUC6=dk9S=yK#*)NGicl8`?PX9>eJ zwW^WVEvCx!sl;daT$gFa^vwfhQYPwr9V-UtYm`YjB=X>W>S3BIp5=NO*D2{z_cgU_ zSZQ_Nuj7V90XL~MsfRoC#SWXO>f6QCr0benS=;l&oNE%dP$Z(g@SMYL^c?lL3`I?K zV4Lo%vV?<*uJvWB;<%LIKV8&tFqsSA0NhKog~>gKJCt;*1=s>`B; zzm9PQ8Ye+^{LO$PL8G0c!BvW1!Ef8xALw|*Neki}m0N{&ag;iM-y>Xgq8mqP;bswI zbd0tKkI~b2JiyRcfRO;t1sKb6`ci<2QvuFt>)W)>M%L2-rnL2)0Pk;OelBvH32;SE zKjvpyPp?JOLvFISqevTu=og}jfGMXZjS#rrS z<{G(__}}u;hwm799|IxhG0h9#(hAzExQ#nxo#c+YoVD~h)^I%DWw601c;z$02R4}I}$ z+O1l;n6g}0<;I0OU%&_O0bE-41WjPm)pPpv>C=DD>$>-~#`iy;zW^6`wr9MZnd_X- zKabg&!cH+ZW)Q|zBq&sUxOV}eaxFI z_>-z-(tibmD2paZH1V6tIgXtw8Z2>3XZhgb{%f18uD+ZstIfeR?z;#G5f^0GW8@Qw zA*}>z9&?i1h)THG6ZN?LK{Nvx5__qZs8JsAZOV7HKHa zr}s_qfQQm7_ISiPN-4A05NRJvktQgjBiKA9B(gnZBvXmg%oE8p8J1;LI{hU_q|eu= l@t56{We3IYcExI~s6nHcY!Y9`OHR!Fj(<)Ra>59(^B0?K$$S6+ diff --git a/target/classes/ru/egspt/ReportPane.class b/target/classes/ru/egspt/ReportPane.class index 8c3f8f46c62d2a215ad808e2a7ae85fbc6d2e679..5c9e1986dac95238f75a216a923e175911c9664a 100644 GIT binary patch literal 2320 zcmbVNYf~Fl7=8{UEZJ_kmD19Rh06|CiA?Il!NFeSBKmSmf5U9xer6sVUv z`ZN3!>Ij*U8GnHP#czIgeBQHxO`zikhauwtfequ&89L1iTbhy1Kr&iCEBKQxEadHSqmw2%j}#56I}|udAI7^ zSzlXq0*#%e%=;zVE7*Z6jGLQ@@UdH$iXPxAC6kJ#`9V>>uiYhm)vKR+KJ{>w#8*~33S84P25r#Vxa4; z=hgRIZ#Zt{aY$LEA4s|L4AUl|D4AT4iQBj%2tR61HRrF@{Hjw8b*fI>wQvthl&f7X zD`Z`&neI9g@I2MMqXefYK}}&_#C!@FNjL)^qtN5o*!6PMTu9n>e;0)75Z8U@t6X8 z2uG^*h)vm613AqUy78E;9q5D&OYKo|$q||j=shdz*3&@fi^pvKNXd4zbv88a7jTg(GC2noM z=&_EEbt`^tVO?4=QP%z18!JFJBmpk@>p{t(bP2FGe(*2JtzeAFJNaqoLWjJBoOQ_C zrANM0dgME$NA{o|+1nhG^yDkb-+r#@NN@&BW*ZpD?xM5EaT|l24iyJZHgIYiBhliF zUW~;?*x_0DlpX5c%={03eoZ z@xl%+HgI{H9CmS~nEeft4ZO3BY0jp1akbd5{_eZpz_lIB$yQR@taY=ecqA6 z%6{#C(zgfPCW1l!j|hn7d`!<}v4i6MEGOeK*~Nq6E*=(t#b*ta2P(;A18zRc5_nni zs>Kw}Y7v|vkx_yj_+Zx&5~dP)@>fJMLmRP5 zWq0tDxt_&oOns1MvP?_3)P4n0_y*tVaO{(2xSU>7iDWhTGvjs;k4RaBcu9we^pf1y J%Xix9`M&}n8~*?R literal 1779 zcmaJ?|56)O6#g!RY}l?OgkKGo0@cDt9;L4QD8iOUMEMEb?HjqQgSa} z*jqkQ%5w!K`gOx&QXV~3F76dibv0#G!U)m3wri_<0)y#HNg%S~)ufI=#0^}4F$}Ud zFodXvF{09kCUh3V1f%vP!I?X88YeoEm}2XTgee_>G98O37L-p+bD0u*oi?B$7Q-b0 zy<@CS6yIDnFpL=Q<_zeFGMXy}-od*B(yG-2vK_D1u`*Y@gG0}iuF7S?Q2mEGxw)d@ zJ%QO?>=nXW*RUus!g^*H%JF;yOE3k7DvnkC zP9V{XgsyWs()fT=a)WZ%2cB;;r5J7sME#&WbX>zN*1auoBh)?Zkq+t*OzwPUH#RaQ zCj7C1Pe7F)Zb%g>Q&#`aRcQ99fqS@5^&qp7-LNYTbzmg@l=~viS=c^0s7SwP1sBP@ zSGAmy<=ZTG4kK#cZg4BUq2~!uG-Mz!AAmo@tG61YtPzY=OIg(J>8?LMp^RzRIQxJC z2pYZ+NS%ou+-y-}J32P8#mRlBV;x`eZimqH=SDFhvuhNDd)x^Z6n)h`kZ!~FTpf>4 zWG_#s`spzL>)180hcY!DG1&3t3+el^R;bdecGz{vmd88@3igkb;HjQ|_|GqeWPo28 z_?jy+NsiWR$7!6Ju1mYVuQWU-``(t_45RSV*6|GAGBiqHZ;YM?!|%NoWH^2%!NexW z!np|)WQB^OHv&503`zA>vj+n!7Q7?BDhWMtjdv&D62rzkb?YF_$_V|_kfASlECeeJ zfncQ(KH7kMh}tChlY-P2Bx80QP{s zw*pv6A~J$F{ar!=8I018z!)B29C=LO2`2FzQ&6~wACSUNn8s&hI~h{JGFC`ZL~|9N z6H$RRJnRtuh0?=Gy3@uwLE0=Yw2*IMduy?cN99rRcVexDLKCG$!u7O`XXV8fzS(9X z*O^-v>2#1z#y5jGT*g(*()60cZ7K$%$%b({Xec5os1k|<&9E9IVO^rB`~r0nAz;JzuWrOxAy+~rC} zkKD|*b<}X&`(~+TZ8j=aEd)(q{=j@_KFTzY?RquiN?T^5)N~!Q+~+9}+_%h%Tw%y-e;WW-9U$k;5w=i zSC$eO&)aqDZtJjQIf?_q$v4Vot!O&7?Atrk+e3FK@m@;hLbc#mu#cfI;^W4GCE}-jRk=SO?N#0V~ig*0i8ZY zv(~aUSU#T2cK&mGr8#T)URpa2)e--fp@pI<8|i1QIo&MtIt6U=0^Iw5I*UQsu7WhJg)y zK;D>JAeJ14K7^b7h$I9ZS==&kTc!&zG*{7)!^a_fByhGTo?P9vs+MCQk4?_vp`>Z+ zfugCOCC`oMv)D553GQ{8%}bq8+$YWUOJDjH4BVH#a>$z$q8we(z^78nlMigCqbxc8 z>^^UeRbii;16R_|LD+1o;F{%cH_anYgb}LtWa9DUkb%pKqZb-2r)=G_YZf^hROuDj zKh6`2pRa+BKi&+rBj@}N(-MKiI>IlLRv-V*r+oZ}Z$Qd4s*Be=WZmAk6Gfnd6g*IzuN zmk%;$kmtat%44W~(90w6#?a{G|DvNqqc7u4ul8-$l9WVb?U|*-(oX~Br&NNuj#Iad z2(BQbAVqMMJ0JJF+g?&>kDL=`j@pIu_F`5v?agvh-q!S|0l9-eE1vg6g-o5+I08iJaGDayYQVR*!xaQ z1+d!p|NbDy>Q^IJCjG!X`@2Yhmtc_iI8vDATa>^8-+;^5BAHe4aX=pGJb!{k)#9~I z8(q$xdZYK@F+NkA8E9aaJ3sT4@HuxH_E>KOzL!V{A^yQVvchMt!wnsJ#7+$oyF8TG sFYu)oyv{D9s)OkT>bECdU7fBH?V8Hak?e`oqzvUF(Lxb9RsX=RYrB0l0=;1u219uV=`P ze;61$^3e5y2iBe=x7@aL6l4T0KCzx!&kX;_?sklTW5)WPA9z-41Syc)msVSP0@IHh zoMAW?;myFKv{ivj+X^g!vyVrk+j~!BE1+oZrrouJHGx8YJNV}?o`Shk}=;0+yFk<>3AO>4CFOKtR~^t<#9i zz-oQ7WgSN4#)#04d$i&9x`9Ru-PCaxgkz$d$`hz2`)z_C8?Mtk=nk_RI<|0MK&8;# z$jU{^PcpMcm?n>Tot8>tPTDFB*K?2R-L`xtFxCp2MNf)Vs>33E(irjo#d zL7M6Iyq3IUJG6vie3+NnBDg@4Nz>b&q7OMgyd&S!HBS*0Jh?G?`ir8B3u?bYujPKn zV zubbbeL|CDZkA8Ul{AcQ$#x44-5g%rjA*OS5KTq5izz!V8HYOl3iG4crF@-fkE(|#1 zV|+qS#Gc;iby75sNB9&Qr1>_TP9yc2p$de8vHr-yZ3gVug~1>-+zAm0x*GX4OIdWyQrJ#Lf+BWjdVPhb?jWGprJ;f zdDqxC^o)^B>&sia=C&hnVbaQ4&J%&^;b>BzCZ0=~VN@d|QHu)#O$jS&E*1B-Oncqf z%9sMJiQKl4NgB4LzDvOxXU8fCbR;Ti$0%c@Qlt@R84gOO^Z8gb8Ac1*G_(rH@?d5p zB4`(=Pn!-0E)pvv&^{auh98GxYKBgUE_4fo{rVLnOVr4zausEDFZwm~(T=hnr&2kI z0bCSl;2iOyZJSvo?N1Xpx8~SZHqB`+Nw@T&R*d&hjn`1THC0%)8vxZ}Y*K=k9WHuYTvBf;;$p}TMq9^R=sz*Bd4zk3Q3mg;%SFsDn{pB7+w)Nu3+n0O zm5YslW)O8$(Wo3kH~EIhGDey>BMYS2K(j~M;nUzP-m!iRQM|_ovW95U`OKdv`#+c? dBTXz#x7~LmLnP!;UG&F5(p$L_lq?bXhpr%$zp;$~qH6@5Qm^NpH!AT}-W`f|e zf5a!B^?ZClpE zR%9PI^=-cy1-=&=ND8DMI*%ONbDDMg*5N~W6bYQzaGP$lDKL`DR|S&WeodMfLCV4? zP6$kt+@>tI8;3GDa1K2wkSX~`j#qU8SM9rp$>@O_3QU*&3%f`dr&c2yfy=qR%T*_o z#r~G|J)(QVNBd4w7V}jTlQ?A{LlJ`z%4%T>S%LAojJDfBAe)g!n#$!%eZ7?^aGUj_ zi5a|ZU{+vq@EVP4;Wf+&WOFZvb?{GHID-WuwOchOqV)P!ARVe6(9{#r33(yIx~bs0Xk!|zGXzIh-YN7_~#!yzFNouP7U#j8v?FWxDo+ z-410?a>GcgGf_ZFz1A$)xX3&*NO^=if!|Q2Aj<(Ex;Xi23h!Xuz`H}uQ+X0bvSHyp zTw>$+ZT3;NlQh@2_nGL3>6T7|=`P@X3m@P^fib2);|a_hm!=)Lp1l}*d5>bOU_m6u`p-e3`LOqH! z=?im_j~NU&d_&0xSu zuC0y(zvJAcIA0Up;OF!h8a< zzvAuH7?-oj7{x!Z6=OTb&W}lvO{(J(U zU^720ti5lGjAm3Yh-uB(p$!=lTF@%u0R}lAQ^tdMh`|}9C^g!ajA(I&G9Q5oB~=pI zuuViegL^UOW|WMF@d*E0SU1vvog#KHl=P~Dsxn~2;!2aQs|Uidv>~GtyBGw5H(^_A z!r7p>nusdfx_h-Aqd`O$gKNp$Vd$|$RDy!XWIS%RU{_NqEfJB>fxR-Gz>^HtbZl57 zTwhJAAflUdYc-4T8S9#nr|`6hD8q^@qPpKuLdkeimk~oRgRMKR_ViJ`9FIkJgM=Q$ zWvoCyHR8L~Thr-4l9V&lXl+k2Vd%+tT7rswW`@oX%w-HIY2Ib4wNu*z806zNy;LCX zL}u9>xnkeSC+z|IF&WR}2>;C#Xu1P0GcZZQ7*?8( zQ>H|(GSu>Ytdz&ZN@WbM$#@+{7#v1&Nz2nR-b4wlgRZ62Sc0ZuG0axYIrB-euEG&l z`@17*^_>K^e8c$91y#W_cwfX>hSK~+2rWn<;{z0#bBaW0J%}KU#!GAI<-?NGBjF4_ zmhp)hQlM-7$w7^xc%^fL{X8y+_=0bDt`{!i5o$Itm0L2IbT;8DiYD0cx{Tp!9|;5Lk+0>@E_ad>eOx8odTP0;rhtj1MT zVIFJn3)W(Yko~!CaR9?~qQ3DA4w4q*Xvd)do`r?N?Zo6TF&d=+H!L>@l`a(%(ZWDA z8J?phJ@4}Pk6xe%3o!@fkPp6W5jp$qSSZ5q0$$|*xGF}L;_k?cvn|HGL~Ufpg3pMi zKzPljdW({;H&1gI>nc7mjgutvlJKu&z?b9?XSJWtN&m)8dD}ojI0$tE3J`=78%f|g z`d_(=P8-pPP1r(0n=-A=RbP~;8E@fj;^xFXIFwasl+U{Zc^x(Wwn-iEg9mQ#R56G+Semqy+7X1((To a1vB_E`!$QNX*a$hpLvO{;XC|*mHz@o32aUP literal 5179 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 delta 533 zcmZvYKTpC?6vfXimO@)V`6pH@ZWtIC47zEIqnMZ|gE0&&MhqdQB8e_6egNQ24m#^# zB03#3MbARXD-dk5zv(tJ$)%_sEO{nk+hs3moX+mVL zR4-)@YvoFI*>Oro`SL+chmAm2RVqYw*YPyTGmeB%)i<(5U+r`A)$1dQh zpr(5;JA6dgg!p6*L>R>w-w0tuSfTM*K@=1N=*tL9cL0&l+{1?Kp z8biv2q^$GZb@rw+w}`oUJb&^;dHI+`#RsaNJgyD@7Phi@VvyDC_++L@OmXFmROOzZ z74