This is an automated email from the ASF dual-hosted git repository. grobmeier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/logging-chainsaw.git
commit bb7437296359e388544913042207ec8ef8df14f4 Author: Christian Grobmeier <[email protected]> AuthorDate: Sat Dec 2 00:29:38 2023 +0100 moved save method to more appropriate panel --- src/main/java/org/apache/log4j/chainsaw/LogUI.java | 49 +-------------- .../log4j/chainsaw/receivers/ReceiversPanel.java | 69 +++++++++++++++++++++- 2 files changed, 67 insertions(+), 51 deletions(-) diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java b/src/main/java/org/apache/log4j/chainsaw/LogUI.java index dcb53eb..e3d753e 100644 --- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java +++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java @@ -254,7 +254,7 @@ public class LogUI extends JFrame { } private void setupReceiverPanel() { - receiversPanel = new ReceiversPanel(settingsManager, this, statusBar); + receiversPanel = new ReceiversPanel(settingsManager, m_receivers, this, statusBar); // receiversPanel.addPropertyChangeListener( // "visible", // evt -> getApplicationPreferenceModel().setReceivers( @@ -1503,52 +1503,5 @@ public class LogUI extends JFrame { return m_receivers; } - public void saveReceiversToFile(File file){ - try { - //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 (ChainsawReceiver receiver : m_receivers) { - 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 (PropertyDescriptor desc : list) { - Object o = desc.getReadMethod().invoke(receiver); - if (o != null) { - Element paramElement = document.createElement("param"); - paramElement.setAttribute("name", desc.getName()); - paramElement.setAttribute("value", o.toString()); - pluginElement.appendChild(paramElement); - } - } - - 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(); - - } catch (Exception e) { - logger.error(e,e); - } - } } diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java index ce70d58..38f7e65 100644 --- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java +++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java @@ -34,6 +34,8 @@ import org.apache.log4j.chainsaw.prefs.SettingsListener; import org.apache.log4j.chainsaw.prefs.SettingsManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import javax.swing.*; import javax.swing.event.TreeExpansionEvent; @@ -45,12 +47,23 @@ import javax.swing.event.TreeWillExpandListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.ExpandVetoException; import javax.swing.tree.TreePath; +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.awt.*; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; +import java.beans.BeanInfo; +import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.io.File; +import java.io.FileOutputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -87,11 +100,13 @@ public class ReceiversPanel extends JPanel implements SettingsListener { private final Map<Class,PropertyDescriptor[]> m_classToProperties = new HashMap<>(); private SettingsManager settingsManager; + private List<ChainsawReceiver> m_receivers; private final ChainsawStatusBar m_statusBar; - public ReceiversPanel(SettingsManager settingsManager, LogUI parentUi, ChainsawStatusBar sb) { + public ReceiversPanel(SettingsManager settingsManager, List<ChainsawReceiver> m_receivers, LogUI parentUi, ChainsawStatusBar sb) { super(new BorderLayout()); this.settingsManager = settingsManager; + this.m_receivers = m_receivers; m_statusBar = sb; m_parent = parentUi; final ReceiversTreeModel model = new ReceiversTreeModel(); @@ -350,10 +365,58 @@ public class ReceiversPanel extends JPanel implements SettingsListener { private void saveReceivers() { File saveConfigFile = SwingHelper.promptForFile(this, null, "Save receiver configuration XML file", false); if (saveConfigFile != null) { - m_parent.saveReceiversToFile(saveConfigFile); + saveReceiversToFile(saveConfigFile); } } + public void saveReceiversToFile(File file){ + try { + //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 (ChainsawReceiver receiver : m_receivers) { + 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 (PropertyDescriptor desc : list) { + Object o = desc.getReadMethod().invoke(receiver); + if (o != null) { + Element paramElement = document.createElement("param"); + paramElement.setAttribute("name", desc.getName()); + paramElement.setAttribute("value", o.toString()); + pluginElement.appendChild(paramElement); + } + } + + 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(); + + } catch (Exception e) { + logger.error(e,e); + } + } protected ReceiversTreeModel getReceiverTreeModel() { return ((ReceiversTreeModel) receiversTree.getModel()); } @@ -532,7 +595,7 @@ public class ReceiversPanel extends JPanel implements SettingsListener { public void saveSettings(SaveSettingsEvent event) { File file = new File(settingsManager.getSettingsDirectory(), "receiver-config.xml"); - m_parent.saveReceiversToFile(file); + saveReceiversToFile(file); } /**
