blob: 09add8ec0dad17ada2b543f0177352caa4fb4355 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.log4j.chainsaw.logui;
import org.apache.log4j.chainsaw.ChainsawConstants;
import org.apache.log4j.chainsaw.ChainsawStatusBar;
import org.apache.log4j.chainsaw.ChainsawToolBarAndMenus;
import org.apache.log4j.chainsaw.color.RuleColorizer;
import org.apache.log4j.chainsaw.components.elements.TabIconHandler;
import org.apache.log4j.chainsaw.components.logpanel.LogPanel;
import org.apache.log4j.chainsaw.components.tabbedpane.ChainsawTabbedPane;
import org.apache.log4j.chainsaw.icons.ChainsawIcons;
import org.apache.log4j.chainsaw.prefs.SettingsManager;
import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
import org.apache.log4j.chainsaw.zeroconf.ZeroConfPlugin;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.swing.*;
import java.awt.*;
import java.beans.PropertyChangeListener;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LogUIPanelBuilder {
private static Logger logger = LogManager.getLogger(LogUIPanelBuilder.class);
ChainsawTabbedPane tabbedPane;
List<LogPanel> identifierPanels;
ChainsawToolBarAndMenus chainsawToolBarAndMenus;
private Map<String, Component> panelMap;
private SettingsManager settingsManager;
private ChainsawStatusBar chainsawStatusBar;
private ZeroConfPlugin zeroConfPlugin;
private Map<String, RuleColorizer> allColorizers = new HashMap<>();
private RuleColorizer globalRuleColorizer = new RuleColorizer(settingsManager, true);
public LogUIPanelBuilder(ChainsawTabbedPane tabbedPane, List<LogPanel> identifierPanels,
ChainsawToolBarAndMenus chainsawToolBarAndMenus, Map<String, Component> panelMap,
SettingsManager settingsManager, ChainsawStatusBar chainsawStatusBar, ZeroConfPlugin zeroConfPlugin) {
this.tabbedPane = tabbedPane;
this.identifierPanels = identifierPanels;
this.chainsawToolBarAndMenus = chainsawToolBarAndMenus;
this.panelMap = panelMap;
this.settingsManager = settingsManager;
this.chainsawStatusBar = chainsawStatusBar;
this.zeroConfPlugin = zeroConfPlugin;
RuleColorizer colorizer = new RuleColorizer(settingsManager);
allColorizers.put(ChainsawConstants.DEFAULT_COLOR_RULE_NAME, colorizer);
globalRuleColorizer.setConfiguration(settingsManager.getGlobalConfiguration());
globalRuleColorizer.loadColorSettings();
}
void buildLogPanel(boolean customExpression, final String ident, final ChainsawReceiver rx)
throws IllegalArgumentException {
final LogPanel thisPanel = new LogPanel(settingsManager, chainsawStatusBar, ident, allColorizers, globalRuleColorizer);
if (!customExpression && rx != null) {
thisPanel.setReceiver(rx);
}
/*
* Now add the panel as a batch listener so it can handle it's own
* batchs
*/
if (!customExpression) {
identifierPanels.add(thisPanel);
}
TabIconHandler iconHandler = new TabIconHandler(ident, tabbedPane);
thisPanel.addEventCountListener(iconHandler);
tabbedPane.addChangeListener(iconHandler);
PropertyChangeListener toolbarMenuUpdateListener =
evt -> chainsawToolBarAndMenus.stateChange();
thisPanel.addPropertyChangeListener(toolbarMenuUpdateListener);
thisPanel.addPreferencePropertyChangeListener(toolbarMenuUpdateListener);
thisPanel.addPropertyChangeListener(
"docked",
evt -> {
LogPanel logPanel = (LogPanel) evt.getSource();
if (logPanel.isDocked()) {
panelMap.put(logPanel.getIdentifier(), logPanel);
tabbedPane.addANewTab(
logPanel.getIdentifier(), logPanel, null,
true);
tabbedPane.setSelectedTab(tabbedPane.indexOfTab(logPanel.getIdentifier()));
} else {
tabbedPane.remove(logPanel);
}
});
logger.debug("adding logpanel to tabbed pane: {}", ident);
//NOTE: tab addition is a very fragile process - if you modify this code,
//verify the frames in the individual log panels initialize to their
//correct sizes
tabbedPane.add(ident, thisPanel);
panelMap.put(ident, thisPanel);
/*
* Let the new LogPanel receive this batch
*/
SwingUtilities.invokeLater(
() -> {
tabbedPane.addANewTab(
ident,
thisPanel,
new ImageIcon(ChainsawIcons.ANIM_RADIO_TOWER),
false);
thisPanel.layoutComponents();
tabbedPane.addANewTab(ChainsawTabbedPane.ZEROCONF,
zeroConfPlugin,
null,
false);
});
logger.debug("added tab {}", ident);
}
}