1 package com.jsql.view.swing.panel.consoles;
2
3 import com.jsql.model.bean.util.HttpHeader;
4 import com.jsql.util.I18nUtil;
5 import com.jsql.view.swing.popupmenu.JPopupMenuTable;
6 import com.jsql.view.swing.util.MediatorHelper;
7
8 import javax.swing.*;
9 import javax.swing.table.DefaultTableCellRenderer;
10 import javax.swing.table.DefaultTableModel;
11 import java.awt.*;
12 import java.awt.event.InputEvent;
13 import java.awt.event.KeyEvent;
14 import java.awt.event.MouseAdapter;
15 import java.awt.event.MouseEvent;
16 import java.util.ArrayList;
17 import java.util.HashSet;
18 import java.util.List;
19 import java.util.Set;
20
21 public class NetworkTable extends JTable {
22
23
24
25
26 private final transient List<HttpHeader> listHttpHeader = new ArrayList<>();
27
28 public NetworkTable(TabbedPaneNetworkTab tabbedPaneNetworkTab) {
29 super(0, 4);
30
31 this.setName("networkTable");
32 this.setComponentPopupMenu(new JPopupMenuTable(this));
33 this.setRowSelectionAllowed(true);
34 this.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
35 this.setRowHeight(20);
36 this.getTableHeader().setReorderingAllowed(false);
37
38 this.addMouseListener(new MouseAdapter() {
39 @Override
40 public void mousePressed(MouseEvent e) {
41 NetworkTable.this.requestFocusInWindow();
42
43
44 if (SwingUtilities.isRightMouseButton(e)) {
45 var point = e.getPoint();
46
47
48 var rowNumber = NetworkTable.this.rowAtPoint(point);
49 var colNumber = NetworkTable.this.columnAtPoint(point);
50
51
52 DefaultListSelectionModel modelRow = (DefaultListSelectionModel) NetworkTable.this.getSelectionModel();
53 DefaultListSelectionModel modelColumn = (DefaultListSelectionModel) NetworkTable.this.getColumnModel().getSelectionModel();
54
55 NetworkTable.this.setRowSelectionInterval(rowNumber, rowNumber);
56 modelRow.moveLeadSelectionIndex(rowNumber);
57 modelColumn.moveLeadSelectionIndex(colNumber);
58 }
59 }
60 });
61
62 this.setModel(new DefaultTableModel() {
63 private final String[] columns = {
64 I18nUtil.valueByKey("NETWORK_TAB_URL_COLUMN"),
65 String.format("%s (KB)", I18nUtil.valueByKey("NETWORK_TAB_SIZE_COLUMN")),
66 I18nUtil.valueByKey("SQLENGINE_STRATEGY"),
67 I18nUtil.valueByKey("SQLENGINE_METADATA")
68 };
69 @Override
70 public int getColumnCount() {
71 return this.columns.length;
72 }
73 @Override
74 public String getColumnName(int index) {
75 return this.columns[index];
76 }
77 });
78
79 this.getColumnModel().getColumn(0).setCellRenderer(new TooltipCellRenderer());
80
81 DefaultTableCellRenderer centerHorizontalAlignment = new CenterRenderer();
82 this.getColumnModel().getColumn(1).setCellRenderer(centerHorizontalAlignment);
83 this.getColumnModel().getColumn(2).setCellRenderer(centerHorizontalAlignment);
84 this.getColumnModel().getColumn(3).setCellRenderer(new CenterRendererWithIcon());
85
86 this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), null);
87 this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_DOWN_MASK), null);
88
89 Set<AWTKeyStroke> forward = new HashSet<>(this.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
90 forward.add(KeyStroke.getKeyStroke("TAB"));
91 this.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forward);
92
93 Set<AWTKeyStroke> backward = new HashSet<>(this.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
94 backward.add(KeyStroke.getKeyStroke("shift TAB"));
95 this.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backward);
96
97 this.getColumnModel().getColumn(0).setPreferredWidth(300);
98 this.getColumnModel().getColumn(1).setPreferredWidth(20);
99 this.getColumnModel().getColumn(2).setPreferredWidth(50);
100 this.getColumnModel().getColumn(3).setPreferredWidth(70);
101
102 this.getSelectionModel().addListSelectionListener(event -> {
103 if (!event.getValueIsAdjusting() && this.getSelectedRow() > -1) {
104 var httpHeader = this.listHttpHeader.get(this.getSelectedRow());
105 tabbedPaneNetworkTab.changeTextNetwork(httpHeader);
106 }
107 });
108 tabbedPaneNetworkTab.getCheckBoxDecode().addActionListener(e -> {
109 MediatorHelper.model().getMediatorUtils().getPreferencesUtil().withIsUrlDecodeNetworkTab(
110 tabbedPaneNetworkTab.getCheckBoxDecode().isSelected()
111 ).persist();
112 if (this.getSelectedRow() > -1) {
113 var httpHeader = this.listHttpHeader.get(this.getSelectedRow());
114 tabbedPaneNetworkTab.changeTextNetwork(httpHeader);
115 }
116 });
117 }
118
119 @Override
120 public boolean isCellEditable(int row, int column) {
121 return false;
122 }
123
124 public List<HttpHeader> getListHttpHeader() {
125 return this.listHttpHeader;
126 }
127
128 public void addHeader(HttpHeader header) {
129 this.listHttpHeader.add(header);
130 }
131 }