psmith 2003/08/27 22:39:04
Modified: src/java/org/apache/log4j/chainsaw LogUI.java
NoReceiversWarningPanel.java
Log:
Hooked up the new No Receivers warning panel.
I have not had time to hook up the "Remember the
chosen config URL" function to this panel, and I would
like to display a warning icon in the Dialog like
the JOptionPanel gave us, but that will have to wait
for next time.
Revision Changes Path
1.8 +165 -128 jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java
Index: LogUI.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- LogUI.java 7 Aug 2003 07:56:04 -0000 1.7
+++ LogUI.java 28 Aug 2003 05:39:04 -0000 1.8
@@ -123,8 +123,8 @@
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JComponent;
+import javax.swing.JDialog;
import javax.swing.JEditorPane;
-import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
@@ -153,7 +153,6 @@
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
-import javax.swing.filechooser.FileFilter;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
@@ -217,6 +216,8 @@
private ChainsawAbout aboutBox;
private final SettingsManager sm = SettingsManager.getInstance();
private String lookAndFeelClassName;
+ private final NoReceiversWarningPanel noReceiversWarningPanel =
+ new NoReceiversWarningPanel();
/**
* Set to true, if and only if the GUI has completed
@@ -227,21 +228,20 @@
*/
private boolean isGUIFullyInitialized = false;
private Object initializationLock = new Object();
-
+
/**
* The shutdownAction is called when the user requests to exit
* Chainsaw, and by default this exits the VM, but
* a developer may replace this action with something that better suits
* their needs
*/
- private Action shutdownAction = new AbstractAction() {
+ private Action shutdownAction =
+ new AbstractAction() {
+ public void actionPerformed(ActionEvent e) {
+ System.exit(0);
+ }
+ };
- public void actionPerformed(ActionEvent e)
- {
- System.exit(0);
- }
- };
-
/**
* Clients can register a ShutdownListener to be notified
* when the user has requested Chainsaw to exit.
@@ -280,25 +280,25 @@
/**
* Registers a ShutdownListener with this calss so that
- * it can be notified when the user has requested
+ * it can be notified when the user has requested
* that Chainsaw exit.
- *
+ *
* @param l
*/
public void addShutdownListener(ShutdownListener l) {
- shutdownListenerList.add(ShutdownListener.class, l);
+ shutdownListenerList.add(ShutdownListener.class, l);
}
-
+
/**
- * Removes the registered ShutdownListener so
+ * Removes the registered ShutdownListener so
* that the listener will not be notified on a shutdown.
- *
+ *
* @param l
*/
public void removeShutdownListener(ShutdownListener l) {
shutdownListenerList.remove(ShutdownListener.class, l);
}
-
+
/**
* Starts Chainsaw by attaching a new instance to the Log4J
* main root Logger via a ChainsawAppender, and activates itself
@@ -404,15 +404,19 @@
//if both a config file are defined and a log4j.configuration property
are set,
//don't use configFile's configuration
- if ((configFile != null) && !configFile.trim().equals("") &&
System.getProperty("log4j.configuration") == null) {
+ if (
+ (configFile != null) && !configFile.trim().equals("")
+ && (System.getProperty("log4j.configuration") == null)) {
try {
URL url = new URL(configFile);
OptionConverter.selectAndConfigure(
url, null, LogManager.getLoggerRepository());
- if (LogUI.this.getStatusBar() != null) {
- LogUI.this.getStatusBar().setMessage(
- "Configured Log4j using remembered URL :: " + url);
- }
+
+ if (LogUI.this.getStatusBar() != null) {
+ LogUI.this.getStatusBar().setMessage(
+ "Configured Log4j using remembered URL :: " + url);
+ }
+
LogUI.this.configURLToUse = url;
} catch (Exception e) {
LogLog.error("error occurred initializing log4j", e);
@@ -425,6 +429,34 @@
}
});
+ /**
+ * This listener sets up the NoReciversWarningPanel and
+ * loads saves the configs/logfiles
+ */
+ sm.addSettingsListener(
+ new SettingsListener() {
+ public void loadSettings(LoadSettingsEvent event) {
+ int size = event.asInt("SavedConfigs.Size");
+ Object[] configs = new Object[size];
+
+ for (int i = 0; i < size; i++) {
+ configs[i] = event.getSetting("SavedConfigs." + i);
+ }
+
+ noReceiversWarningPanel.getModel().setRememberedConfigs(configs);
+ }
+
+ public void saveSettings(SaveSettingsEvent event) {
+ Object[] configs =
+ noReceiversWarningPanel.getModel().getRememberedConfigs();
+ event.saveSetting("SavedConfigs.Size", configs.length);
+
+ for (int i = 0; i < configs.length; i++) {
+ event.saveSetting("SavedConfigs." + i, configs[i].toString());
+ }
+ }
+ });
+
if (
PluginRegistry.getPlugins(
LogManager.getLoggerRepository(), Receiver.class).size() == 0) {
@@ -498,9 +530,9 @@
//received a statechange event - selection changed - remove icon from
selected index
public void stateChanged(ChangeEvent e) {
if (tabbedPane.getSelectedComponent() instanceof ChainsawTabbedPane) {
- if (tabbedPane.getSelectedIndex() > -1) {
- tabbedPane.setIconAt(tabbedPane.getSelectedIndex(), null);
- }
+ if (tabbedPane.getSelectedIndex() > -1) {
+ tabbedPane.setIconAt(tabbedPane.getSelectedIndex(), null);
+ }
}
}
});
@@ -562,7 +594,7 @@
LogPanel logPanel = getCurrentLogPanel();
if (logPanel != null) {
- logPanel.undock();
+ logPanel.undock();
}
}
}
@@ -599,78 +631,69 @@
}
if (noReceiversDefined) {
- SwingUtilities.invokeLater(
- new Runnable() {
- public void run() {
- // TODO This could be done and look better in a custom Dialog
- Object[] options =
- new String[] {
- "Search for a Log4j config file",
- "Allow me to specify Receivers manually",
- "Nothing thanks, I'm fine"
- };
- Object initialSelection = options[0];
- Object result =
- JOptionPane.showInputDialog(
- LogUI.this,
- "You have no Receivers defined.\n\nYou will not be able to receive
events from a Remote source unless you define one in the Log4J configuration file.\n",
- "No Receivers Defined", JOptionPane.WARNING_MESSAGE, null,
- options, initialSelection);
-
- if (result == options[0]) {
- // TODO search for Log4j config
- JFileChooser chooser = new JFileChooser();
- chooser.setDialogTitle("Search for Log4j configuration...");
- chooser.setDialogType(JFileChooser.OPEN_DIALOG);
- chooser.setFileFilter(
- new FileFilter() {
- public boolean accept(File f) {
- return f.isDirectory()
- || f.getName().endsWith(".properties")
- || f.getName().endsWith(".xml");
- }
+ showNoReceiversWarningPanel();
+ }
+ }
- public String getDescription() {
- return "Log4j Configuration file";
- }
- });
+ /**
+ * Displays a warning dialog about having no Receivers defined
+ * and allows the user to choose some options for configuration
+ */
+ private void showNoReceiversWarningPanel() {
+ SwingUtilities.invokeLater(
+ new Runnable() {
+ public void run() {
+ final JDialog dialog = new JDialog(LogUI.this, true);
+ dialog.setTitle("Warning: You have no Receivers defined...");
+ dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
+
+ dialog.setResizable(false);
+
+ noReceiversWarningPanel.setOkActionListener(
+ new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ dialog.setVisible(false);
+ }
+ });
- chooser.showOpenDialog(LogUI.this);
+ dialog.getContentPane().add(noReceiversWarningPanel);
- if (chooser.getSelectedFile() != null) {
- try {
- OptionConverter.selectAndConfigure(
- chooser.getSelectedFile().toURL(), null,
- LogManager.getLoggerRepository());
- receiversPanel.updateReceiverTreeInDispatchThread();
-
- // ask if they want this config URL loaded each
time
- if (
- JOptionPane.showConfirmDialog(
- LogUI.this,
- "Would you like to use this configuration each time?",
- "Please confirm", JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
- configURLToUse = chooser.getSelectedFile().toURL();
- }
- } catch (Exception e) {
- LogLog.error(
- "Error using selected config file for configuration", e);
- }
- } else {
- // TODO handle if they don't choose a file
- }
+ dialog.pack();
- chooser = null;
- }
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ dialog.setLocation(
+ (screenSize.width / 2) - (dialog.getWidth() / 2),
+ (screenSize.height / 2) - (dialog.getHeight() / 2));
+ dialog.show();
+
+ dialog.dispose();
+
+ if (noReceiversWarningPanel.getModel().isManualMode()) {
+ toggleReceiversPanel();
+ } else if (noReceiversWarningPanel.getModel().isLoadConfig()) {
+ final URL url =
+ noReceiversWarningPanel.getModel().getConfigToLoad();
+
+ if (url != null) {
+ LogLog.debug("Initialiazing Log4j with " + url.toExternalForm());
+
+ new Thread(
+ new Runnable() {
+ public void run() {
+ try {
+ OptionConverter.selectAndConfigure(
+ url, null, LogManager.getLoggerRepository());
+ } catch (Exception e) {
+ LogLog.error("Error initializing Log4j", e);
+ }
- if (result == options[1]) {
- toggleReceiversPanel();
- } else {
+ receiversPanel.updateReceiverTreeInDispatchThread();
+ }
+ }).start();
}
}
- });
- }
+ }
+ });
}
/**
@@ -740,32 +763,38 @@
}
Map getPanels() {
- Map m = new HashMap();
- Set panelSet = panelMap.entrySet();
- Iterator iter = panelSet.iterator();
- while (iter.hasNext()) {
- Map.Entry entry = (Map.Entry)iter.next();
- m.put(entry.getKey(),
Boolean.valueOf(((DockablePanel)entry.getValue()).isDocked()));
- }
- return m;
+ Map m = new HashMap();
+ Set panelSet = panelMap.entrySet();
+ Iterator iter = panelSet.iterator();
+
+ while (iter.hasNext()) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ m.put(
+ entry.getKey(),
+ Boolean.valueOf(((DockablePanel) entry.getValue()).isDocked()));
+ }
+
+ return m;
}
-
+
void displayPanel(String panelName, boolean display) {
- Object o = panelMap.get(panelName);
- if (o instanceof LogPanel) {
- LogPanel p = (LogPanel)o;
-
- int index = tabbedPane.indexOfTab(panelName);
-
- if (index == -1 && display) {
- tabbedPane.addTab(panelName, p);
- }
- if (index > -1 && !display) {
- tabbedPane.removeTabAt(index);
- }
- }
+ Object o = panelMap.get(panelName);
+
+ if (o instanceof LogPanel) {
+ LogPanel p = (LogPanel) o;
+
+ int index = tabbedPane.indexOfTab(panelName);
+
+ if ((index == -1) && display) {
+ tabbedPane.addTab(panelName, p);
+ }
+
+ if ((index > -1) && !display) {
+ tabbedPane.removeTabAt(index);
+ }
+ }
}
-
+
/**
* Shutsdown by ensuring the Appender gets a chance to close.
*/
@@ -802,10 +831,10 @@
} catch (Exception e) {
e.printStackTrace();
}
+
fireShutdownEvent();
performShutdownAction();
}
-
};
new Thread(runnable).start();
@@ -814,9 +843,11 @@
/**
* Ensures all the registered ShutdownListeners are notified.
*/
- private void fireShutdownEvent()
- {
- ShutdownListener[] listeners = (ShutdownListener[])
shutdownListenerList.getListeners(ShutdownListener.class);
+ private void fireShutdownEvent() {
+ ShutdownListener[] listeners =
+ (ShutdownListener[]) shutdownListenerList.getListeners(
+ ShutdownListener.class);
+
for (int i = 0; i < listeners.length; i++) {
listeners[i].shuttingDown();
}
@@ -827,10 +858,10 @@
* requests to exit the application, the default action
* is to exit the VM.
* This Action is called AFTER all the ShutdownListeners have been notified
- *
+ *
* @param shutdownAction
*/
- public final void setShutdownAction(Action shutdownAction){
+ public final void setShutdownAction(Action shutdownAction) {
this.shutdownAction = shutdownAction;
}
@@ -839,9 +870,10 @@
* actionPerformed(...) method.
*
*/
- private void performShutdownAction(){
+ private void performShutdownAction() {
LogLog.debug("Calling the shutdown Action. Goodbye!");
- shutdownAction.actionPerformed(new ActionEvent(this,
ActionEvent.ACTION_PERFORMED, "Shutting Down"));
+ shutdownAction.actionPerformed(
+ new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "Shutting Down"));
}
/**
@@ -1492,7 +1524,7 @@
detail.setEditable(false);
detailPaneUpdater =
- new DetailPaneUpdater(detail, (EventContainer) tableModel);
+ new DetailPaneUpdater(this, detail, (EventContainer) tableModel);
upperPanel = new JPanel(new BorderLayout());
upperPanel.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 0));
@@ -2041,7 +2073,7 @@
*
*/
void dock() {
- setDocked(true);
+ setDocked(true);
f.setVisible(false);
removeAll();
add(lowerPanel, BorderLayout.CENTER);
@@ -2058,7 +2090,7 @@
*
*/
void undock() {
- setDocked(false);
+ setDocked(false);
externalPanel.removeAll();
externalPanel.add(lowerPanel, BorderLayout.CENTER);
tabbedPane.remove(LogPanel.this);
@@ -2341,10 +2373,13 @@
private int lastRow = -1;
private final JEditorPane pane;
private final EventContainer model;
+ private final LogPanel panel;
- public DetailPaneUpdater(JEditorPane pane, EventContainer model) {
+ public DetailPaneUpdater(
+ LogPanel panel, JEditorPane pane, EventContainer model) {
this.pane = pane;
this.model = model;
+ this.panel = panel;
}
public void setSelectedRow(int row) {
@@ -2409,8 +2444,10 @@
public void run() {
while (true) {
//if this tab is active, remove the icon
- if ((tabbedPane.getSelectedIndex() > -1) &&
- (tabbedPane.getSelectedIndex() == tabbedPane.indexOfTab(ident))) {
+ if (
+ (tabbedPane.getSelectedIndex() > -1)
+ && (tabbedPane.getSelectedIndex() == tabbedPane.indexOfTab(
+ ident))) {
tabbedPane.setIconAt(tabbedPane.indexOfTab(ident), null);
//reset fields so no icon will display
1.2 +243 -37
jakarta-log4j/src/java/org/apache/log4j/chainsaw/NoReceiversWarningPanel.java
Index: NoReceiversWarningPanel.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/NoReceiversWarningPanel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- NoReceiversWarningPanel.java 27 Aug 2003 22:48:34 -0000 1.1
+++ NoReceiversWarningPanel.java 28 Aug 2003 05:39:04 -0000 1.2
@@ -51,23 +51,38 @@
*/
package org.apache.log4j.chainsaw;
-import java.awt.FlowLayout;
+import org.apache.log4j.helpers.LogLog;
+
+import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
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.URL;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ButtonGroup;
+import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
+import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+import javax.swing.filechooser.FileFilter;
/**
@@ -75,23 +90,51 @@
* Receiver's defined, and prompting them to either
* load a Log4j Log file, search for a Log4j configuration file
* or use the GUI to define the Receivers
- *
+ *
* @author Paul Smith
*/
class NoReceiversWarningPanel extends JPanel {
+ private final JComboBox previousConfigs = new JComboBox();
+ private final JRadioButton justLoadingFile =
+ new JRadioButton("I'm fine thanks, don't worry");
+ private final JRadioButton searchOption =
+ new JRadioButton("Let me search for a configuration file");
+ private final JRadioButton manualOption =
+ new JRadioButton("Let me define Receivers manually");
+ private final JButton okButton = new JButton("Ok");
+ private final PanelModel model = new PanelModel();
+ final DefaultComboBoxModel configModel = new DefaultComboBoxModel();
+
NoReceiversWarningPanel() {
initComponents();
}
/**
- *
+ * Returns the current Model/state of the chosen options by the user.
+ * @return
+ */
+ PanelModel getModel() {
+ return model;
+ }
+
+ /**
+ * 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
+ */
+ void setOkActionListener(ActionListener actionListener) {
+ okButton.addActionListener(actionListener);
+ }
+
+ /**
+ * Sets up all the GUI components for this paenl
*/
private void initComponents() {
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
- // setBackground(Color.white);
setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
gc.gridx = 1;
@@ -101,7 +144,7 @@
JTextArea label =
new JTextArea(
- "You have no Receivers defined.\n\nYou will not be able to receive events
from a Remote source unless you define one in the Log4J configuration file.\n");
+ "You will not be able to receive events from a Remote source unless you
define one in the Log4J configuration file.\n");
label.setWrapStyleWord(true);
label.setLineWrap(true);
label.setEditable(false);
@@ -121,24 +164,21 @@
final ButtonGroup optionGroup = new ButtonGroup();
- final JRadioButton searchOption =
- new JRadioButton("Let me locate a config file", false);
-
searchOption.setToolTipText(
"Allows you to choose a Log4J Configuration file that contains Receiver
definitions");
- final JRadioButton manualOption =
- new JRadioButton("Let me define Receivers manually");
+ searchOption.setMnemonic('S');
manualOption.setToolTipText(
"Opens the Receivers panel so you can define them via a GUI");
- final JRadioButton justLoadingFile =
- new JRadioButton("Let me load a Log4j Log file");
+ manualOption.setMnemonic('m');
justLoadingFile.setToolTipText(
"Use this if you just want to view a Log4J Log file stored somewhere");
+ justLoadingFile.setMnemonic('I');
+
searchOption.setOpaque(false);
manualOption.setOpaque(false);
justLoadingFile.setOpaque(false);
@@ -149,34 +189,88 @@
gc.gridy = 3;
- String[] items =
- new String[] {
- "", "c:\\blah\blah.xml", "file:///var/doobie/blah/blah.xml",
- };
+ configModel.removeAllElements();
- final JComboBox previousConfigs = new JComboBox(items);
+ previousConfigs.setModel(configModel);
previousConfigs.setOpaque(false);
previousConfigs.setBackground(getBackground());
previousConfigs.setToolTipText(
"Previously loaded configurations can be chosen here");
+ previousConfigs.setEditable(true);
+
+ previousConfigs.getModel().addListDataListener(
+ new ListDataListener() {
+ private void validateUrl() {
+ okButton.setEnabled(isValidConfigURL());
+ }
+
+ public void contentsChanged(ListDataEvent e) {
+ validateUrl();
+ }
+
+ public void intervalAdded(ListDataEvent e) {
+ validateUrl();
+ }
+
+ public void intervalRemoved(ListDataEvent e) {
+ validateUrl();
+ }
+ });
+
+ previousConfigs.setMaximumSize(
+ new Dimension(200, (int) previousConfigs.getPreferredSize().getHeight()));
+ previousConfigs.setPreferredSize(previousConfigs.getMaximumSize());
+ previousConfigs.getEditor().getEditorComponent().addFocusListener(
+ new FocusListener() {
+ public void focusGained(FocusEvent e) {
+ selectAll();
+ }
+
+ private void selectAll() {
+ previousConfigs.getEditor().selectAll();
+ }
+
+ public void focusLost(FocusEvent e) {
+ }
+ });
+
final JButton searchButton =
new JButton(
- new AbstractAction("...") {
+ new AbstractAction("Browse...") {
public void actionPerformed(ActionEvent e) {
-
-// TODO close this dialog(?) and use the file open action
+ try {
+ URL url = browseForConfig();
+
+ if (url != null) {
+ getModel().configUrl = url;
+ configModel.addElement(url);
+ previousConfigs.getModel().setSelectedItem(url);
+ }
+ } catch (Exception ex) {
+ LogLog.error("Error browswing for Configuration file", ex);
+ }
}
});
searchButton.setToolTipText(
- "Shows a File Open dialog to allow you to find a config file");
+ "Shows a File Open dialog to allow you to find a configuration file");
+ /**
+ * This listener activates/deactivates certain controls based on the current
+ * state of the options
+ */
ActionListener al =
new ActionListener() {
public void actionPerformed(ActionEvent e) {
previousConfigs.setEnabled(e.getSource() == searchOption);
searchButton.setEnabled(e.getSource() == searchOption);
+
+ if (optionGroup.isSelected(searchOption.getModel())) {
+ okButton.setEnabled(isValidConfigURL());
+ } else {
+ okButton.setEnabled(true);
+ }
}
};
@@ -186,44 +280,156 @@
justLoadingFile.doClick();
- JPanel searchOptionPanel =
- new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+ JPanel searchOptionPanel = new JPanel(new GridBagLayout());
+
searchOptionPanel.setOpaque(false);
- searchOptionPanel.add(searchOption);
- searchOptionPanel.add(Box.createHorizontalStrut(5));
- searchOptionPanel.add(previousConfigs);
- searchOptionPanel.add(Box.createHorizontalStrut(5));
- searchOptionPanel.add(searchButton);
+ GridBagConstraints searchGCC = new GridBagConstraints();
+
+ searchGCC.fill = GridBagConstraints.HORIZONTAL;
+ searchGCC.gridx = 1;
+
+ searchOptionPanel.add(searchOption, searchGCC);
+ searchGCC.gridx = 2;
+ searchOptionPanel.add(Box.createHorizontalStrut(5), searchGCC);
+
+ searchGCC.weightx = 0.0;
+ searchGCC.gridx = 3;
+ searchGCC.fill = GridBagConstraints.NONE;
+ searchOptionPanel.add(previousConfigs, searchGCC);
+
+ searchGCC.weightx = 0.0;
+ searchGCC.gridx = 4;
+ searchOptionPanel.add(Box.createHorizontalStrut(5), searchGCC);
+ searchGCC.gridx = 5;
+ searchOptionPanel.add(searchButton, searchGCC);
- optionpanel.add(justLoadingFile);
optionpanel.add(searchOptionPanel);
optionpanel.add(manualOption);
+ optionpanel.add(justLoadingFile);
add(optionpanel, gc);
- final JButton okButton =
- new JButton(
- new AbstractAction("Ok") {
- public void actionPerformed(ActionEvent e) {
- // TODO Auto-generated method stub
- }
- });
-
gc.gridy = gc.RELATIVE;
gc.weightx = 0;
gc.fill = gc.NONE;
gc.anchor = gc.SOUTHEAST;
add(Box.createVerticalStrut(20), gc);
+
+ okButton.setMnemonic('O');
add(okButton, gc);
}
+ /**
+ * Returns the URL chosen by the user for a Configuration file
+ * or null if they cancelled.
+ */
+ private URL browseForConfig() throws MalformedURLException {
+ JFileChooser chooser = new JFileChooser();
+ chooser.setDialogTitle("Search for Log4j configuration...");
+ chooser.setDialogType(JFileChooser.OPEN_DIALOG);
+ chooser.setFileFilter(
+ new FileFilter() {
+ public boolean accept(File f) {
+ return f.isDirectory() || f.getName().endsWith(".properties")
+ || f.getName().endsWith(".xml");
+ }
+
+ public String getDescription() {
+ return "Log4j Configuration file";
+ }
+ });
+
+ chooser.showOpenDialog(this);
+
+ File selectedFile = chooser.getSelectedFile();
+
+ if (selectedFile == null) {
+ return null;
+ }
+
+ if (!selectedFile.exists() || !selectedFile.canRead()) {
+ return null;
+ }
+
+ return chooser.getSelectedFile().toURL();
+ }
+
+ /**
+ * Determions if the Configuration URL is a valid url.
+ */
+ private boolean isValidConfigURL() {
+ if (previousConfigs.getSelectedItem() == null) {
+ return false;
+ }
+
+ String urlString = previousConfigs.getSelectedItem().toString();
+
+ try {
+ getModel().configUrl = new URL(urlString);
+
+ return true;
+ } catch (Exception ex) {
+ }
+
+ return false;
+ }
+
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(new NoReceiversWarningPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.show();
+ }
+
+ /**
+ * This class represents the model of the chosen options the user
+ * has configured.
+ *
+ */
+ class PanelModel {
+ private URL fileUrl;
+ private URL configUrl;
+
+ boolean isLoadLogFile() {
+ return justLoadingFile.isSelected();
+ }
+
+ boolean isLoadConfig() {
+ return searchOption.isSelected();
+ }
+
+ boolean isManualMode() {
+ return manualOption.isSelected();
+ }
+
+ public Object[] getRememberedConfigs() {
+ Object[] urls = new Object[configModel.getSize()];
+
+ for (int i = 0; i < configModel.getSize(); i++) {
+ urls[i] = configModel.getElementAt(i);
+ }
+
+ return urls;
+ }
+
+ public void setRememberedConfigs(final Object[] configs) {
+ SwingUtilities.invokeLater(
+ new Runnable() {
+ public void run() {
+ configModel.removeAllElements();
+
+ for (int i = 0; i < configs.length; i++) {
+ configModel.addElement(configs[i]);
+ }
+ }
+ });
+ }
+
+ URL getConfigToLoad() {
+ return configUrl;
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]