/*
* Copyright (C) 2010, 2011, 2012 by Arne Kesting, Martin Treiber, Ralph Germ, Martin Budden
* <movsim.org@gmail.com>
* -----------------------------------------------------------------------------------------
*
* This file is part of
*
* MovSim - the multi-model open-source vehicular-traffic simulator.
*
* MovSim is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MovSim is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MovSim. If not, see <http://www.gnu.org/licenses/>
* or <http://www.movsim.org>.
*
* -----------------------------------------------------------------------------------------
*/
package org.movsim.viewer.ui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Enumeration;
import java.util.ResourceBundle;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import org.apache.log4j.Category;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.movsim.viewer.util.SwingHelper;
import org.movsim.viewer.util.SwingLogAppender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author ralph
*
*/
public class LogWindow extends JFrame {
private static final long serialVersionUID = 7260621844785396283L;
final static Logger logger = LoggerFactory.getLogger(LogWindow.class);
static private JTextArea jTextArea = null;
public LogWindow(ResourceBundle resourceBundle, final JCheckBoxMenuItem cbMenu) {
super(resourceBundle.getString("LogWindowTitle"));
setLayout(new BorderLayout());
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent evnt) {
cbMenu.setSelected(false);
evnt.getWindow().setVisible(false);
evnt.getWindow().dispose();
}
});
logger.debug("Constuctor LogWindow");
setLocation(10, 700);
final JPanel logPanel = new JPanel();
logPanel.setPreferredSize(new Dimension(800, 300));
logPanel.setLayout(new BorderLayout());
final JScrollPane scrollPane = new JScrollPane(jTextArea);
final JPanel logLevelChooserPanel = new JPanel();
final String debug = resourceBundle.getString("LogDebug");
final String info = resourceBundle.getString("LogInfo");
final String off = resourceBundle.getString("LogOff");
final String warn = resourceBundle.getString("LogWarn");
final String error = resourceBundle.getString("LogError");
final String[] logLevels = { debug, info, warn, error, off };
final JComboBox logLevel = new JComboBox(logLevels);
logLevel.setSelectedItem("info");
SwingHelper.setComponentSize(logLevel, 120, 22);
logLevel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final JComboBox comboBox = (JComboBox) e.getSource();
final String chosenLogLevel = (String) comboBox.getSelectedItem();
logger.info("Changed loglevel to {}", chosenLogLevel);
if (chosenLogLevel.equals(debug)) {
changeLevelOfAllLoggersTo(Level.DEBUG);
} else if (chosenLogLevel.equals(info)) {
changeLevelOfAllLoggersTo(Level.INFO);
} else if (chosenLogLevel.equals(warn)) {
changeLevelOfAllLoggersTo(Level.WARN);
} else if (chosenLogLevel.equals(error)) {
changeLevelOfAllLoggersTo(Level.ERROR);
} else {
turnOffAllLoggers();
}
}
});
final JLabel lblLogLevel = new JLabel("LogLevel: ");
logLevelChooserPanel.add(lblLogLevel);
logLevelChooserPanel.add(logLevel);
logPanel.add(logLevelChooserPanel, BorderLayout.NORTH);
logPanel.add(scrollPane, BorderLayout.CENTER);
add(logPanel, BorderLayout.CENTER);
pack();
setVisible(true);
}
public static void setupLog4JAppender() {
LogWindow.jTextArea = new JTextArea();
SwingLogAppender.setTextArea(LogWindow.jTextArea);
}
public static void turnOffAllLoggers() {
changeLevelOfAllLoggersTo(Level.OFF);
}
@SuppressWarnings("unchecked")
public static void changeLevelOfAllLoggersTo(Level level) {
final Enumeration<org.apache.log4j.Logger> loggers = LogManager.getCurrentLoggers();
while (loggers.hasMoreElements()) {
final org.apache.log4j.Logger l = loggers.nextElement();
((Category) l).setLevel(level);
}
}
}