Lines 36-46
import javax.swing.ListSelectionModel;
Link Here
|
36 |
import org.apache.jmeter.config.gui.AbstractConfigGui; |
36 |
import org.apache.jmeter.config.gui.AbstractConfigGui; |
37 |
import org.apache.jmeter.gui.util.PowerTableModel; |
37 |
import org.apache.jmeter.gui.util.PowerTableModel; |
38 |
import org.apache.jmeter.protocol.http.control.DNSCacheManager; |
38 |
import org.apache.jmeter.protocol.http.control.DNSCacheManager; |
|
|
39 |
import org.apache.jmeter.protocol.http.control.StaticHost; |
39 |
import org.apache.jmeter.testelement.TestElement; |
40 |
import org.apache.jmeter.testelement.TestElement; |
40 |
import org.apache.jmeter.testelement.property.JMeterProperty; |
41 |
import org.apache.jmeter.testelement.property.JMeterProperty; |
41 |
import org.apache.jmeter.util.JMeterUtils; |
42 |
import org.apache.jmeter.util.JMeterUtils; |
42 |
import org.apache.jorphan.gui.GuiUtils; |
43 |
import org.apache.jorphan.gui.GuiUtils; |
43 |
import org.apache.jorphan.gui.layout.VerticalLayout; |
44 |
import org.apache.jorphan.gui.layout.VerticalLayout; |
|
|
45 |
import org.slf4j.Logger; |
46 |
import org.slf4j.LoggerFactory; |
44 |
|
47 |
|
45 |
/** |
48 |
/** |
46 |
* This gui part of @see |
49 |
* This gui part of @see |
Lines 55-72
import org.apache.jorphan.gui.layout.VerticalLayout;
Link Here
|
55 |
*/ |
58 |
*/ |
56 |
public class DNSCachePanel extends AbstractConfigGui implements ActionListener { |
59 |
public class DNSCachePanel extends AbstractConfigGui implements ActionListener { |
57 |
|
60 |
|
|
|
61 |
private static final Logger LOGGER = LoggerFactory.getLogger(DNSCacheManager.class); |
62 |
|
58 |
private static final long serialVersionUID = 2120L; |
63 |
private static final long serialVersionUID = 2120L; |
59 |
|
64 |
|
60 |
public static final String OPTIONS = JMeterUtils.getResString("option"); |
65 |
public static final String OPTIONS = JMeterUtils.getResString("option"); |
61 |
|
66 |
|
62 |
private static final String ADD_COMMAND = JMeterUtils.getResString("add"); // $NON-NLS-1$ |
67 |
private static final String ADD_COMMAND = JMeterUtils.getResString("add"); // $NON-NLS-1$ |
63 |
|
68 |
|
|
|
69 |
private static final String ADD_HOST_COMMAND = JMeterUtils.getResString("add_host"); // $NON-NLS-1$ |
70 |
|
64 |
private static final String DELETE_COMMAND = JMeterUtils.getResString("delete"); // $NON-NLS-1$ |
71 |
private static final String DELETE_COMMAND = JMeterUtils.getResString("delete"); // $NON-NLS-1$ |
65 |
|
72 |
|
|
|
73 |
private static final String DELETE_HOST_COMMAND = JMeterUtils.getResString("delete_host"); // $NON-NLS-1$ |
74 |
|
66 |
private static final String SYS_RES_COMMAND = JMeterUtils.getResString("use_system_dns_resolver"); // $NON-NLS-1$ |
75 |
private static final String SYS_RES_COMMAND = JMeterUtils.getResString("use_system_dns_resolver"); // $NON-NLS-1$ |
67 |
|
76 |
|
68 |
private static final String CUST_RES_COMMAND = JMeterUtils.getResString("use_custom_dns_resolver"); // $NON-NLS-1$ |
77 |
private static final String CUST_RES_COMMAND = JMeterUtils.getResString("use_custom_dns_resolver"); // $NON-NLS-1$ |
69 |
|
78 |
|
|
|
79 |
private JTable dnsHostsTable; |
80 |
|
81 |
private JPanel dnsHostsPanel; |
82 |
private JPanel dnsHostsButPanel; |
83 |
|
70 |
private JTable dnsServersTable; |
84 |
private JTable dnsServersTable; |
71 |
|
85 |
|
72 |
private JPanel dnsServersPanel; |
86 |
private JPanel dnsServersPanel; |
Lines 74-79
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
74 |
private JPanel dnsServButPanel; |
88 |
private JPanel dnsServButPanel; |
75 |
|
89 |
|
76 |
private PowerTableModel dnsServersTableModel; |
90 |
private PowerTableModel dnsServersTableModel; |
|
|
91 |
private PowerTableModel dnsHostsTableModel; |
77 |
|
92 |
|
78 |
private JRadioButton sysResButton; |
93 |
private JRadioButton sysResButton; |
79 |
|
94 |
|
Lines 83-88
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
83 |
|
98 |
|
84 |
private JButton addButton; |
99 |
private JButton addButton; |
85 |
|
100 |
|
|
|
101 |
private JButton addHostButton; |
102 |
private JButton deleteHostButton; |
103 |
|
86 |
private ButtonGroup providerDNSradioGroup = new ButtonGroup(); |
104 |
private ButtonGroup providerDNSradioGroup = new ButtonGroup(); |
87 |
|
105 |
|
88 |
private static final String[] COLUMN_RESOURCE_NAMES = { |
106 |
private static final String[] COLUMN_RESOURCE_NAMES = { |
Lines 91-96
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
91 |
private static final Class<?>[] columnClasses = { |
109 |
private static final Class<?>[] columnClasses = { |
92 |
String.class }; |
110 |
String.class }; |
93 |
|
111 |
|
|
|
112 |
private static final String[] HOSTS_COLUMN_RESOURCE_NAMES = { "host", JMeterUtils.getResString("dns_hostname_or_ip") }; |
113 |
private static final Class<?>[] HOSTS_COLUMN_CLASSES = { String.class, String.class }; |
114 |
|
94 |
private JCheckBox clearEachIteration; |
115 |
private JCheckBox clearEachIteration; |
95 |
|
116 |
|
96 |
/** |
117 |
/** |
Lines 121-126
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
121 |
String server = (String) dnsServersTableModel.getRowData(i)[0]; |
142 |
String server = (String) dnsServersTableModel.getRowData(i)[0]; |
122 |
dnsCacheManager.addServer(server); |
143 |
dnsCacheManager.addServer(server); |
123 |
} |
144 |
} |
|
|
145 |
for (int i = 0; i < dnsHostsTableModel.getRowCount(); i++) { |
146 |
String host = (String) dnsHostsTableModel.getRowData(i)[0]; |
147 |
String addresses = (String) dnsHostsTableModel.getRowData(i)[1]; |
148 |
dnsCacheManager.addHost(host, addresses); |
149 |
} |
124 |
dnsCacheManager.setClearEachIteration(clearEachIteration.isSelected()); |
150 |
dnsCacheManager.setClearEachIteration(clearEachIteration.isSelected()); |
125 |
if (providerDNSradioGroup.isSelected(custResButton.getModel())) { |
151 |
if (providerDNSradioGroup.isSelected(custResButton.getModel())) { |
126 |
dnsCacheManager.setCustomResolver(true); |
152 |
dnsCacheManager.setCustomResolver(true); |
Lines 140-145
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
140 |
providerDNSradioGroup.setSelected(sysResButton.getModel(), true); |
166 |
providerDNSradioGroup.setSelected(sysResButton.getModel(), true); |
141 |
dnsServersTableModel.clearData(); |
167 |
dnsServersTableModel.clearData(); |
142 |
deleteButton.setEnabled(false); |
168 |
deleteButton.setEnabled(false); |
|
|
169 |
dnsHostsTableModel.clearData(); |
170 |
deleteHostButton.setEnabled(false); |
143 |
|
171 |
|
144 |
} |
172 |
} |
145 |
|
173 |
|
Lines 150-155
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
150 |
} |
178 |
} |
151 |
} |
179 |
} |
152 |
|
180 |
|
|
|
181 |
private void populateHostsTable(DNSCacheManager resolver) { |
182 |
dnsHostsTableModel.clearData(); |
183 |
for (JMeterProperty hostEntry : resolver.getHosts()) { |
184 |
addHostToTable((StaticHost) hostEntry.getObjectValue()); |
185 |
} |
186 |
} |
187 |
|
153 |
@Override |
188 |
@Override |
154 |
public TestElement createTestElement() { |
189 |
public TestElement createTestElement() { |
155 |
DNSCacheManager dnsCacheManager = new DNSCacheManager(); |
190 |
DNSCacheManager dnsCacheManager = new DNSCacheManager(); |
Lines 163-173
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
163 |
|
198 |
|
164 |
DNSCacheManager dnsCacheManager = (DNSCacheManager) el; |
199 |
DNSCacheManager dnsCacheManager = (DNSCacheManager) el; |
165 |
populateTable(dnsCacheManager); |
200 |
populateTable(dnsCacheManager); |
|
|
201 |
populateHostsTable(dnsCacheManager); |
166 |
clearEachIteration.setSelected(dnsCacheManager.isClearEachIteration()); |
202 |
clearEachIteration.setSelected(dnsCacheManager.isClearEachIteration()); |
167 |
if (dnsCacheManager.isCustomResolver()) { |
203 |
if (dnsCacheManager.isCustomResolver()) { |
168 |
providerDNSradioGroup.setSelected(custResButton.getModel(), true); |
204 |
providerDNSradioGroup.setSelected(custResButton.getModel(), true); |
169 |
deleteButton.setEnabled(dnsServersTable.getColumnCount() > 0); |
205 |
deleteButton.setEnabled(dnsServersTable.getColumnCount() > 0); |
|
|
206 |
deleteHostButton.setEnabled(dnsHostsTable.getColumnCount() > 0); |
170 |
addButton.setEnabled(true); |
207 |
addButton.setEnabled(true); |
|
|
208 |
addHostButton.setEnabled(true); |
171 |
} else { |
209 |
} else { |
172 |
providerDNSradioGroup.setSelected(sysResButton.getModel(), true); |
210 |
providerDNSradioGroup.setSelected(sysResButton.getModel(), true); |
173 |
} |
211 |
} |
Lines 175-180
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
175 |
|
213 |
|
176 |
private void init() { // WARNING: called from ctor so must not be overridden (i.e. must be private or final) |
214 |
private void init() { // WARNING: called from ctor so must not be overridden (i.e. must be private or final) |
177 |
dnsServersTableModel = new PowerTableModel(COLUMN_RESOURCE_NAMES, columnClasses); |
215 |
dnsServersTableModel = new PowerTableModel(COLUMN_RESOURCE_NAMES, columnClasses); |
|
|
216 |
dnsHostsTableModel = new PowerTableModel(HOSTS_COLUMN_RESOURCE_NAMES, HOSTS_COLUMN_CLASSES); |
178 |
|
217 |
|
179 |
clearEachIteration = new JCheckBox(JMeterUtils.getResString("clear_cache_each_iteration"), true); //$NON-NLS-1$ |
218 |
clearEachIteration = new JCheckBox(JMeterUtils.getResString("clear_cache_each_iteration"), true); //$NON-NLS-1$ |
180 |
setLayout(new BorderLayout()); |
219 |
setLayout(new BorderLayout()); |
Lines 190-197
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
190 |
northPanel.add(optionsPane); |
229 |
northPanel.add(optionsPane); |
191 |
add(northPanel, BorderLayout.NORTH); |
230 |
add(northPanel, BorderLayout.NORTH); |
192 |
|
231 |
|
|
|
232 |
JPanel tables = new JPanel(); |
233 |
tables.setLayout(new VerticalLayout(2, VerticalLayout.BOTH)); |
193 |
dnsServersPanel = createDnsServersTablePanel(); |
234 |
dnsServersPanel = createDnsServersTablePanel(); |
194 |
add(dnsServersPanel, BorderLayout.CENTER); |
235 |
dnsHostsPanel = createDnsHostsTablePanel(); |
|
|
236 |
tables.add(dnsServersPanel); |
237 |
tables.add(dnsHostsPanel); |
238 |
add(tables, BorderLayout.CENTER); |
239 |
|
195 |
|
240 |
|
196 |
} |
241 |
} |
197 |
|
242 |
|
Lines 212-217
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
212 |
return panel; |
257 |
return panel; |
213 |
} |
258 |
} |
214 |
|
259 |
|
|
|
260 |
public JPanel createDnsHostsTablePanel() { |
261 |
// create the JTable that holds header per row |
262 |
dnsHostsTable = new JTable(dnsHostsTableModel); |
263 |
JMeterUtils.applyHiDPI(dnsHostsTable); |
264 |
dnsHostsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); |
265 |
dnsHostsTable.setPreferredScrollableViewportSize(new Dimension(400, 100)); |
266 |
|
267 |
JPanel panel = new JPanel(new BorderLayout(0, 5)); |
268 |
panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), |
269 |
JMeterUtils.getResString("dns_Hosts"))); // $NON-NLS-1$ |
270 |
JScrollPane dnsHostsScrollPane = new JScrollPane(dnsHostsTable); |
271 |
panel.add(dnsHostsScrollPane, BorderLayout.CENTER); |
272 |
dnsHostsButPanel = createHostsButtonPanel(); |
273 |
panel.add(dnsHostsButPanel, BorderLayout.SOUTH); |
274 |
return panel; |
275 |
} |
276 |
|
215 |
private JPanel createChooseResPanel() { |
277 |
private JPanel createChooseResPanel() { |
216 |
JPanel chooseResPanel = new JPanel(new BorderLayout(0, 5)); |
278 |
JPanel chooseResPanel = new JPanel(new BorderLayout(0, 5)); |
217 |
sysResButton = new JRadioButton(); |
279 |
sysResButton = new JRadioButton(); |
Lines 248-253
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
248 |
return buttonPanel; |
310 |
return buttonPanel; |
249 |
} |
311 |
} |
250 |
|
312 |
|
|
|
313 |
private JPanel createHostsButtonPanel() { |
314 |
boolean tableEmpty = dnsHostsTableModel.getRowCount() == 0; |
315 |
|
316 |
addHostButton = createButton("add_host", 'H', ADD_HOST_COMMAND, custResButton.isSelected()); // $NON-NLS-1$ |
317 |
deleteHostButton = createButton("delete_host", 'X', DELETE_HOST_COMMAND, !tableEmpty); // $NON-NLS-1$ |
318 |
|
319 |
JPanel buttonPanel = new JPanel(); |
320 |
buttonPanel.add(addHostButton, BorderLayout.WEST); |
321 |
buttonPanel.add(deleteHostButton, BorderLayout.LINE_END); |
322 |
return buttonPanel; |
323 |
} |
324 |
|
251 |
private JButton createButton(String resName, char mnemonic, String command, boolean enabled) { |
325 |
private JButton createButton(String resName, char mnemonic, String command, boolean enabled) { |
252 |
JButton button = new JButton(JMeterUtils.getResString(resName)); |
326 |
JButton button = new JButton(JMeterUtils.getResString(resName)); |
253 |
button.setMnemonic(mnemonic); |
327 |
button.setMnemonic(mnemonic); |
Lines 262-324
public class DNSCachePanel extends AbstractConfigGui implements ActionListener {
Link Here
|
262 |
dnsServer }); |
336 |
dnsServer }); |
263 |
} |
337 |
} |
264 |
|
338 |
|
|
|
339 |
private void addHostToTable(StaticHost hostEntry) { |
340 |
LOGGER.debug("Adding entry {}", hostEntry); |
341 |
dnsHostsTableModel.addRow(new Object[] { |
342 |
hostEntry.getName(), hostEntry.getAddress() }); |
343 |
} |
344 |
|
265 |
@Override |
345 |
@Override |
266 |
public void actionPerformed(ActionEvent e) { |
346 |
public void actionPerformed(ActionEvent e) { |
267 |
String action = e.getActionCommand(); |
347 |
String action = e.getActionCommand(); |
268 |
dnsServersTable.setEnabled(custResButton.isSelected()); |
348 |
|
|
|
349 |
enableTable(custResButton.isSelected(), sysResButton.isSelected(), dnsServersTable, dnsServersTableModel, |
350 |
addButton, deleteButton); |
351 |
enableTable(custResButton.isSelected(), sysResButton.isSelected(), dnsHostsTable, dnsHostsTableModel, |
352 |
addHostButton, deleteHostButton); |
353 |
|
354 |
if (action.equals(DELETE_COMMAND)) { |
355 |
deleteTableRow(dnsServersTable, dnsServersTableModel, deleteButton); |
356 |
} else if (action.equals(ADD_COMMAND)) { |
357 |
addTableRow(dnsServersTable, dnsServersTableModel, deleteButton); |
358 |
} else if (DELETE_HOST_COMMAND.equals(action)) { |
359 |
deleteTableRow(dnsHostsTable, dnsHostsTableModel, deleteHostButton); |
360 |
} else if (ADD_HOST_COMMAND.equals(action)) { |
361 |
addTableRow(dnsHostsTable, dnsHostsTableModel, deleteHostButton); |
362 |
} |
363 |
} |
364 |
|
365 |
private void enableTable(boolean custEnabled, boolean sysEnabled, JTable table, PowerTableModel model, |
366 |
JButton addButton, JButton deleteButton) { |
367 |
table.setEnabled(custEnabled); |
269 |
Color greyColor = new Color(240, 240, 240); |
368 |
Color greyColor = new Color(240, 240, 240); |
270 |
Color blueColor = new Color(184, 207, 229); |
369 |
Color blueColor = new Color(184, 207, 229); |
271 |
dnsServersTable.setBackground(sysResButton.isSelected() ? greyColor : Color.WHITE); |
370 |
table.setBackground(sysEnabled ? greyColor : Color.WHITE); |
272 |
dnsServersTable.setSelectionBackground(sysResButton.isSelected() ? greyColor : blueColor); |
371 |
table.setSelectionBackground(sysEnabled ? greyColor : blueColor); |
273 |
addButton.setEnabled(custResButton.isSelected()); |
372 |
addButton.setEnabled(custEnabled); |
274 |
deleteButton.setEnabled(custResButton.isSelected()); |
373 |
deleteButton.setEnabled(custEnabled); |
275 |
if (custResButton.isSelected() && (dnsServersTableModel.getRowCount() > 0)) { |
374 |
if (custEnabled && (model.getRowCount() > 0)) { |
276 |
deleteButton.setEnabled(true); |
375 |
deleteButton.setEnabled(true); |
277 |
addButton.setEnabled(true); |
376 |
addButton.setEnabled(true); |
278 |
} |
377 |
} |
|
|
378 |
} |
279 |
|
379 |
|
280 |
if (action.equals(DELETE_COMMAND)) { |
380 |
private void addTableRow(JTable table, PowerTableModel model, JButton button) { |
281 |
if (dnsServersTableModel.getRowCount() > 0) { |
381 |
// If a table cell is being edited, we should accept the current |
282 |
// If a table cell is being edited, we must cancel the editing |
382 |
// value and stop the editing before adding a new row. |
283 |
// before deleting the row. |
383 |
GuiUtils.stopTableEditing(table); |
284 |
GuiUtils.cancelEditing(dnsServersTable); |
|
|
285 |
|
384 |
|
286 |
int rowSelected = dnsServersTable.getSelectedRow(); |
385 |
model.addNewRow(); |
|
|
386 |
model.fireTableDataChanged(); |
287 |
|
387 |
|
288 |
if (rowSelected != -1) { |
388 |
if (!button.isEnabled()) { |
289 |
dnsServersTableModel.removeRow(rowSelected); |
389 |
button.setEnabled(true); |
290 |
dnsServersTableModel.fireTableDataChanged(); |
390 |
} |
291 |
|
391 |
|
292 |
if (dnsServersTableModel.getRowCount() == 0) { |
392 |
// Highlight (select) the appropriate row. |
293 |
deleteButton.setEnabled(false); |
393 |
int rowToSelect = model.getRowCount() - 1; |
294 |
} |
394 |
table.setRowSelectionInterval(rowToSelect, rowToSelect); |
|
|
395 |
} |
295 |
|
396 |
|
296 |
else { |
397 |
private void deleteTableRow(JTable table, PowerTableModel model, JButton button) { |
297 |
int rowToSelect = rowSelected; |
398 |
if (model.getRowCount() > 0) { |
|
|
399 |
// If a table cell is being edited, we must cancel the editing |
400 |
// before deleting the row. |
401 |
GuiUtils.cancelEditing(table); |
298 |
|
402 |
|
299 |
if (rowSelected >= dnsServersTableModel.getRowCount()) { |
403 |
int rowSelected = table.getSelectedRow(); |
300 |
rowToSelect = rowSelected - 1; |
|
|
301 |
} |
302 |
|
404 |
|
303 |
dnsServersTable.setRowSelectionInterval(rowToSelect, rowToSelect); |
405 |
if (rowSelected != -1) { |
304 |
} |
406 |
model.removeRow(rowSelected); |
305 |
} |
407 |
model.fireTableDataChanged(); |
306 |
} |
|
|
307 |
} else if (action.equals(ADD_COMMAND)) { |
308 |
// If a table cell is being edited, we should accept the current |
309 |
// value and stop the editing before adding a new row. |
310 |
GuiUtils.stopTableEditing(dnsServersTable); |
311 |
|
408 |
|
312 |
dnsServersTableModel.addNewRow(); |
409 |
if (model.getRowCount() == 0) { |
313 |
dnsServersTableModel.fireTableDataChanged(); |
410 |
button.setEnabled(false); |
|
|
411 |
} |
314 |
|
412 |
|
315 |
if (!deleteButton.isEnabled()) { |
413 |
else { |
316 |
deleteButton.setEnabled(true); |
414 |
int rowToSelect = Math.min(rowSelected, model.getRowCount() - 1); |
|
|
415 |
table.setRowSelectionInterval(rowToSelect, rowToSelect); |
416 |
} |
317 |
} |
417 |
} |
318 |
|
|
|
319 |
// Highlight (select) the appropriate row. |
320 |
int rowToSelect = dnsServersTableModel.getRowCount() - 1; |
321 |
dnsServersTable.setRowSelectionInterval(rowToSelect, rowToSelect); |
322 |
} |
418 |
} |
323 |
} |
419 |
} |
324 |
} |
420 |
} |
325 |
- |
|
|