blob: be19870c5bb30d5630d5742610a9b09c714c0b90 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.log4j.chainsaw;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.List;
import java.util.Locale;
import javax.swing.*;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.chainsaw.helper.SwingHelper;
import org.apache.log4j.chainsaw.prefs.SettingsManager;
import org.apache.log4j.net.SocketReceiver;
import org.apache.log4j.net.UDPReceiver;
import org.apache.log4j.plugins.Receiver;
/**
* A panel providing receiver configuration options
*
* @author Paul Smith
*/
class ReceiverConfigurationPanel extends JPanel {
private final Logger logger = LogManager.getLogger(ReceiverConfigurationPanel.class);
private final PanelModel panelModel = new PanelModel();
//network receiver widgets
private JComboBox<String> networkReceiverPortComboBox;
private JComboBox<String> networkReceiverClassNameComboBox;
private DefaultComboBoxModel<String> networkReceiverClassNameComboBoxModel;
private DefaultComboBoxModel<String> networkReceiverPortComboBoxModel;
//log4j config receiver widgets
private JButton browseLog4jConfigButton;
private JTextField log4jConfigURLTextField;
//logfile receiver widgets
private JButton browseLogFileButton;
private JComboBox<String> logFileFormatTypeComboBox;
private JComboBox<String> logFileFormatComboBox;
private JComboBox<String> logFileFormatTimestampFormatComboBox;
private JTextField logFileURLTextField;
private DefaultComboBoxModel<String> logFileFormatComboBoxModel;
private DefaultComboBoxModel<String> logFileFormatTimestampFormatComboBoxModel;
//use existing configuration widgets
private JButton browseForAnExistingConfigurationButton;
private DefaultComboBoxModel<String> existingConfigurationComboBoxModel;
private JComboBox<String> existingConfigurationComboBox;
//don't warn again widgets
private JCheckBox dontwarnIfNoReceiver;
private JButton saveButton;
private JButton okButton;
private JButton cancelButton;
//radiobutton widgets
private JRadioButton log4jConfigReceiverRadioButton;
private JRadioButton logFileReceiverRadioButton;
private JRadioButton networkReceiverRadioButton;
private JRadioButton useExistingConfigurationRadioButton;
private ButtonGroup buttonGroup;
private JPanel lowerPanel;
private final JPanel networkReceiverPanel = buildNetworkReceiverPanel();
private final JPanel logFileReceiverPanel = buildLogFileReceiverPanel();
private final JPanel log4jConfigReceiverPanel = buildLog4jConfigReceiverPanel();
private final JPanel useExistingConfigurationPanel = buildUseExistingConfigurationPanel();
private final JPanel dontWarnAndOKPanel = buildDontWarnAndOKPanel();
private final JPanel bottomDescriptionPanel = buildBottomDescriptionPanel();
//set by LogUI to handle hiding of the dialog
private ActionListener completionActionListener;
//used as frame for file open dialogs
private Container dialog;
ReceiverConfigurationPanel() {
setBorder(BorderFactory.createEmptyBorder(5, 15, 5, 15));
setLayout(new GridBagLayout());
buttonGroup = new ButtonGroup();
lowerPanel = new JPanel(new BorderLayout());
lowerPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(5, 5, 5, 5)));
lowerPanel.setPreferredSize(new Dimension(600, 200));
lowerPanel.setMinimumSize(new Dimension(600, 200));
int yPos = 0;
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = yPos++;
c.fill = GridBagConstraints.HORIZONTAL;
log4jConfigReceiverRadioButton = new JRadioButton(" Use fileappender entries from a log4j config file ");
buttonGroup.add(log4jConfigReceiverRadioButton);
add(log4jConfigReceiverRadioButton, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = yPos++;
c.fill = GridBagConstraints.HORIZONTAL;
logFileReceiverRadioButton = new JRadioButton(" Process a log file ");
buttonGroup.add(logFileReceiverRadioButton);
add(logFileReceiverRadioButton, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = yPos++;
c.fill = GridBagConstraints.HORIZONTAL;
networkReceiverRadioButton = new JRadioButton(" Receive events from the network ");
buttonGroup.add(networkReceiverRadioButton);
add(networkReceiverRadioButton, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = yPos++;
c.fill = GridBagConstraints.HORIZONTAL;
useExistingConfigurationRadioButton = new JRadioButton(" Use a Chainsaw config file ");
buttonGroup.add(useExistingConfigurationRadioButton);
add(useExistingConfigurationRadioButton, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = yPos++;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(10, 10, 10, 0);
add(lowerPanel, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = yPos++;
c.weightx = 0.5;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(0, 10, 0, 0);
add(dontWarnAndOKPanel, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = yPos++;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(10, 10, 10, 0);
add(bottomDescriptionPanel, c);
/**
* This listener activates/deactivates certain controls based on the current
* state of the options
*/
ActionListener al = e -> updateEnabledState((Component)e.getSource());
logFileReceiverRadioButton.addActionListener(al);
log4jConfigReceiverRadioButton.addActionListener(al);
networkReceiverRadioButton.addActionListener(al);
useExistingConfigurationRadioButton.addActionListener(al);
buttonGroup.setSelected(log4jConfigReceiverRadioButton.getModel(), true);
updateEnabledState(log4jConfigReceiverRadioButton);
}
private JPanel buildDontWarnAndOKPanel() {
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 1.0;
c.anchor = GridBagConstraints.LINE_START;
dontwarnIfNoReceiver = new JCheckBox(" Always start Chainsaw with this configuration ");
panel.add(dontwarnIfNoReceiver, c);
saveButton = new JButton(" Save configuration as... ");
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 0;
c.insets = new Insets(0, 0, 0, 10);
panel.add(saveButton, c);
okButton = new JButton(" OK ");
cancelButton = new JButton(" Cancel ");
List<JButton> okCancelButtons = SwingHelper.orderOKCancelButtons(okButton, cancelButton);
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 2;
c.gridy = 0;
c.insets = new Insets(0, 0, 0, 10);
panel.add(okCancelButtons.get(0), c);
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 3;
c.gridy = 0;
panel.add(okCancelButtons.get(1), c);
cancelButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
panelModel.setCancelled(true);
completionActionListener.actionPerformed(new ActionEvent(this, -1, "cancelled"));
}
});
okButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
panelModel.setCancelled(false);
if (logFileFormatComboBox.getSelectedItem() != null && !(logFileFormatComboBox.getSelectedItem().toString().trim().equals(""))) {
panelModel.setLogFormat(logFileFormatComboBox.getSelectedItem().toString());
}
completionActionListener.actionPerformed(new ActionEvent(this, -1, "ok"));
}
});
saveButton.addActionListener(e -> {
try {
URL url = browseFile("Choose a path and file name to save", false);
if (url != null) {
File file = new File(url.toURI());
panelModel.setSaveConfigFile(file);
}
} catch (Exception ex) {
logger.error(
"Error browsing for log file", ex);
}
});
return panel;
}
private JPanel buildBottomDescriptionPanel() {
JTextPane descriptionTextPane = new JTextPane();
StyledDocument doc = descriptionTextPane.getStyledDocument();
SimpleAttributeSet center = new SimpleAttributeSet();
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
doc.setParagraphAttributes(0, doc.getLength(), center, false);
descriptionTextPane.setText(" An example configuration file is available from the Welcome tab ");
descriptionTextPane.setEditable(false);
descriptionTextPane.setOpaque(false);
descriptionTextPane.setFont(getFont());
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 1.0;
c.fill = GridBagConstraints.HORIZONTAL;
panel.add(descriptionTextPane, c);
return panel;
}
private JPanel buildNetworkReceiverPanel() {
networkReceiverPortComboBoxModel = new DefaultComboBoxModel<>();
networkReceiverPortComboBoxModel.addElement("4445");
networkReceiverPortComboBoxModel.addElement("4560");
networkReceiverPortComboBox = new JComboBox<>(networkReceiverPortComboBoxModel);
networkReceiverPortComboBox.setEditable(true);
networkReceiverPortComboBox.setOpaque(false);
networkReceiverClassNameComboBoxModel = new DefaultComboBoxModel<>();
networkReceiverClassNameComboBoxModel.addElement(SocketReceiver.class.getName());
networkReceiverClassNameComboBoxModel.addElement(UDPReceiver.class.getName());
networkReceiverClassNameComboBox = new JComboBox<>(networkReceiverClassNameComboBoxModel);
networkReceiverClassNameComboBox.setEditable(false);
networkReceiverClassNameComboBox.setOpaque(false);
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(0, 0, 0, 5);
panel.add(networkReceiverClassNameComboBox, c);
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 1;
c.gridy = 0;
panel.add(networkReceiverPortComboBox, c);
return panel;
}
private JPanel buildLog4jConfigReceiverPanel() {
log4jConfigURLTextField = new JTextField();
browseLog4jConfigButton = new JButton(new AbstractAction(" Open File... ") {
public void actionPerformed(ActionEvent e) {
try {
URL url = browseConfig();
if (url != null) {
log4jConfigURLTextField.setText(url.toExternalForm());
}
} catch (Exception ex) {
logger.error(
"Error browsing for log4j config file", ex);
}
}
});
browseLog4jConfigButton.setToolTipText(
"Shows a File Open dialog to allow you to find a log4j configuration file");
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.anchor = GridBagConstraints.LINE_START;
c.insets = new Insets(0, 0, 5, 0);
panel.add(browseLog4jConfigButton, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.insets = new Insets(0, 5, 0, 5);
panel.add(new JLabel(" log4j configuration file URL "), c);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 1;
c.weightx = 0.5;
c.fill = GridBagConstraints.HORIZONTAL;
panel.add(log4jConfigURLTextField, c);
return panel;
}
private JPanel buildLogFileReceiverPanel() {
JPanel panel = new JPanel(new GridBagLayout());
browseLogFileButton = new JButton(new AbstractAction(" Open File... ") {
public void actionPerformed(ActionEvent e) {
try {
URL url = browseFile("Select a log file", true);
if (url != null) {
String item = url.toURI().toString();
logFileURLTextField.setText(item);
}
} catch (Exception ex) {
logger.error(
"Error browsing for log file", ex);
}
}
});
browseLogFileButton.setToolTipText("Shows a File Open dialog to allow you to find a log file");
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.LINE_START;
c.insets = new Insets(0, 0, 5, 0);
panel.add(browseLogFileButton, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.anchor = GridBagConstraints.LINE_END;
c.insets = new Insets(0, 0, 5, 5);
panel.add(new JLabel(" Log file URL "), c);
logFileURLTextField = new JTextField();
logFileURLTextField.setEditable(true);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 1;
c.weightx = 1.0;
c.gridwidth = 1;
c.anchor = GridBagConstraints.LINE_START;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(0, 0, 5, 0);
panel.add(logFileURLTextField, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 2;
c.anchor = GridBagConstraints.LINE_END;
c.insets = new Insets(0, 0, 5, 5);
panel.add(new JLabel(" Log file format type "), c);
DefaultComboBoxModel<String> comboBoxModel = new DefaultComboBoxModel<>();
comboBoxModel.addElement("LogFilePatternReceiver LogFormat");
comboBoxModel.addElement("PatternLayout format");
logFileFormatTypeComboBox = new JComboBox<>(comboBoxModel);
logFileFormatTypeComboBox.setOpaque(false);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 2;
c.anchor = GridBagConstraints.LINE_START;
c.insets = new Insets(0, 0, 5, 0);
panel.add(logFileFormatTypeComboBox, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 3;
c.anchor = GridBagConstraints.LINE_END;
c.insets = new Insets(0, 5, 5, 5);
panel.add(new JLabel(" Log file format "), c);
logFileFormatComboBoxModel = new DefaultComboBoxModel<>();
seedLogFileFormatComboBoxModel();
logFileFormatComboBox = new JComboBox<>(logFileFormatComboBoxModel);
logFileFormatComboBox.setEditable(true);
logFileFormatComboBox.setOpaque(false);
logFileFormatComboBox.setSelectedIndex(0);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 3;
c.weightx = 0.5;
c.anchor = GridBagConstraints.LINE_START;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(0, 0, 5, 0);
panel.add(logFileFormatComboBox, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 4;
c.insets = new Insets(0, 5, 5, 5);
panel.add(new JLabel(" Log file timestamp format "), c);
logFileFormatTimestampFormatComboBoxModel = new DefaultComboBoxModel<>();
seedLogFileFormatTimestampComboBoxModel();
logFileFormatTimestampFormatComboBox = new JComboBox<>(logFileFormatTimestampFormatComboBoxModel);
logFileFormatTimestampFormatComboBox.setEditable(true);
logFileFormatTimestampFormatComboBox.setOpaque(false);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 4;
c.weightx = 0.5;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(0, 0, 0, 0);
panel.add(logFileFormatTimestampFormatComboBox, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 5;
c.gridwidth=5;
c.insets = new Insets(15, 5, 0, 5);
panel.add(new JLabel("<html> See PatternLayout or LogFilePatternReceiver JavaDoc for details </html>"), c);
return panel;
}
private void seedLogFileFormatComboBoxModel()
{
logFileFormatComboBoxModel.addElement("MESSAGE");
logFileFormatComboBoxModel.addElement("%p %t %c - %m%n");
logFileFormatComboBoxModel.addElement("LEVEL THREAD LOGGER - MESSAGE");
logFileFormatComboBoxModel.addElement("%d{ABSOLUTE} %-5p [%c{1}] %m%n");
logFileFormatComboBoxModel.addElement("TIMESTAMP LEVEL [LOGGER] MESSAGE");
}
private void seedLogFileFormatTimestampComboBoxModel()
{
logFileFormatTimestampFormatComboBoxModel.addElement("yyyy-MM-dd HH:mm:ss,SSS");
logFileFormatTimestampFormatComboBoxModel.addElement("yyyyMMdd HH:mm:ss.SSS");
logFileFormatTimestampFormatComboBoxModel.addElement("yyyy/MM/dd HH:mm:ss");
logFileFormatTimestampFormatComboBoxModel.addElement("dd MMM yyyy HH:mm:ss,SSS");
logFileFormatTimestampFormatComboBoxModel.addElement("HH:mm:ss,SSS");
logFileFormatTimestampFormatComboBoxModel.addElement("yyyy-MM-ddTHH:mm");
logFileFormatTimestampFormatComboBoxModel.addElement("yyyy-MM-ddTHH:mm:ss.SSS");
}
private JPanel buildUseExistingConfigurationPanel() {
existingConfigurationComboBoxModel = new DefaultComboBoxModel<>();
existingConfigurationComboBox = new JComboBox<>(existingConfigurationComboBoxModel);
existingConfigurationComboBox.setOpaque(false);
existingConfigurationComboBox.setToolTipText("Previously loaded configurations can be chosen here");
existingConfigurationComboBox.setEditable(true);
existingConfigurationComboBox.getEditor().getEditorComponent().addFocusListener(
new FocusListener() {
public void focusGained(FocusEvent e) {
selectAll();
}
private void selectAll() {
existingConfigurationComboBox.getEditor().selectAll();
}
public void focusLost(FocusEvent e) {
}
});
browseForAnExistingConfigurationButton = new JButton(new AbstractAction(" Open File... ") {
public void actionPerformed(ActionEvent e) {
try {
URL url = browseConfig();
if (url != null) {
existingConfigurationComboBoxModel.addElement(url.toExternalForm());
existingConfigurationComboBox.getModel().setSelectedItem(
url);
}
} catch (Exception ex) {
logger.error(
"Error browsing for Configuration file", ex);
}
}
});
browseForAnExistingConfigurationButton.setToolTipText(
"Shows a File Open dialog to allow you to find a configuration file");
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.anchor = GridBagConstraints.LINE_START;
c.insets = new Insets(0, 0, 5, 0);
panel.add(browseForAnExistingConfigurationButton, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.insets = new Insets(0, 5, 0, 5);
panel.add(new JLabel(" Configuration file URL "), c);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 1;
c.weightx = 0.5;
c.fill = GridBagConstraints.HORIZONTAL;
panel.add(existingConfigurationComboBox, c);
return panel;
}
/**
* Returns the current Model/state of the chosen options by the user.
* @return model
*/
PanelModel getModel() {
return panelModel;
}
/**
* Clients of this panel can configure the ActionListener to be used
* when the user presses the OK button, so they can read
* back this Panel's model top determine what to do.
* @param actionListener listener which will be notified that ok was selected
*/
void setCompletionActionListener(ActionListener actionListener) {
completionActionListener = actionListener;
}
private void updateEnabledState(Component component) {
lowerPanel.removeAll();
if (component == useExistingConfigurationRadioButton) {
lowerPanel.add(useExistingConfigurationPanel, BorderLayout.NORTH);
}
if (component == networkReceiverRadioButton) {
lowerPanel.add(networkReceiverPanel, BorderLayout.NORTH);
}
if (component == logFileReceiverRadioButton) {
lowerPanel.add(logFileReceiverPanel, BorderLayout.NORTH);
}
if (component == log4jConfigReceiverRadioButton) {
lowerPanel.add(log4jConfigReceiverPanel, BorderLayout.NORTH);
}
lowerPanel.revalidate();
lowerPanel.repaint();
}
/**
* Returns the URL chosen by the user for a Configuration file
* or null if they cancelled.
*/
private URL browseConfig() throws MalformedURLException {
//hiding and showing the dialog to avoid focus issues with 2 dialogs
dialog.setVisible(false);
File selectedFile = SwingHelper.promptForFile(dialog, null, "Choose a Chainsaw configuration file", true);
URL result = null;
if (selectedFile == null) {
result = null;
}
if (selectedFile != null && (!selectedFile.exists() || !selectedFile.canRead())) {
result = null;
}
if (selectedFile != null) {
result = selectedFile.toURI().toURL();
}
EventQueue.invokeLater(() -> dialog.setVisible(true));
return result;
}
/**
* Returns the URL chosen by the user for a Configuration file
* or null if they cancelled.
*/
private URL browseFile(String title, boolean loadDialog) throws MalformedURLException {
//hiding and showing the dialog to avoid focus issues with 2 dialogs
dialog.setVisible(false);
File selectedFile = SwingHelper.promptForFile(dialog, null, title, loadDialog);
URL result = null;
if (selectedFile == null) {
result = null;
}
if (selectedFile != null && (!selectedFile.exists() || !selectedFile.canRead())) {
result = null;
}
if (selectedFile != null) {
result = selectedFile.toURI().toURL();
}
EventQueue.invokeLater(() -> dialog.setVisible(true));
return result;
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(new ReceiverConfigurationPanel());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
/**
* @return Returns the dontWarnMeAgain.
*/
public final boolean isDontWarnMeAgain() {
return dontwarnIfNoReceiver.isSelected();
}
public void setDialog(Container dialog) {
this.dialog = dialog;
}
/**
* This class represents the model of the chosen options the user
* has configured.
*
*/
class PanelModel {
private File file;
//default to cancelled
private boolean cancelled = true;
private String lastLogFormat;
private File saveConfigFile;
public PanelModel(){
file = new File(SettingsManager.getInstance().getSettingsDirectory(), "receiver-config.xml");
}
boolean isNetworkReceiverMode() {
return !cancelled && networkReceiverRadioButton.isSelected();
}
int getNetworkReceiverPort() {
return Integer.parseInt(networkReceiverPortComboBoxModel.getSelectedItem().toString());
}
Class<? extends Receiver> getNetworkReceiverClass() throws ClassNotFoundException {
return Class.forName(networkReceiverClassNameComboBoxModel.getSelectedItem().toString()).asSubclass(Receiver.class);
}
boolean isLoadConfig() {
return !cancelled && useExistingConfigurationRadioButton.isSelected();
}
boolean isLogFileReceiverConfig() {
return !cancelled && logFileReceiverRadioButton.isSelected();
}
boolean isLog4jConfig() {
return !cancelled && log4jConfigReceiverRadioButton.isSelected();
}
URL getConfigToLoad() {
try
{
return new URL(existingConfigurationComboBoxModel.getSelectedItem().toString());
}
catch (MalformedURLException e)
{
return null;
}
}
URL getDefaultConfigFileURL() {
try {
return file.toURI().toURL();
} catch (MalformedURLException e) {
logger.error("Error loading saved configurations by Chainsaw", e);
}
return null;
}
File getSaveConfigFile() {
return saveConfigFile;
}
void setSaveConfigFile(File file) {
this.saveConfigFile = file;
}
URL getLogFileURL() {
try
{
Object item = logFileURLTextField.getText();
if (item != null) {
return new URL(item.toString());
}
}
catch (MalformedURLException e)
{
logger.error("Error retrieving log file URL", e);
}
return null;
}
String getLogFormat() {
if (cancelled) {
return lastLogFormat;
}
Object item = logFileFormatComboBox.getSelectedItem();
if (item != null) {
return item.toString();
}
return null;
}
boolean isPatternLayoutLogFormat() {
Object item = logFileFormatTypeComboBox.getSelectedItem();
return item != null && item.toString().toLowerCase(Locale.ENGLISH).contains("patternlayout");
}
String getLogFormatTimestampFormat() {
Object item = logFileFormatTimestampFormatComboBox.getSelectedItem();
if (item != null) {
return item.toString();
}
return null;
}
public void setCancelled(boolean cancelled)
{
this.cancelled = cancelled;
}
public void setLogFormat(String lastLogFormat) {
this.lastLogFormat = lastLogFormat;
logFileFormatComboBoxModel.removeElement(lastLogFormat);
logFileFormatComboBoxModel.insertElementAt(lastLogFormat, 0);
logFileFormatComboBox.setSelectedIndex(0);
}
public boolean isCancelled() {
return cancelled;
}
public File getLog4jConfigFile() {
try {
URL newConfigurationURL = new URL(log4jConfigURLTextField.getText());
return new File(newConfigurationURL.toURI());
} catch (URISyntaxException | MalformedURLException e) {
e.printStackTrace();
}
return null;
}
}
}