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