http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/prefs/SaveSettingsEvent.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SaveSettingsEvent.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SaveSettingsEvent.java index 0ea7d46..4535370 100644 --- a/src/main/java/org/apache/log4j/chainsaw/prefs/SaveSettingsEvent.java +++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SaveSettingsEvent.java @@ -5,9 +5,9 @@ * 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. @@ -21,43 +21,42 @@ import java.util.Properties; /** * @author Paul Smith <psm...@apache.org> - * */ public class SaveSettingsEvent extends AbstractSettingsEvent { - - SaveSettingsEvent(Object source, File settingsLocation) { - super(source, settingsLocation); - } - - public void saveSetting(String key, int value) { - saveSetting(key, "" + value); - } - - public void saveSetting(String key, double value) { - saveSetting(key, "" + value); - } - - public void saveSetting(String key, Object value) { - saveSetting(key, value.toString()); - } - - public void saveSetting(String key, String value) { - properties.put(key, value); - } - - Properties getProperties() { - return properties; - } - - private Properties properties = new Properties(); - /** - * @param string - * @param b - */ - public void saveSetting(String string, boolean b) - { - properties.put(string, b?Boolean.TRUE.toString():Boolean.FALSE.toString()); - - } + + SaveSettingsEvent(Object source, File settingsLocation) { + super(source, settingsLocation); + } + + public void saveSetting(String key, int value) { + saveSetting(key, "" + value); + } + + public void saveSetting(String key, double value) { + saveSetting(key, "" + value); + } + + public void saveSetting(String key, Object value) { + saveSetting(key, value.toString()); + } + + public void saveSetting(String key, String value) { + properties.put(key, value); + } + + Properties getProperties() { + return properties; + } + + private Properties properties = new Properties(); + + /** + * @param string + * @param b + */ + public void saveSetting(String string, boolean b) { + properties.put(string, b ? Boolean.TRUE.toString() : Boolean.FALSE.toString()); + + } }
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsEvent.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsEvent.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsEvent.java index 341ce97..50f9097 100644 --- a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsEvent.java +++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsEvent.java @@ -5,9 +5,9 @@ * 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. @@ -20,11 +20,10 @@ import java.util.EventObject; /** * @author Paul Smith <psm...@apache.org> - * */ public abstract class SettingsEvent extends EventObject { - SettingsEvent(Object source) { - super(source); - } + SettingsEvent(Object source) { + super(source); + } } http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsListener.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsListener.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsListener.java index c4c78dc..f94bfa9 100644 --- a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsListener.java +++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsListener.java @@ -5,9 +5,9 @@ * 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. @@ -19,37 +19,35 @@ package org.apache.log4j.chainsaw.prefs; import java.util.EventListener; /** - * * Components, or objects, that are interested in being notified when * Settings are loaded or being saved, can implement this interface. - * + * <p> * 'Settings' are Chainsaw wide preferences, and are not specific to a particular * tab identifer etc. See the correspoing ProfileListener and related classes * for a discussion on profile specific events etc. - * + * <p> * The implementing class can use this event notification opportunity - * to load setting information stored previously, or to + * to load setting information stored previously, or to * request that setting information be stored. - * + * <p> * NOTE: This contract does <b>_*NOT*_</b> dictate that the Thread invoking these * methods will be the Swing's Event dispatching event, it could * be any arbitary thread. Having said that, it COULD be the Swing's Event * dispatching event, but this contract makes no guarantee. - * - * @author Paul Smith <psm...@apache.org> * + * @author Paul Smith <psm...@apache.org> */ public interface SettingsListener extends EventListener { - - /** - * When a request to load Settings has been requested, this method - * will be invoked by the SettingsManager. The implementing - * component can query the event for settings, and modify - * it's internal state based on these settings. - * - * @param event - */ + + /** + * When a request to load Settings has been requested, this method + * will be invoked by the SettingsManager. The implementing + * component can query the event for settings, and modify + * it's internal state based on these settings. + * + * @param event + */ void loadSettings(LoadSettingsEvent event); - - void saveSettings(SaveSettingsEvent event); + + void saveSettings(SaveSettingsEvent event); } http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java index 5bebe59..efbb373 100644 --- a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java +++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java @@ -5,9 +5,9 @@ * 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. @@ -16,20 +16,12 @@ */ package org.apache.log4j.chainsaw.prefs; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import javax.swing.event.EventListenerList; +import java.io.*; import java.net.URLEncoder; import java.util.EventListener; import java.util.Properties; -import javax.swing.event.EventListenerList; - /** * SettingManager allows components to register interest in Saving/Loading @@ -37,7 +29,6 @@ import javax.swing.event.EventListenerList; * * @author Paul Smith <psm...@apache.org> * @author Scott Deboy <sde...@apache.org> - * */ public final class SettingsManager { private static final SettingsManager instance = new SettingsManager(); @@ -49,7 +40,6 @@ public final class SettingsManager { /** * Initialises the SettingsManager by loading the default Properties from * a resource - * */ private SettingsManager() { // load the default properties as a Resource @@ -57,8 +47,8 @@ public final class SettingsManager { try { is = this.getClass().getClassLoader() - .getResource("org/apache/log4j/chainsaw/prefs/default.properties") - .openStream(); + .getResource("org/apache/log4j/chainsaw/prefs/default.properties") + .openStream(); defaultProperties.load(is); // defaultProperties.list(System.out); @@ -77,6 +67,7 @@ public final class SettingsManager { /** * Returns the singleton instance of the SettingsManager + * * @return settings manager */ public static SettingsManager getInstance() { @@ -85,6 +76,7 @@ public final class SettingsManager { /** * Registers the listener with the manager + * * @param listener */ public void addSettingsListener(SettingsListener listener) { @@ -95,7 +87,6 @@ public final class SettingsManager { * Requests that the settings be loaded, all listeners will be notified of * this call, and configure themselves according to the values found in the * loaded settings - * */ public void loadSettings() { /* @@ -137,7 +128,7 @@ public final class SettingsManager { Properties loadedProperties = new Properties(); loadedProperties.putAll(getDefaultSettings()); loadedProperties.putAll(loadProperties(p)); - + LoadSettingsEvent event = new LoadSettingsEvent(this, loadedProperties); @@ -153,11 +144,11 @@ public final class SettingsManager { InputStream is = null; File f = new File(getSettingsDirectory(), - URLEncoder.encode(p.getNamespace() + ".properties")); - + URLEncoder.encode(p.getNamespace() + ".properties")); + if (!f.exists()) { - f = new File(getSettingsDirectory(), - p.getNamespace() + ".properties"); + f = new File(getSettingsDirectory(), + p.getNamespace() + ".properties"); } if (f.exists()) { @@ -204,7 +195,6 @@ public final class SettingsManager { /** * Creates a SaveSettingsEvent and calls all the SettingsListeners * to populate the properties with configuration information - * */ public void saveSettings() { /* @@ -225,6 +215,7 @@ public final class SettingsManager { * Looks up all the Profileable's that have been registered * and creates a new event for each of them, and ensures that they * are saved within a separate external store + * * @param settingsDir */ private void saveProfileableSetting(File settingsDir) { @@ -244,8 +235,8 @@ public final class SettingsManager { try { os = new BufferedOutputStream(new FileOutputStream( - new File(settingsDir, - URLEncoder.encode(profileable.getNamespace()) + ".properties"))); + new File(settingsDir, + URLEncoder.encode(profileable.getNamespace()) + ".properties"))); event.getProperties().store(os, HEADER); } catch (Exception e) { e.printStackTrace(); @@ -282,7 +273,7 @@ public final class SettingsManager { try { os = new BufferedOutputStream(new FileOutputStream( - new File(settingsDir, GLOBAL_SETTINGS_FILE_NAME))); + new File(settingsDir, GLOBAL_SETTINGS_FILE_NAME))); event.getProperties().store(os, HEADER); } catch (Exception e) { e.printStackTrace(); @@ -307,7 +298,7 @@ public final class SettingsManager { } else { Properties loadedProperties = loadGlobalProperties(); LoadSettingsEvent event = new LoadSettingsEvent(this, - loadedProperties); + loadedProperties); listener.loadSettings(event); } } @@ -350,6 +341,7 @@ public final class SettingsManager { /** * Returns the loaded default settings, which can be used by * other classes within this package. + * * @return Properties defaults */ public Properties getDefaultSettings() { http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java index 4992843..f6cccae 100644 --- a/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java +++ b/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java @@ -5,9 +5,9 @@ * 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. @@ -17,20 +17,6 @@ package org.apache.log4j.chainsaw.receivers; -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.event.ActionListener; -import java.io.IOException; -import java.net.URL; - -import javax.swing.JDialog; -import javax.swing.JEditorPane; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JSplitPane; -import javax.swing.UIManager; - import org.apache.log4j.LogManager; import org.apache.log4j.chainsaw.help.HelpManager; import org.apache.log4j.chainsaw.helper.OkCancelPanel; @@ -39,13 +25,18 @@ import org.apache.log4j.net.SocketHubReceiver; import org.apache.log4j.plugins.Plugin; import org.apache.log4j.plugins.Receiver; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.net.URL; + /** * A panel that allows a user to configure a new Plugin, and * view that plugins javadoc at the same time * * @author Paul Smith <psm...@apache.org> - * */ public class NewReceiverDialogPanel extends JPanel { @@ -71,20 +62,20 @@ public class NewReceiverDialogPanel extends JPanel { * url to be the Help resource for that class */ pluginEditorPanel.addPropertyChangeListener("plugin", - evt -> { + evt -> { - Plugin plugin = (Plugin) evt.getNewValue(); - URL url = HelpManager.getInstance().getHelpForClass( - plugin.getClass()); + Plugin plugin = (Plugin) evt.getNewValue(); + URL url = HelpManager.getInstance().getHelpForClass( + plugin.getClass()); - try { - javaDocPane.setPage(url); - } catch (IOException e) { - MessageCenter.getInstance().getLogger().error( - "Failed to load the Help resource for " + + try { + javaDocPane.setPage(url); + } catch (IOException e) { + MessageCenter.getInstance().getLogger().error( + "Failed to load the Help resource for " + plugin.getClass(), e); - } - }); + } + }); } /** @@ -125,6 +116,7 @@ public class NewReceiverDialogPanel extends JPanel { * Creates a new panel, with the contents configured to allow the editing * of a NEW instance of the specified class (which must implement the Receiver * interface) + * * @param receiverClass * @return NewReceiverDialogPanel * @throws IllegalArgumentException if the specified class is not a Receiver @@ -142,7 +134,7 @@ public class NewReceiverDialogPanel extends JPanel { receiverInstance = (Receiver) receiverClass.newInstance(); } catch (Exception e) { - LogManager.getLogger(NewReceiverDialogPanel.class).error( + LogManager.getLogger(NewReceiverDialogPanel.class).error( "Failed to create a new Receiver instance, this exception is unexpected", e); } @@ -159,7 +151,7 @@ public class NewReceiverDialogPanel extends JPanel { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); NewReceiverDialogPanel panel = NewReceiverDialogPanel.create( - SocketHubReceiver.class); + SocketHubReceiver.class); JDialog dialog = new JDialog((JFrame) null, true); dialog.getContentPane().add(panel); http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java index 95979c7..01c41dc 100644 --- a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java +++ b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java @@ -5,9 +5,9 @@ * 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. @@ -16,32 +16,6 @@ */ package org.apache.log4j.chainsaw.receivers; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.beans.BeanInfo; -import java.beans.IntrospectionException; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.swing.AbstractCellEditor; -import javax.swing.DefaultCellEditor; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.table.AbstractTableModel; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.TableCellEditor; -import javax.swing.table.TableModel; - import org.apache.log4j.Level; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; @@ -51,10 +25,26 @@ import org.apache.log4j.chainsaw.helper.TableCellEditorFactory; import org.apache.log4j.net.SocketHubReceiver; import org.apache.log4j.plugins.Plugin; +import javax.swing.*; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableModel; +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.beans.BeanInfo; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.util.*; +import java.util.List; + /** * A panel that allows the user to edit a particular Plugin, by using introspection * this class discovers the modifiable properties of the Plugin + * * @author Paul Smith <psm...@apache.org> */ public class PluginPropertyEditorPanel extends JPanel { @@ -64,9 +54,10 @@ public class PluginPropertyEditorPanel extends JPanel { private Plugin plugin; private TableModel defaultModel = new DefaultTableModel( - new String[] { "Property", "Value" }, 1); + new String[]{"Property", "Value"}, 1); private static final Logger logger = LogManager.getLogger(PluginPropertyEditorPanel.class); + /** * */ @@ -88,7 +79,7 @@ public class PluginPropertyEditorPanel extends JPanel { propertyTable.setModel( defaultModel = new DefaultTableModel( - new String[] { "Property", "Value" }, 1)); + new String[]{"Property", "Value"}, 1)); } @@ -108,7 +99,7 @@ public class PluginPropertyEditorPanel extends JPanel { new PluginPropertyTableModel(p); propertyTable.setModel(model); propertyTable.getColumnModel().getColumn(1) - .setCellEditor(new PluginTableCellEditor()); + .setCellEditor(new PluginTableCellEditor()); propertyTable.setEnabled(true); } catch (Throwable e) { logger.error("Failed to introspect the Plugin", e); @@ -125,10 +116,10 @@ public class PluginPropertyEditorPanel extends JPanel { JFrame frame = new JFrame("Property Editor Test bed"); frame.addWindowListener(new WindowAdapter() { - public void windowClosed(WindowEvent e) { - System.exit(1); - } - }); + public void windowClosed(WindowEvent e) { + System.exit(1); + } + }); PluginPropertyEditorPanel panel = new PluginPropertyEditorPanel(); @@ -173,14 +164,13 @@ public class PluginPropertyEditorPanel extends JPanel { /** * @author psmith - * */ private class PluginTableCellEditor extends AbstractCellEditor implements TableCellEditor { private Map editorMap = new HashMap(); private DefaultCellEditor defaultEditor = new DefaultCellEditor( - new JTextField()); + new JTextField()); private DefaultCellEditor currentEditor = defaultEditor; private PluginTableCellEditor() { @@ -197,12 +187,12 @@ public class PluginPropertyEditorPanel extends JPanel { * @see javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int) */ public Component getTableCellEditorComponent(JTable table, Object value, - boolean isSelected, int row, int column) { + boolean isSelected, int row, int column) { + + PluginPropertyTableModel model = (PluginPropertyTableModel) table.getModel(); + PropertyDescriptor descriptor = model.getDescriptors()[row]; + Class valueClass = descriptor.getPropertyType(); - PluginPropertyTableModel model = (PluginPropertyTableModel) table.getModel(); - PropertyDescriptor descriptor = model.getDescriptors()[row]; - Class valueClass = descriptor.getPropertyType(); - if (editorMap.containsKey(valueClass)) { DefaultCellEditor editor = @@ -244,7 +234,7 @@ public class PluginPropertyEditorPanel extends JPanel { BeanInfo beanInfo = Introspector.getBeanInfo(p.getClass()); List list = new ArrayList(Arrays.asList( - beanInfo.getPropertyDescriptors())); + beanInfo.getPropertyDescriptors())); list.sort((o1, o2) -> { @@ -252,11 +242,11 @@ public class PluginPropertyEditorPanel extends JPanel { PropertyDescriptor d2 = (PropertyDescriptor) o2; return d1.getDisplayName().compareToIgnoreCase( - d2.getDisplayName()); + d2.getDisplayName()); }); this.plugin = p; this.descriptors = (PropertyDescriptor[]) list.toArray( - new PropertyDescriptor[0]); + new PropertyDescriptor[0]); } /* (non-Javadoc) @@ -268,25 +258,25 @@ public class PluginPropertyEditorPanel extends JPanel { switch (col) { - case 1: + case 1: - try { + try { - Object object = d.getReadMethod().invoke(plugin); + Object object = d.getReadMethod().invoke(plugin); - if (object != null) { + if (object != null) { - return object; + return object; + } + } catch (Exception e) { + logger.error( + "Error reading value for PropertyDescriptor " + d); } - } catch (Exception e) { - logger.error( - "Error reading value for PropertyDescriptor " + d); - } - return ""; + return ""; - case 0: - return d.getName(); + case 0: + return d.getName(); } return null; @@ -341,11 +331,11 @@ public class PluginPropertyEditorPanel extends JPanel { aValue = translateValueIfNeeded(rowIndex, aValue); logger.debug( "setValueAt, " + rowIndex + ", " + columnIndex + - ", value=" + aValue + ", valueClass" + aValue.getClass()); + ", value=" + aValue + ", valueClass" + aValue.getClass()); try { descriptors[rowIndex].getWriteMethod().invoke(plugin, - aValue); + aValue); fireTableCellUpdated(rowIndex, columnIndex); } catch (IllegalArgumentException e) { // ignore @@ -367,7 +357,7 @@ public class PluginPropertyEditorPanel extends JPanel { private Object translateValueIfNeeded(int row, Object value) { if ((descriptors[row].getPropertyType() == int.class) || - (descriptors[row].getPropertyType() == Integer.class)) { + (descriptors[row].getPropertyType() == Integer.class)) { try { @@ -379,11 +369,12 @@ public class PluginPropertyEditorPanel extends JPanel { return value; } + /** * @return Returns the descriptors. */ public final PropertyDescriptor[] getDescriptors() { - return descriptors; + return descriptors; } } } http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java index 8e4645a..9cc1191 100644 --- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java +++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java @@ -5,9 +5,9 @@ * 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. @@ -17,18 +17,17 @@ package org.apache.log4j.chainsaw.receivers; -import java.awt.*; - -import javax.swing.*; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeCellRenderer; - import org.apache.log4j.chainsaw.Generator; import org.apache.log4j.chainsaw.icons.ChainsawIcons; import org.apache.log4j.chainsaw.icons.LevelIconFactory; import org.apache.log4j.plugins.Plugin; import org.apache.log4j.spi.Thresholdable; +import javax.swing.*; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import java.awt.*; + /** * A TreeCellRenderer that can format the information of Receivers @@ -37,75 +36,74 @@ import org.apache.log4j.spi.Thresholdable; * @author Paul Smith <psm...@apache.org> */ public class ReceiverTreeCellRenderer extends DefaultTreeCellRenderer { - private Icon rootIcon = new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT); - private JPanel panel = new JPanel(); - private JLabel levelLabel = new JLabel(); - - public ReceiverTreeCellRenderer() { - super(); - BoxLayout layout = new BoxLayout(panel, BoxLayout.X_AXIS); - panel.setLayout(layout); - panel.setOpaque(false); - panel.add(levelLabel); - //set preferredsize to something wide - setPreferredSize(new Dimension(200, 19)); - panel.add(this); - } - - public Component getTreeCellRendererComponent( - JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, - int row, boolean focus) { - super.getTreeCellRendererComponent( - tree, value, sel, expanded, leaf, row, focus); - - DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; - Object o = node.getUserObject(); - setText(o.toString()); - - String tooltip = ""; - - setIcon(null); - if ( - o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) { - setText(o.toString()); - } else if (o instanceof String) { - setText(o.toString()); - setIcon(null); - }else if(o instanceof Plugin){ - setText(((Plugin)o).getName()); - }else if(o instanceof Generator){ - Generator generator = (Generator) o; - setText(generator.getName()); - setIcon(ChainsawIcons.ICON_HELP); - } - else { - setText("(Unknown Type) :: " + o); + private Icon rootIcon = new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT); + private JPanel panel = new JPanel(); + private JLabel levelLabel = new JLabel(); + + public ReceiverTreeCellRenderer() { + super(); + BoxLayout layout = new BoxLayout(panel, BoxLayout.X_AXIS); + panel.setLayout(layout); + panel.setOpaque(false); + panel.add(levelLabel); + //set preferredsize to something wide + setPreferredSize(new Dimension(200, 19)); + panel.add(this); } - if ( - o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) { - setIcon(rootIcon); - } + public Component getTreeCellRendererComponent( + JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, + int row, boolean focus) { + super.getTreeCellRendererComponent( + tree, value, sel, expanded, leaf, row, focus); + + DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; + Object o = node.getUserObject(); + setText(o.toString()); + + String tooltip = ""; + + setIcon(null); + if ( + o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) { + setText(o.toString()); + } else if (o instanceof String) { + setText(o.toString()); + setIcon(null); + } else if (o instanceof Plugin) { + setText(((Plugin) o).getName()); + } else if (o instanceof Generator) { + Generator generator = (Generator) o; + setText(generator.getName()); + setIcon(ChainsawIcons.ICON_HELP); + } else { + setText("(Unknown Type) :: " + o); + } - levelLabel.setText(null); - levelLabel.setIcon(null); + if ( + o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) { + setIcon(rootIcon); + } + + levelLabel.setText(null); + levelLabel.setIcon(null); - if (o instanceof Thresholdable) { - Thresholdable t = (Thresholdable) o; + if (o instanceof Thresholdable) { + Thresholdable t = (Thresholdable) o; - if (t.getThreshold() != null) { - levelLabel.setIcon( - LevelIconFactory.getInstance().getLevelToIconMap().get( - t.getThreshold().toString())); + if (t.getThreshold() != null) { + levelLabel.setIcon( + LevelIconFactory.getInstance().getLevelToIconMap().get( + t.getThreshold().toString())); - if (levelLabel.getIcon() == null) { - levelLabel.setText(t.getThreshold().toString()); + if (levelLabel.getIcon() == null) { + levelLabel.setText(t.getThreshold().toString()); + } + } } - } - } - setToolTipText(tooltip); + setToolTipText(tooltip); - return panel; - } + return panel; + } } http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java index 18ac3a6..ec27de3 100644 --- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java +++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java @@ -5,9 +5,9 @@ * 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. @@ -17,28 +17,6 @@ package org.apache.log4j.chainsaw.receivers; -import java.beans.BeanInfo; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.LineNumberReader; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.log4j.chainsaw.plugins.PluginClassLoaderFactory; @@ -50,15 +28,31 @@ import org.apache.log4j.spi.LoggerRepositoryEx; import org.w3c.dom.Document; import org.w3c.dom.Element; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.beans.BeanInfo; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.io.*; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + /** * Helper class to assisit with all the known Receivers. - * + * <p> * A local resource 'known.receivers' is read in on initialization * with each line representing the FQN of the Class that is a recognised Receiver. - * - * @author Paul Smith <psm...@apache.org> * + * @author Paul Smith <psm...@apache.org> */ public class ReceiversHelper { @@ -66,13 +60,14 @@ public class ReceiversHelper { private final Logger logger = LogManager.getLogger(ReceiversHelper.class); private List<Class> receiverClassList = new ArrayList<>(); + /** * */ private ReceiversHelper() { URL url = this.getClass().getClassLoader().getResource( - this.getClass().getPackage().getName().replace('.','/') + "/known.receivers"); + this.getClass().getPackage().getName().replace('.', '/') + "/known.receivers"); if (url == null) { logger.warn("Failed to locate known.receivers file"); return; @@ -87,20 +82,19 @@ public class ReceiversHelper { ClassLoader classLoader = PluginClassLoaderFactory.getInstance().getClassLoader(); while ((line = stream.readLine()) != null) { - - try { - if (line.startsWith("#") || (line.length() == 0)) { - continue; - } - Class receiverClass = classLoader.loadClass(line); - receiverClassList.add(receiverClass); - logger.debug("Located known Receiver class " + receiverClass.getName()); - } catch (ClassNotFoundException e) { - logger.warn("Failed to locate Receiver class:" + line); - } - catch (NoClassDefFoundError e) { - logger.error("Failed to locate Receiver class:" + line + ", looks like a dependent class is missing from the classpath", e); - } + + try { + if (line.startsWith("#") || (line.length() == 0)) { + continue; + } + Class receiverClass = classLoader.loadClass(line); + receiverClassList.add(receiverClass); + logger.debug("Located known Receiver class " + receiverClass.getName()); + } catch (ClassNotFoundException e) { + logger.warn("Failed to locate Receiver class:" + line); + } catch (NoClassDefFoundError e) { + logger.error("Failed to locate Receiver class:" + line + ", looks like a dependent class is missing from the classpath", e); + } } } catch (Exception e) { e.printStackTrace(); @@ -124,86 +118,87 @@ public class ReceiversHelper { /** * Returns an unmodifiable list of Class objects which represent all the 'known' * Receiver classes. + * * @return known receiver classes */ public List getKnownReceiverClasses() { - return Collections.unmodifiableList(receiverClassList); + return Collections.unmodifiableList(receiverClassList); } - public void saveReceiverConfiguration(File file) { - LoggerRepository repo = LogManager.getLoggerRepository(); - PluginRegistry pluginRegistry = ((LoggerRepositoryEx) repo).getPluginRegistry(); - List<Plugin> fullPluginList = pluginRegistry.getPlugins(); - List<Plugin> pluginList = new ArrayList<>(); - for (Object aFullPluginList : fullPluginList) { - Plugin thisPlugin = (Plugin) aFullPluginList; - if (thisPlugin instanceof Receiver) { - pluginList.add(thisPlugin); - } - } - //remove everything that isn't a receiver..otherwise, we'd create an empty config file - try { - if (pluginList.size() > 0) { - //we programmatically register the ZeroConf plugin in the plugin registry - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document document = builder.newDocument(); - Element rootElement = document.createElementNS("http://jakarta.apache.org/log4j/", "configuration"); - rootElement.setPrefix("log4j"); - rootElement.setAttribute("xmlns:log4j", "http://jakarta.apache.org/log4j/"); - rootElement.setAttribute("debug", "true"); - - for (Object aPluginList : pluginList) { - Receiver receiver; - - if (aPluginList instanceof Receiver) { - receiver = (Receiver) aPluginList; - } else { - continue; - } - - Element pluginElement = document.createElement("plugin"); - pluginElement.setAttribute("name", receiver.getName()); - pluginElement.setAttribute("class", receiver.getClass().getName()); - - BeanInfo beanInfo = Introspector.getBeanInfo(receiver.getClass()); - List<PropertyDescriptor> list = new ArrayList<>(Arrays.asList(beanInfo.getPropertyDescriptors())); - - for (Object aList : list) { - PropertyDescriptor d = (PropertyDescriptor) aList; - //don't serialize the loggerRepository property for subclasses of componentbase.. - //easier to change this than tweak componentbase right now.. - if (d.getReadMethod().getName().equals("getLoggerRepository")) { + public void saveReceiverConfiguration(File file) { + LoggerRepository repo = LogManager.getLoggerRepository(); + PluginRegistry pluginRegistry = ((LoggerRepositoryEx) repo).getPluginRegistry(); + List<Plugin> fullPluginList = pluginRegistry.getPlugins(); + List<Plugin> pluginList = new ArrayList<>(); + for (Object aFullPluginList : fullPluginList) { + Plugin thisPlugin = (Plugin) aFullPluginList; + if (thisPlugin instanceof Receiver) { + pluginList.add(thisPlugin); + } + } + //remove everything that isn't a receiver..otherwise, we'd create an empty config file + try { + if (pluginList.size() > 0) { + //we programmatically register the ZeroConf plugin in the plugin registry + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.newDocument(); + Element rootElement = document.createElementNS("http://jakarta.apache.org/log4j/", "configuration"); + rootElement.setPrefix("log4j"); + rootElement.setAttribute("xmlns:log4j", "http://jakarta.apache.org/log4j/"); + rootElement.setAttribute("debug", "true"); + + for (Object aPluginList : pluginList) { + Receiver receiver; + + if (aPluginList instanceof Receiver) { + receiver = (Receiver) aPluginList; + } else { continue; } - Object o = d.getReadMethod().invoke(receiver); - if (o != null) { - Element paramElement = document.createElement("param"); - paramElement.setAttribute("name", d.getName()); - paramElement.setAttribute("value", o.toString()); - pluginElement.appendChild(paramElement); + + Element pluginElement = document.createElement("plugin"); + pluginElement.setAttribute("name", receiver.getName()); + pluginElement.setAttribute("class", receiver.getClass().getName()); + + BeanInfo beanInfo = Introspector.getBeanInfo(receiver.getClass()); + List<PropertyDescriptor> list = new ArrayList<>(Arrays.asList(beanInfo.getPropertyDescriptors())); + + for (Object aList : list) { + PropertyDescriptor d = (PropertyDescriptor) aList; + //don't serialize the loggerRepository property for subclasses of componentbase.. + //easier to change this than tweak componentbase right now.. + if (d.getReadMethod().getName().equals("getLoggerRepository")) { + continue; + } + Object o = d.getReadMethod().invoke(receiver); + if (o != null) { + Element paramElement = document.createElement("param"); + paramElement.setAttribute("name", d.getName()); + paramElement.setAttribute("value", o.toString()); + pluginElement.appendChild(paramElement); + } } - } - rootElement.appendChild(pluginElement); + rootElement.appendChild(pluginElement); + + } + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); + DOMSource source = new DOMSource(rootElement); + FileOutputStream stream = new FileOutputStream(file); + StreamResult result = new StreamResult(stream); + transformer.transform(source, result); + stream.close(); } - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer = transformerFactory.newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); - DOMSource source = new DOMSource(rootElement); - FileOutputStream stream = new FileOutputStream(file); - StreamResult result = new StreamResult(stream); - transformer.transform(source, result); - stream.close(); + } catch (Exception e) { + e.printStackTrace(); } - - } catch (Exception e) { - e.printStackTrace(); } - } }