📄 configurationmanager.java
字号:
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software
* License version 1.1, a copy of which has been included with this
* distribution in the LICENSE.txt file.
*/
package org.apache.log4j.lf5.viewer.configure;
import org.apache.log4j.lf5.LogLevel;
import org.apache.log4j.lf5.LogLevelFormatException;
import org.apache.log4j.lf5.viewer.LogBrokerMonitor;
import org.apache.log4j.lf5.viewer.LogTable;
import org.apache.log4j.lf5.viewer.categoryexplorer.CategoryExplorerModel;
import org.apache.log4j.lf5.viewer.categoryexplorer.CategoryExplorerTree;
import org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode;
import org.apache.log4j.lf5.viewer.categoryexplorer.CategoryPath;
import org.apache.log4j.lf5.viewer.LogTableColumn;
import org.apache.log4j.lf5.viewer.LogTableColumnFormatException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.swing.*;
import javax.swing.tree.TreePath;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.awt.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import java.util.List;
/**
* <p>ConfigurationManager handles the storage and retrival of the state of
* the CategoryExplorer
*
* @author Richard Hurst
* @author Brad Marlborough
*/
// Contributed by ThoughtWorks Inc.
public class ConfigurationManager extends Object {
//--------------------------------------------------------------------------
// Constants:
//--------------------------------------------------------------------------
private static final String CONFIG_FILE_NAME = "lf5_configuration.xml";
private static final String NAME = "name";
private static final String PATH = "path";
private static final String SELECTED = "selected";
private static final String EXPANDED = "expanded";
private static final String CATEGORY = "category";
private static final String FIRST_CATEGORY_NAME = "Categories";
private static final String LEVEL = "level";
private static final String COLORLEVEL = "colorlevel";
private static final String COLOR = "color";
private static final String RED = "red";
private static final String GREEN = "green";
private static final String BLUE = "blue";
private static final String COLUMN = "column";
private static final String NDCTEXTFILTER = "searchtext";
//--------------------------------------------------------------------------
// Protected Variables:
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// Private Variables:
//--------------------------------------------------------------------------
private LogBrokerMonitor _monitor = null;
private LogTable _table = null;
//--------------------------------------------------------------------------
// Constructors:
//--------------------------------------------------------------------------
public ConfigurationManager(LogBrokerMonitor monitor, LogTable table) {
super();
_monitor = monitor;
_table = table;
load();
}
//--------------------------------------------------------------------------
// Public Methods:
//--------------------------------------------------------------------------
public void save() {
CategoryExplorerModel model = _monitor.getCategoryExplorerTree().getExplorerModel();
CategoryNode root = model.getRootCategoryNode();
StringBuffer xml = new StringBuffer(2048);
openXMLDocument(xml);
openConfigurationXML(xml);
processLogRecordFilter(_monitor.getNDCTextFilter(), xml);
processLogLevels(_monitor.getLogLevelMenuItems(), xml);
processLogLevelColors(_monitor.getLogLevelMenuItems(),
LogLevel.getLogLevelColorMap(), xml);
processLogTableColumns(LogTableColumn.getLogTableColumns(), xml);
processConfigurationNode(root, xml);
closeConfigurationXML(xml);
store(xml.toString());
}
public void reset() {
deleteConfigurationFile();
collapseTree();
selectAllNodes();
}
public static String treePathToString(TreePath path) {
// count begins at one so as to not include the 'Categories' - root category
StringBuffer sb = new StringBuffer();
CategoryNode n = null;
Object[] objects = path.getPath();
for (int i = 1; i < objects.length; i++) {
n = (CategoryNode) objects[i];
if (i > 1) {
sb.append(".");
}
sb.append(n.getTitle());
}
return sb.toString();
}
//--------------------------------------------------------------------------
// Protected Methods:
//--------------------------------------------------------------------------
protected void load() {
File file = new File(getFilename());
if (file.exists()) {
try {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.
newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(file);
processRecordFilter(doc);
processCategories(doc);
processLogLevels(doc);
processLogLevelColors(doc);
processLogTableColumns(doc);
} catch (Exception e) {
// ignore all error and just continue as if there was no
// configuration xml file but do report a message
System.err.println("Unable process configuration file at " +
getFilename() + ". Error Message=" + e.getMessage());
}
}
}
// Added in version 1.2 - reads in the NDC text filter from the
// xml configuration file. If the value of the filter is not null
// or an empty string ("") then the manager will set the LogBrokerMonitor's
// LogRecordFilter to use the NDC LogRecordFilter. Otherwise, the
// LogBrokerMonitor will use the default LogRecordFilter.
protected void processRecordFilter(Document doc) {
NodeList nodeList = doc.getElementsByTagName(NDCTEXTFILTER);
// there is only one value stored
Node n = nodeList.item(0);
// add check for backwards compatibility as this feature was added in
// version 1.2
if (n == null) {
return;
}
NamedNodeMap map = n.getAttributes();
String text = getValue(map, NAME);
if (text == null || text.equals("")) {
return;
}
_monitor.setNDCLogRecordFilter(text);
}
protected void processCategories(Document doc) {
CategoryExplorerTree tree = _monitor.getCategoryExplorerTree();
CategoryExplorerModel model = tree.getExplorerModel();
NodeList nodeList = doc.getElementsByTagName(CATEGORY);
// determine where the starting node is
NamedNodeMap map = nodeList.item(0).getAttributes();
int j = (getValue(map, NAME).equalsIgnoreCase(FIRST_CATEGORY_NAME)) ? 1 : 0;
// iterate backwards throught the nodeList so that expansion of the
// list can occur
for (int i = nodeList.getLength() - 1; i >= j; i--) {
Node n = nodeList.item(i);
map = n.getAttributes();
CategoryNode chnode = model.addCategory(new CategoryPath(getValue(map, PATH)));
chnode.setSelected((getValue(map, SELECTED).equalsIgnoreCase("true")) ? true : false);
if (getValue(map, EXPANDED).equalsIgnoreCase("true")) ;
tree.expandPath(model.getTreePathToRoot(chnode));
}
}
protected void processLogLevels(Document doc) {
NodeList nodeList = doc.getElementsByTagName(LEVEL);
Map menuItems = _monitor.getLogLevelMenuItems();
for (int i = 0; i < nodeList.getLength(); i++) {
Node n = nodeList.item(i);
NamedNodeMap map = n.getAttributes();
String name = getValue(map, NAME);
try {
JCheckBoxMenuItem item =
(JCheckBoxMenuItem) menuItems.get(LogLevel.valueOf(name));
item.setSelected(getValue(map, SELECTED).equalsIgnoreCase("true"));
} catch (LogLevelFormatException e) {
// ignore it will be on by default.
}
}
}
protected void processLogLevelColors(Document doc) {
NodeList nodeList = doc.getElementsByTagName(COLORLEVEL);
Map logLevelColors = LogLevel.getLogLevelColorMap();
for (int i = 0; i < nodeList.getLength(); i++) {
Node n = nodeList.item(i);
// check for backwards compatibility since this feature was added
// in version 1.3
if (n == null) {
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -