1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j.chainsaw;
18
19 import org.apache.log4j.LogManager;
20 import org.apache.log4j.Logger;
21 import org.apache.log4j.chainsaw.helper.SwingHelper;
22 import org.apache.log4j.chainsaw.prefs.SettingsManager;
23 import org.apache.log4j.net.UDPReceiver;
24 import org.apache.log4j.plugins.Receiver;
25
26 import javax.swing.*;
27 import javax.swing.text.SimpleAttributeSet;
28 import javax.swing.text.StyleConstants;
29 import javax.swing.text.StyledDocument;
30 import java.awt.*;
31 import java.awt.event.ActionEvent;
32 import java.awt.event.ActionListener;
33 import java.awt.event.FocusEvent;
34 import java.awt.event.FocusListener;
35 import java.io.File;
36 import java.net.MalformedURLException;
37 import java.net.URISyntaxException;
38 import java.net.URL;
39 import java.util.List;
40 import java.util.Locale;
41
42
43
44
45
46
47
48 class ReceiverConfigurationPanel extends JPanel {
49 private final Logger logger = LogManager.getLogger(ReceiverConfigurationPanel.class);
50
51 private final PanelModel panelModel = new PanelModel();
52
53
54 private JComboBox<String> networkReceiverPortComboBox;
55 private JComboBox<String> networkReceiverClassNameComboBox;
56 private DefaultComboBoxModel<String> networkReceiverClassNameComboBoxModel;
57 private DefaultComboBoxModel<String> networkReceiverPortComboBoxModel;
58
59
60 private JButton browseLog4jConfigButton;
61 private JTextField log4jConfigURLTextField;
62
63
64 private JButton browseLogFileButton;
65 private JComboBox<String> logFileFormatTypeComboBox;
66
67 private JComboBox<String> logFileFormatComboBox;
68 private JComboBox<String> logFileFormatTimestampFormatComboBox;
69 private JTextField logFileURLTextField;
70 private DefaultComboBoxModel<String> logFileFormatComboBoxModel;
71 private DefaultComboBoxModel<String> logFileFormatTimestampFormatComboBoxModel;
72
73
74 private JButton browseForAnExistingConfigurationButton;
75 private DefaultComboBoxModel<String> existingConfigurationComboBoxModel;
76 private JComboBox<String> existingConfigurationComboBox;
77
78
79 private JCheckBox dontwarnIfNoReceiver;
80
81 private JButton saveButton;
82 private JButton okButton;
83 private JButton cancelButton;
84
85
86 private JRadioButton log4jConfigReceiverRadioButton;
87 private JRadioButton logFileReceiverRadioButton;
88 private JRadioButton networkReceiverRadioButton;
89 private JRadioButton useExistingConfigurationRadioButton;
90 private ButtonGroup buttonGroup;
91
92 private JPanel lowerPanel;
93
94 private final JPanel networkReceiverPanel = buildNetworkReceiverPanel();
95 private final JPanel logFileReceiverPanel = buildLogFileReceiverPanel();
96 private final JPanel log4jConfigReceiverPanel = buildLog4jConfigReceiverPanel();
97 private final JPanel useExistingConfigurationPanel = buildUseExistingConfigurationPanel();
98 private final JPanel dontWarnAndOKPanel = buildDontWarnAndOKPanel();
99 private final JPanel bottomDescriptionPanel = buildBottomDescriptionPanel();
100
101
102 private ActionListener completionActionListener;
103
104 private Container dialog;
105
106 ReceiverConfigurationPanel() {
107 setBorder(BorderFactory.createEmptyBorder(5, 15, 5, 15));
108 setLayout(new GridBagLayout());
109
110 buttonGroup = new ButtonGroup();
111
112 lowerPanel = new JPanel(new BorderLayout());
113 lowerPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(5, 5, 5, 5)));
114 lowerPanel.setPreferredSize(new Dimension(600, 200));
115 lowerPanel.setMinimumSize(new Dimension(600, 200));
116
117 int yPos = 0;
118
119 GridBagConstraints c = new GridBagConstraints();
120 c.gridx = 0;
121 c.gridy = yPos++;
122 c.fill = GridBagConstraints.HORIZONTAL;
123 log4jConfigReceiverRadioButton = new JRadioButton(" Use fileappender entries from a log4j config file ");
124 buttonGroup.add(log4jConfigReceiverRadioButton);
125 add(log4jConfigReceiverRadioButton, c);
126
127 c = new GridBagConstraints();
128 c.gridx = 0;
129 c.gridy = yPos++;
130 c.fill = GridBagConstraints.HORIZONTAL;
131 logFileReceiverRadioButton = new JRadioButton(" Process a log file ");
132 buttonGroup.add(logFileReceiverRadioButton);
133 add(logFileReceiverRadioButton, c);
134
135 c = new GridBagConstraints();
136 c.gridx = 0;
137 c.gridy = yPos++;
138 c.fill = GridBagConstraints.HORIZONTAL;
139 networkReceiverRadioButton = new JRadioButton(" Receive events from the network ");
140 buttonGroup.add(networkReceiverRadioButton);
141 add(networkReceiverRadioButton, c);
142
143 c = new GridBagConstraints();
144 c.gridx = 0;
145 c.gridy = yPos++;
146 c.fill = GridBagConstraints.HORIZONTAL;
147 useExistingConfigurationRadioButton = new JRadioButton(" Use a Chainsaw config file ");
148 buttonGroup.add(useExistingConfigurationRadioButton);
149 add(useExistingConfigurationRadioButton, c);
150
151 c = new GridBagConstraints();
152 c.gridx = 0;
153 c.gridy = yPos++;
154 c.fill = GridBagConstraints.HORIZONTAL;
155 c.insets = new Insets(10, 10, 10, 0);
156 add(lowerPanel, c);
157
158 c = new GridBagConstraints();
159 c.gridx = 0;
160 c.gridy = yPos++;
161 c.weightx = 0.5;
162 c.fill = GridBagConstraints.HORIZONTAL;
163 c.insets = new Insets(0, 10, 0, 0);
164 add(dontWarnAndOKPanel, c);
165
166 c = new GridBagConstraints();
167 c.gridx = 0;
168 c.gridy = yPos++;
169 c.fill = GridBagConstraints.HORIZONTAL;
170 c.insets = new Insets(10, 10, 10, 0);
171 add(bottomDescriptionPanel, c);
172
173
174
175
176
177 ActionListener al = e -> updateEnabledState((Component) e.getSource());
178
179 logFileReceiverRadioButton.addActionListener(al);
180 log4jConfigReceiverRadioButton.addActionListener(al);
181 networkReceiverRadioButton.addActionListener(al);
182 useExistingConfigurationRadioButton.addActionListener(al);
183
184 buttonGroup.setSelected(log4jConfigReceiverRadioButton.getModel(), true);
185 updateEnabledState(log4jConfigReceiverRadioButton);
186 }
187
188 private JPanel buildDontWarnAndOKPanel() {
189 JPanel panel = new JPanel(new GridBagLayout());
190
191 GridBagConstraints c = new GridBagConstraints();
192 c.gridx = 0;
193 c.gridy = 0;
194 c.weightx = 1.0;
195 c.anchor = GridBagConstraints.LINE_START;
196 dontwarnIfNoReceiver = new JCheckBox(" Always start Chainsaw with this configuration ");
197 panel.add(dontwarnIfNoReceiver, c);
198
199 saveButton = new JButton(" Save configuration as... ");
200 c = new GridBagConstraints();
201 c.fill = GridBagConstraints.HORIZONTAL;
202 c.gridx = 1;
203 c.gridy = 0;
204 c.insets = new Insets(0, 0, 0, 10);
205 panel.add(saveButton, c);
206
207 okButton = new JButton(" OK ");
208 cancelButton = new JButton(" Cancel ");
209
210 List<JButton> okCancelButtons = SwingHelper.orderOKCancelButtons(okButton, cancelButton);
211
212 c = new GridBagConstraints();
213 c.fill = GridBagConstraints.HORIZONTAL;
214 c.gridx = 2;
215 c.gridy = 0;
216 c.insets = new Insets(0, 0, 0, 10);
217 panel.add(okCancelButtons.get(0), c);
218
219 c = new GridBagConstraints();
220 c.fill = GridBagConstraints.HORIZONTAL;
221 c.gridx = 3;
222 c.gridy = 0;
223 panel.add(okCancelButtons.get(1), c);
224
225 cancelButton.addActionListener(new ActionListener() {
226 public void actionPerformed(ActionEvent e) {
227 panelModel.setCancelled(true);
228 completionActionListener.actionPerformed(new ActionEvent(this, -1, "cancelled"));
229 }
230 });
231
232 okButton.addActionListener(new ActionListener() {
233 public void actionPerformed(ActionEvent e) {
234 panelModel.setCancelled(false);
235 if (logFileFormatComboBox.getSelectedItem() != null && !(logFileFormatComboBox.getSelectedItem().toString().trim().equals(""))) {
236 panelModel.setLogFormat(logFileFormatComboBox.getSelectedItem().toString());
237 }
238 completionActionListener.actionPerformed(new ActionEvent(this, -1, "ok"));
239 }
240 });
241
242 saveButton.addActionListener(e -> {
243 try {
244 URL url = browseFile("Choose a path and file name to save", false);
245 if (url != null) {
246 File file = new File(url.toURI());
247 panelModel.setSaveConfigFile(file);
248 }
249 } catch (Exception ex) {
250 logger.error(
251 "Error browsing for log file", ex);
252 }
253 });
254 return panel;
255 }
256
257 private JPanel buildBottomDescriptionPanel() {
258 JTextPane descriptionTextPane = new JTextPane();
259 StyledDocument doc = descriptionTextPane.getStyledDocument();
260 SimpleAttributeSet center = new SimpleAttributeSet();
261 StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
262 doc.setParagraphAttributes(0, doc.getLength(), center, false);
263
264 descriptionTextPane.setText(" An example configuration file is available from the Welcome tab ");
265 descriptionTextPane.setEditable(false);
266 descriptionTextPane.setOpaque(false);
267 descriptionTextPane.setFont(getFont());
268
269 JPanel panel = new JPanel(new GridBagLayout());
270
271 GridBagConstraints c = new GridBagConstraints();
272 c.gridx = 0;
273 c.gridy = 0;
274 c.weightx = 1.0;
275 c.fill = GridBagConstraints.HORIZONTAL;
276
277 panel.add(descriptionTextPane, c);
278
279 return panel;
280 }
281
282 private JPanel buildNetworkReceiverPanel() {
283 networkReceiverPortComboBoxModel = new DefaultComboBoxModel<>();
284 networkReceiverPortComboBoxModel.addElement("4445");
285 networkReceiverPortComboBoxModel.addElement("4560");
286
287 networkReceiverPortComboBox = new JComboBox<>(networkReceiverPortComboBoxModel);
288 networkReceiverPortComboBox.setEditable(true);
289 networkReceiverPortComboBox.setOpaque(false);
290
291 networkReceiverClassNameComboBoxModel = new DefaultComboBoxModel<>();
292 networkReceiverClassNameComboBoxModel.addElement(UDPReceiver.class.getName());
293
294 networkReceiverClassNameComboBox = new JComboBox<>(networkReceiverClassNameComboBoxModel);
295
296 networkReceiverClassNameComboBox.setEditable(false);
297 networkReceiverClassNameComboBox.setOpaque(false);
298
299 JPanel panel = new JPanel(new GridBagLayout());
300
301 GridBagConstraints c = new GridBagConstraints();
302 c.fill = GridBagConstraints.HORIZONTAL;
303 c.weightx = 0.5;
304 c.gridx = 0;
305 c.gridy = 0;
306 c.insets = new Insets(0, 0, 0, 5);
307 panel.add(networkReceiverClassNameComboBox, c);
308
309 c = new GridBagConstraints();
310 c.fill = GridBagConstraints.HORIZONTAL;
311 c.weightx = 0.5;
312 c.gridx = 1;
313 c.gridy = 0;
314 panel.add(networkReceiverPortComboBox, c);
315
316 return panel;
317 }
318
319 private JPanel buildLog4jConfigReceiverPanel() {
320 log4jConfigURLTextField = new JTextField();
321 browseLog4jConfigButton = new JButton(new AbstractAction(" Open File... ") {
322 public void actionPerformed(ActionEvent e) {
323 try {
324
325 URL url = browseConfig();
326
327 if (url != null) {
328 log4jConfigURLTextField.setText(url.toExternalForm());
329 }
330 } catch (Exception ex) {
331 logger.error(
332 "Error browsing for log4j config file", ex);
333 }
334 }
335 });
336
337 browseLog4jConfigButton.setToolTipText(
338 "Shows a File Open dialog to allow you to find a log4j configuration file");
339 JPanel panel = new JPanel(new GridBagLayout());
340 GridBagConstraints c = new GridBagConstraints();
341 c.gridx = 0;
342 c.gridy = 0;
343 c.gridwidth = 2;
344 c.anchor = GridBagConstraints.LINE_START;
345 c.insets = new Insets(0, 0, 5, 0);
346 panel.add(browseLog4jConfigButton, c);
347
348 c = new GridBagConstraints();
349 c.gridx = 0;
350 c.gridy = 1;
351 c.insets = new Insets(0, 5, 0, 5);
352 panel.add(new JLabel(" log4j configuration file URL "), c);
353
354 c = new GridBagConstraints();
355 c.gridx = 1;
356 c.gridy = 1;
357 c.weightx = 0.5;
358 c.fill = GridBagConstraints.HORIZONTAL;
359 panel.add(log4jConfigURLTextField, c);
360
361
362 return panel;
363 }
364
365 private JPanel buildLogFileReceiverPanel() {
366 JPanel panel = new JPanel(new GridBagLayout());
367 browseLogFileButton = new JButton(new AbstractAction(" Open File... ") {
368 public void actionPerformed(ActionEvent e) {
369 try {
370 URL url = browseFile("Select a log file", true);
371 if (url != null) {
372 String item = url.toURI().toString();
373 logFileURLTextField.setText(item);
374 }
375 } catch (Exception ex) {
376 logger.error(
377 "Error browsing for log file", ex);
378 }
379 }
380 });
381
382 browseLogFileButton.setToolTipText("Shows a File Open dialog to allow you to find a log file");
383 GridBagConstraints c = new GridBagConstraints();
384 c.gridx = 0;
385 c.gridy = 0;
386 c.anchor = GridBagConstraints.LINE_START;
387 c.insets = new Insets(0, 0, 5, 0);
388 panel.add(browseLogFileButton, c);
389
390 c = new GridBagConstraints();
391 c.gridx = 0;
392 c.gridy = 1;
393 c.anchor = GridBagConstraints.LINE_END;
394 c.insets = new Insets(0, 0, 5, 5);
395 panel.add(new JLabel(" Log file URL "), c);
396 logFileURLTextField = new JTextField();
397 logFileURLTextField.setEditable(true);
398
399 c = new GridBagConstraints();
400 c.gridx = 1;
401 c.gridy = 1;
402 c.weightx = 1.0;
403 c.gridwidth = 1;
404 c.anchor = GridBagConstraints.LINE_START;
405 c.fill = GridBagConstraints.HORIZONTAL;
406 c.insets = new Insets(0, 0, 5, 0);
407 panel.add(logFileURLTextField, c);
408
409 c = new GridBagConstraints();
410 c.gridx = 0;
411 c.gridy = 2;
412 c.anchor = GridBagConstraints.LINE_END;
413 c.insets = new Insets(0, 0, 5, 5);
414 panel.add(new JLabel(" Log file format type "), c);
415
416 DefaultComboBoxModel<String> comboBoxModel = new DefaultComboBoxModel<>();
417 comboBoxModel.addElement("LogFilePatternReceiver LogFormat");
418 comboBoxModel.addElement("PatternLayout format");
419
420 logFileFormatTypeComboBox = new JComboBox<>(comboBoxModel);
421 logFileFormatTypeComboBox.setOpaque(false);
422
423 c = new GridBagConstraints();
424 c.gridx = 1;
425 c.gridy = 2;
426 c.anchor = GridBagConstraints.LINE_START;
427 c.insets = new Insets(0, 0, 5, 0);
428 panel.add(logFileFormatTypeComboBox, c);
429
430 c = new GridBagConstraints();
431 c.gridx = 0;
432 c.gridy = 3;
433 c.anchor = GridBagConstraints.LINE_END;
434 c.insets = new Insets(0, 5, 5, 5);
435 panel.add(new JLabel(" Log file format "), c);
436
437 logFileFormatComboBoxModel = new DefaultComboBoxModel<>();
438 seedLogFileFormatComboBoxModel();
439 logFileFormatComboBox = new JComboBox<>(logFileFormatComboBoxModel);
440 logFileFormatComboBox.setEditable(true);
441 logFileFormatComboBox.setOpaque(false);
442 logFileFormatComboBox.setSelectedIndex(0);
443
444 c = new GridBagConstraints();
445 c.gridx = 1;
446 c.gridy = 3;
447 c.weightx = 0.5;
448 c.anchor = GridBagConstraints.LINE_START;
449 c.fill = GridBagConstraints.HORIZONTAL;
450 c.insets = new Insets(0, 0, 5, 0);
451 panel.add(logFileFormatComboBox, c);
452
453 c = new GridBagConstraints();
454 c.gridx = 0;
455 c.gridy = 4;
456 c.insets = new Insets(0, 5, 5, 5);
457 panel.add(new JLabel(" Log file timestamp format "), c);
458
459 logFileFormatTimestampFormatComboBoxModel = new DefaultComboBoxModel<>();
460 seedLogFileFormatTimestampComboBoxModel();
461 logFileFormatTimestampFormatComboBox = new JComboBox<>(logFileFormatTimestampFormatComboBoxModel);
462 logFileFormatTimestampFormatComboBox.setEditable(true);
463 logFileFormatTimestampFormatComboBox.setOpaque(false);
464
465 c = new GridBagConstraints();
466 c.gridx = 1;
467 c.gridy = 4;
468 c.weightx = 0.5;
469 c.fill = GridBagConstraints.HORIZONTAL;
470 c.insets = new Insets(0, 0, 0, 0);
471 panel.add(logFileFormatTimestampFormatComboBox, c);
472
473 c = new GridBagConstraints();
474 c.gridx = 0;
475 c.gridy = 5;
476 c.gridwidth = 5;
477 c.insets = new Insets(15, 5, 0, 5);
478 panel.add(new JLabel("<html> See PatternLayout or LogFilePatternReceiver JavaDoc for details </html>"), c);
479 return panel;
480 }
481
482 private void seedLogFileFormatComboBoxModel() {
483 logFileFormatComboBoxModel.addElement("MESSAGE");
484 logFileFormatComboBoxModel.addElement("%p %t %c - %m%n");
485 logFileFormatComboBoxModel.addElement("LEVEL THREAD LOGGER - MESSAGE");
486 logFileFormatComboBoxModel.addElement("%d{ABSOLUTE} %-5p [%c{1}] %m%n");
487 logFileFormatComboBoxModel.addElement("TIMESTAMP LEVEL [LOGGER] MESSAGE");
488 }
489
490 private void seedLogFileFormatTimestampComboBoxModel() {
491 logFileFormatTimestampFormatComboBoxModel.addElement("yyyy-MM-dd HH:mm:ss,SSS");
492 logFileFormatTimestampFormatComboBoxModel.addElement("yyyyMMdd HH:mm:ss.SSS");
493 logFileFormatTimestampFormatComboBoxModel.addElement("yyyy/MM/dd HH:mm:ss");
494 logFileFormatTimestampFormatComboBoxModel.addElement("dd MMM yyyy HH:mm:ss,SSS");
495 logFileFormatTimestampFormatComboBoxModel.addElement("HH:mm:ss,SSS");
496 logFileFormatTimestampFormatComboBoxModel.addElement("yyyy-MM-ddTHH:mm");
497 logFileFormatTimestampFormatComboBoxModel.addElement("yyyy-MM-ddTHH:mm:ss.SSS");
498 }
499
500 private JPanel buildUseExistingConfigurationPanel() {
501 existingConfigurationComboBoxModel = new DefaultComboBoxModel<>();
502
503 existingConfigurationComboBox = new JComboBox<>(existingConfigurationComboBoxModel);
504 existingConfigurationComboBox.setOpaque(false);
505 existingConfigurationComboBox.setToolTipText("Previously loaded configurations can be chosen here");
506 existingConfigurationComboBox.setEditable(true);
507
508 existingConfigurationComboBox.getEditor().getEditorComponent().addFocusListener(
509 new FocusListener() {
510 public void focusGained(FocusEvent e) {
511 selectAll();
512 }
513
514 private void selectAll() {
515 existingConfigurationComboBox.getEditor().selectAll();
516 }
517
518 public void focusLost(FocusEvent e) {
519 }
520 });
521
522 browseForAnExistingConfigurationButton = new JButton(new AbstractAction(" Open File... ") {
523 public void actionPerformed(ActionEvent e) {
524 try {
525
526 URL url = browseConfig();
527
528 if (url != null) {
529 existingConfigurationComboBoxModel.addElement(url.toExternalForm());
530 existingConfigurationComboBox.getModel().setSelectedItem(
531 url);
532 }
533 } catch (Exception ex) {
534 logger.error(
535 "Error browsing for Configuration file", ex);
536 }
537 }
538 });
539
540 browseForAnExistingConfigurationButton.setToolTipText(
541 "Shows a File Open dialog to allow you to find a configuration file");
542 JPanel panel = new JPanel(new GridBagLayout());
543 GridBagConstraints c = new GridBagConstraints();
544 c.gridx = 0;
545 c.gridy = 0;
546 c.gridwidth = 2;
547 c.anchor = GridBagConstraints.LINE_START;
548 c.insets = new Insets(0, 0, 5, 0);
549 panel.add(browseForAnExistingConfigurationButton, c);
550
551 c = new GridBagConstraints();
552 c.gridx = 0;
553 c.gridy = 1;
554 c.insets = new Insets(0, 5, 0, 5);
555 panel.add(new JLabel(" Configuration file URL "), c);
556
557 c = new GridBagConstraints();
558 c.gridx = 1;
559 c.gridy = 1;
560 c.weightx = 0.5;
561 c.fill = GridBagConstraints.HORIZONTAL;
562 panel.add(existingConfigurationComboBox, c);
563
564
565 return panel;
566 }
567
568
569
570
571
572
573 PanelModel getModel() {
574 return panelModel;
575 }
576
577
578
579
580
581
582
583
584 void setCompletionActionListener(ActionListener actionListener) {
585 completionActionListener = actionListener;
586 }
587
588 private void updateEnabledState(Component component) {
589 lowerPanel.removeAll();
590 if (component == useExistingConfigurationRadioButton) {
591 lowerPanel.add(useExistingConfigurationPanel, BorderLayout.NORTH);
592 }
593 if (component == networkReceiverRadioButton) {
594 lowerPanel.add(networkReceiverPanel, BorderLayout.NORTH);
595 }
596 if (component == logFileReceiverRadioButton) {
597 lowerPanel.add(logFileReceiverPanel, BorderLayout.NORTH);
598 }
599 if (component == log4jConfigReceiverRadioButton) {
600 lowerPanel.add(log4jConfigReceiverPanel, BorderLayout.NORTH);
601 }
602 lowerPanel.revalidate();
603 lowerPanel.repaint();
604 }
605
606
607
608
609
610 private URL browseConfig() throws MalformedURLException {
611
612 dialog.setVisible(false);
613 File selectedFile = SwingHelper.promptForFile(dialog, null, "Choose a Chainsaw configuration file", true);
614 URL result = null;
615 if (selectedFile == null) {
616 result = null;
617 }
618 if (selectedFile != null && (!selectedFile.exists() || !selectedFile.canRead())) {
619 result = null;
620 }
621 if (selectedFile != null) {
622 result = selectedFile.toURI().toURL();
623 }
624 EventQueue.invokeLater(() -> dialog.setVisible(true));
625 return result;
626 }
627
628
629
630
631
632 private URL browseFile(String title, boolean loadDialog) throws MalformedURLException {
633
634 dialog.setVisible(false);
635 File selectedFile = SwingHelper.promptForFile(dialog, null, title, loadDialog);
636 URL result = null;
637 if (selectedFile == null) {
638 result = null;
639 }
640 if (selectedFile != null && (!selectedFile.exists() || !selectedFile.canRead())) {
641 result = null;
642 }
643 if (selectedFile != null) {
644 result = selectedFile.toURI().toURL();
645 }
646 EventQueue.invokeLater(() -> dialog.setVisible(true));
647 return result;
648 }
649
650 public static void main(String[] args) {
651
652 JFrame frame = new JFrame();
653 frame.getContentPane().add(new ReceiverConfigurationPanel());
654 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
655 frame.pack();
656 frame.setVisible(true);
657 }
658
659
660
661
662 public final boolean isDontWarnMeAgain() {
663
664 return dontwarnIfNoReceiver.isSelected();
665 }
666
667 public void setDialog(Container dialog) {
668 this.dialog = dialog;
669 }
670
671
672
673
674
675 class PanelModel {
676
677 private File file;
678
679 private boolean cancelled = true;
680 private String lastLogFormat;
681 private File saveConfigFile;
682
683 public PanelModel() {
684 file = new File(SettingsManager.getInstance().getSettingsDirectory(), "receiver-config.xml");
685 }
686
687 boolean isNetworkReceiverMode() {
688
689 return !cancelled && networkReceiverRadioButton.isSelected();
690 }
691
692 int getNetworkReceiverPort() {
693
694 return Integer.parseInt(networkReceiverPortComboBoxModel.getSelectedItem().toString());
695 }
696
697 Class<? extends Receiver> getNetworkReceiverClass() throws ClassNotFoundException {
698 return Class.forName(networkReceiverClassNameComboBoxModel.getSelectedItem().toString()).asSubclass(Receiver.class);
699 }
700
701 boolean isLoadConfig() {
702
703 return !cancelled && useExistingConfigurationRadioButton.isSelected();
704 }
705
706 boolean isLogFileReceiverConfig() {
707 return !cancelled && logFileReceiverRadioButton.isSelected();
708 }
709
710 boolean isLog4jConfig() {
711 return !cancelled && log4jConfigReceiverRadioButton.isSelected();
712 }
713
714 URL getConfigToLoad() {
715
716 try {
717 return new URL(existingConfigurationComboBoxModel.getSelectedItem().toString());
718 } catch (MalformedURLException e) {
719 return null;
720 }
721 }
722
723 URL getDefaultConfigFileURL() {
724 try {
725 return file.toURI().toURL();
726 } catch (MalformedURLException e) {
727 logger.error("Error loading saved configurations by Chainsaw", e);
728 }
729 return null;
730 }
731
732 File getSaveConfigFile() {
733 return saveConfigFile;
734 }
735
736 void setSaveConfigFile(File file) {
737 this.saveConfigFile = file;
738 }
739
740 URL getLogFileURL() {
741 try {
742 Object item = logFileURLTextField.getText();
743 if (item != null) {
744 return new URL(item.toString());
745 }
746 } catch (MalformedURLException e) {
747 logger.error("Error retrieving log file URL", e);
748 }
749 return null;
750 }
751
752 String getLogFormat() {
753 if (cancelled) {
754 return lastLogFormat;
755 }
756 Object item = logFileFormatComboBox.getSelectedItem();
757 if (item != null) {
758 return item.toString();
759 }
760 return null;
761 }
762
763 boolean isPatternLayoutLogFormat() {
764 Object item = logFileFormatTypeComboBox.getSelectedItem();
765 return item != null && item.toString().toLowerCase(Locale.ENGLISH).contains("patternlayout");
766 }
767
768 String getLogFormatTimestampFormat() {
769 Object item = logFileFormatTimestampFormatComboBox.getSelectedItem();
770 if (item != null) {
771 return item.toString();
772 }
773
774 return null;
775 }
776
777 public void setCancelled(boolean cancelled) {
778 this.cancelled = cancelled;
779 }
780
781 public void setLogFormat(String lastLogFormat) {
782 this.lastLogFormat = lastLogFormat;
783 logFileFormatComboBoxModel.removeElement(lastLogFormat);
784 logFileFormatComboBoxModel.insertElementAt(lastLogFormat, 0);
785 logFileFormatComboBox.setSelectedIndex(0);
786 }
787
788 public boolean isCancelled() {
789 return cancelled;
790 }
791
792 public File getLog4jConfigFile() {
793 try {
794 URL newConfigurationURL = new URL(log4jConfigURLTextField.getText());
795 return new File(newConfigurationURL.toURI());
796 } catch (URISyntaxException | MalformedURLException e) {
797 e.printStackTrace();
798 }
799 return null;
800 }
801 }
802 }