Minor UI fixes
- filedialog displayed on top of a jdialog has focus issues..now hiding the 'parent' dialog while the file dialog is displayed from the receiver config screen
- since MESSAGE is the default format, changed default pattern to LogFilePatternReceiver pattern
- fixed bug in filedialog usage
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
index 984a421..57746f1 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
@@ -21,7 +21,6 @@
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
-import java.awt.Event;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Point;
@@ -1463,9 +1462,118 @@
new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
- }
- });
+ applicationPreferenceModel.setShowNoReceiverWarning(!receiverConfigurationPanel.isDontWarnMeAgain());
+ //using this config next time - stop all plugins
+ if (receiverConfigurationPanel.isDontWarnMeAgain()) {
+ List plugins = pluginRegistry.getPlugins();
+ for (Iterator iter = plugins.iterator();iter.hasNext();) {
+ Plugin plugin = (Plugin)iter.next();
+ //don't stop ZeroConfPlugin if it is registered
+ if (!plugin.getName().toLowerCase().contains("zeroconf")) {
+ pluginRegistry.stopPlugin(plugin.getName());
+ }
+ }
+ }
+ URL configURL = null;
+
+ if (receiverConfigurationPanel.getModel().isNetworkReceiverMode()) {
+ int port = receiverConfigurationPanel.getModel().getNetworkReceiverPort();
+
+ try {
+ Class receiverClass = receiverConfigurationPanel.getModel().getNetworkReceiverClass();
+ Receiver networkReceiver = (Receiver) receiverClass.newInstance();
+ networkReceiver.setName(receiverClass.getSimpleName() + "-" + port);
+
+ Method portMethod =
+ networkReceiver.getClass().getMethod(
+ "setPort", new Class[] { int.class });
+ portMethod.invoke(
+ networkReceiver, new Object[] { new Integer(port) });
+
+ networkReceiver.setThreshold(Level.TRACE);
+
+ pluginRegistry.addPlugin(networkReceiver);
+ networkReceiver.activateOptions();
+ receiversPanel.updateReceiverTreeInDispatchThread();
+ //setting config URL here ensures we have the receiver panel auto-saved config loaded
+ if (receiverConfigurationPanel.isDontWarnMeAgain()) {
+ configURL = receiverConfigurationPanel.getModel().getSavedConfigToLoad();
+ }
+ } catch (Exception e3) {
+ MessageCenter.getInstance().getLogger().error(
+ "Error creating Receiver", e3);
+ MessageCenter.getInstance().getLogger().info(
+ "An error occurred creating your Receiver");
+ }
+ } else if (receiverConfigurationPanel.getModel().isLoadConfig() ||
+ receiverConfigurationPanel.getModel().isLoadSavedConfigs()) {
+ if (receiverConfigurationPanel.getModel().isLoadSavedConfigs()) {
+ configURL = receiverConfigurationPanel.getModel().getSavedConfigToLoad();
+ } else {
+ configURL = receiverConfigurationPanel.getModel().getConfigToLoad();
+ }
+ } else if (receiverConfigurationPanel.getModel().isLogFileReceiverConfig()) {
+ try {
+ URL fileURL = receiverConfigurationPanel.getModel().getLogFileURL();
+ if (fileURL != null) {
+ VFSLogFilePatternReceiver fileReceiver = new VFSLogFilePatternReceiver();
+ fileReceiver.setName(fileURL.getFile());
+ fileReceiver.setAutoReconnect(true);
+ fileReceiver.setContainer(LogUI.this);
+ fileReceiver.setAppendNonMatches(true);
+ fileReceiver.setFileURL(fileURL.toURI().toString());
+ fileReceiver.setTailing(true);
+ if (receiverConfigurationPanel.getModel().isPatternLayoutLogFormat()) {
+ fileReceiver.setLogFormat(LogFilePatternLayoutBuilder.getLogFormatFromPatternLayout(receiverConfigurationPanel.getModel().getLogFormat()));
+ } else {
+ fileReceiver.setLogFormat(receiverConfigurationPanel.getModel().getLogFormat());
+ }
+ fileReceiver.setTimestampFormat(receiverConfigurationPanel.getModel().getLogFormatTimestampFormat());
+ fileReceiver.setThreshold(Level.TRACE);
+
+ pluginRegistry.addPlugin(fileReceiver);
+ fileReceiver.activateOptions();
+ receiversPanel.updateReceiverTreeInDispatchThread();
+ if (receiverConfigurationPanel.isDontWarnMeAgain()) {
+ configURL = receiverConfigurationPanel.getModel().getSavedConfigToLoad();
+ }
+ }
+ } catch (Exception e2) {
+ MessageCenter.getInstance().getLogger().error(
+ "Error creating Receiver", e2);
+ MessageCenter.getInstance().getLogger().info(
+ "An error occurred creating your Receiver");
+ }
+ }
+ if (configURL != null) {
+ MessageCenter.getInstance().getLogger().debug(
+ "Initialiazing Log4j with " + configURL.toExternalForm());
+ final URL finalURL = configURL;
+ new Thread(
+ new Runnable() {
+ public void run() {
+ if (receiverConfigurationPanel.isDontWarnMeAgain()) {
+ applicationPreferenceModel.setConfigurationURL(finalURL.toExternalForm());
+ } else {
+ try {
+ if (new File(finalURL.toURI()).exists()) {
+ loadConfigurationUsingPluginClassLoader(finalURL);
+ }
+ }
+ catch (URISyntaxException e) {
+ //ignore
+ }
+ }
+
+ receiversPanel.updateReceiverTreeInDispatchThread();
+ }
+ }).start();
+ }
+ }
+ });
+
+ receiverConfigurationPanel.setDialog(dialog);
dialog.getContentPane().add(receiverConfigurationPanel);
dialog.pack();
@@ -1476,114 +1584,6 @@
(screenSize.height / 2) - (dialog.getHeight() / 2));
dialog.setVisible(true);
- applicationPreferenceModel.setShowNoReceiverWarning(!receiverConfigurationPanel.isDontWarnMeAgain());
- //using this config next time - stop all plugins
- if (receiverConfigurationPanel.isDontWarnMeAgain()) {
- List plugins = pluginRegistry.getPlugins();
- for (Iterator iter = plugins.iterator();iter.hasNext();) {
- Plugin plugin = (Plugin)iter.next();
- //don't stop ZeroConfPlugin if it is registered
- if (!plugin.getName().toLowerCase().contains("zeroconf")) {
- pluginRegistry.stopPlugin(plugin.getName());
- }
- }
- }
- URL configURL = null;
-
- if (receiverConfigurationPanel.getModel().isNetworkReceiverMode()) {
- int port = receiverConfigurationPanel.getModel().getNetworkReceiverPort();
-
- try {
- Class receiverClass = receiverConfigurationPanel.getModel().getNetworkReceiverClass();
- Receiver networkReceiver = (Receiver) receiverClass.newInstance();
- networkReceiver.setName(receiverClass.getSimpleName() + "-" + port);
-
- Method portMethod =
- networkReceiver.getClass().getMethod(
- "setPort", new Class[] { int.class });
- portMethod.invoke(
- networkReceiver, new Object[] { new Integer(port) });
-
- networkReceiver.setThreshold(Level.TRACE);
-
- pluginRegistry.addPlugin(networkReceiver);
- networkReceiver.activateOptions();
- receiversPanel.updateReceiverTreeInDispatchThread();
- //setting config URL here ensures we have the receiver panel auto-saved config loaded
- if (receiverConfigurationPanel.isDontWarnMeAgain()) {
- configURL = receiverConfigurationPanel.getModel().getSavedConfigToLoad();
- }
- } catch (Exception e) {
- MessageCenter.getInstance().getLogger().error(
- "Error creating Receiver", e);
- MessageCenter.getInstance().getLogger().info(
- "An error occurred creating your Receiver");
- }
- } else if (receiverConfigurationPanel.getModel().isLoadConfig() ||
- receiverConfigurationPanel.getModel().isLoadSavedConfigs()) {
- if (receiverConfigurationPanel.getModel().isLoadSavedConfigs()) {
- configURL = receiverConfigurationPanel.getModel().getSavedConfigToLoad();
- } else {
- configURL = receiverConfigurationPanel.getModel().getConfigToLoad();
- }
- } else if (receiverConfigurationPanel.getModel().isLogFileReceiverConfig()) {
- try {
- URL fileURL = receiverConfigurationPanel.getModel().getLogFileURL();
- if (fileURL != null) {
- VFSLogFilePatternReceiver fileReceiver = new VFSLogFilePatternReceiver();
- fileReceiver.setName(fileURL.getFile());
- fileReceiver.setAutoReconnect(true);
- fileReceiver.setContainer(LogUI.this);
- fileReceiver.setAppendNonMatches(true);
- fileReceiver.setFileURL(fileURL.toURI().toString());
- fileReceiver.setTailing(true);
- if (receiverConfigurationPanel.getModel().isPatternLayoutLogFormat()) {
- fileReceiver.setLogFormat(LogFilePatternLayoutBuilder.getLogFormatFromPatternLayout(receiverConfigurationPanel.getModel().getLogFormat()));
- } else {
- fileReceiver.setLogFormat(receiverConfigurationPanel.getModel().getLogFormat());
- }
- fileReceiver.setTimestampFormat(receiverConfigurationPanel.getModel().getLogFormatTimestampFormat());
- fileReceiver.setThreshold(Level.TRACE);
-
- pluginRegistry.addPlugin(fileReceiver);
- fileReceiver.activateOptions();
- receiversPanel.updateReceiverTreeInDispatchThread();
- if (receiverConfigurationPanel.isDontWarnMeAgain()) {
- configURL = receiverConfigurationPanel.getModel().getSavedConfigToLoad();
- }
- }
- } catch (Exception e) {
- MessageCenter.getInstance().getLogger().error(
- "Error creating Receiver", e);
- MessageCenter.getInstance().getLogger().info(
- "An error occurred creating your Receiver");
- }
- }
- if (configURL != null) {
- MessageCenter.getInstance().getLogger().debug(
- "Initialiazing Log4j with " + configURL.toExternalForm());
- final URL finalURL = configURL;
- new Thread(
- new Runnable() {
- public void run() {
- if (receiverConfigurationPanel.isDontWarnMeAgain()) {
- applicationPreferenceModel.setConfigurationURL(finalURL.toExternalForm());
- } else {
- try {
- if (new File(finalURL.toURI()).exists()) {
- loadConfigurationUsingPluginClassLoader(finalURL);
- }
- }
- catch (URISyntaxException e) {
- //ignore
- }
- }
-
- receiversPanel.updateReceiverTreeInDispatchThread();
- }
- }).start();
- }
-
}
});
}
diff --git a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
index 8f276f1..bbc3ee3 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
@@ -18,7 +18,9 @@
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;
@@ -111,8 +113,10 @@
//set by LogUI to handle hiding of the dialog
private ActionListener completionActionListener;
+ //used as frame for file open dialogs
+ private Container dialog;
- ReceiverConfigurationPanel() {
+ ReceiverConfigurationPanel() {
setBorder(BorderFactory.createEmptyBorder(5, 15, 5, 15));
setLayout(new GridBagLayout());
@@ -363,8 +367,8 @@
panel.add(new JLabel(" Log file format type "), c);
DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel();
- comboBoxModel.addElement("PatternLayout format");
comboBoxModel.addElement("LogFilePatternReceiver LogFormat");
+ comboBoxModel.addElement("PatternLayout format");
logFileFormatTypeComboBox = new JComboBox(comboBoxModel);
logFileFormatTypeComboBox.setOpaque(false);
@@ -553,15 +557,25 @@
* or null if they cancelled.
*/
private URL browseConfig() throws MalformedURLException {
- File selectedFile = SwingHelper.promptForFile(this, null, "Choose a Chainsaw configuration file");
+ //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");
+ URL result = null;
if (selectedFile == null) {
- return null;
+ result = null;
}
-
- if (!selectedFile.exists() || !selectedFile.canRead()) {
- return null;
+ if (selectedFile != null && (!selectedFile.exists() || !selectedFile.canRead())) {
+ result = null;
}
- return selectedFile.toURI().toURL();
+ if (selectedFile != null) {
+ result = selectedFile.toURI().toURL();
+ }
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ dialog.setVisible(true);
+ }
+ });
+ return result;
}
/**
@@ -569,17 +583,25 @@
* or null if they cancelled.
*/
private URL browseLogFile() throws MalformedURLException {
-
- File selectedFile = SwingHelper.promptForFile(this, null, "Select a log file");
+ //hiding and showing the dialog to avoid focus issues with 2 dialogs
+ dialog.setVisible(false);
+ File selectedFile = SwingHelper.promptForFile(dialog, null, "Select a log file");
+ URL result = null;
if (selectedFile == null) {
- return null;
+ result = null;
}
-
- if (!selectedFile.exists() || !selectedFile.canRead()) {
- return null;
+ if (selectedFile != null && (!selectedFile.exists() || !selectedFile.canRead())) {
+ result = null;
}
-
- return selectedFile.toURI().toURL();
+ if (selectedFile != null) {
+ result = selectedFile.toURI().toURL();
+ }
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ dialog.setVisible(true);
+ }
+ });
+ return result;
}
public static void main(String[] args) {
@@ -599,7 +621,11 @@
return dontwarnIfNoReceiver.isSelected();
}
- /**
+ public void setDialog(Container dialog) {
+ this.dialog = dialog;
+ }
+
+ /**
* This class represents the model of the chosen options the user
* has configured.
*
diff --git a/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java b/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java
index 018e45c..89045a6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java
+++ b/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java
@@ -20,10 +20,10 @@
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
+import java.awt.EventQueue;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Toolkit;
-import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.io.File;
@@ -38,6 +38,7 @@
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
/**
* A collection of standard utility methods for use within Swing.
@@ -109,7 +110,14 @@
public static File promptForFile(Container parent, String defaultPath, String title) {
if (SwingHelper.isMacOSX()) {
//use filedialog on mac
- FileDialog fileDialog = new FileDialog((Frame)null, title);
+ Component root = SwingUtilities.getRoot(parent);
+ Frame frame = null;
+ if (root instanceof Frame) {
+ frame = (Frame) root;
+ }
+
+ FileDialog fileDialog = new FileDialog(frame, title);
+ fileDialog.setModal(true);
if (defaultPath != null) {
fileDialog.setDirectory(defaultPath);
}
@@ -118,7 +126,11 @@
if (fileString == null) {
return null;
}
+ if (fileDialog.getDirectory() != null) {
+ return new File(fileDialog.getDirectory(), fileString);
+ } else {
return new File(fileString);
+ }
} else {
JFileChooser chooser;