/*
This file is part of jpcsp.
Jpcsp 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.
Jpcsp 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 Jpcsp. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* 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 jpcsp.log;
import java.awt.event.ItemEvent;
import java.io.PrintStream;
import javax.swing.DefaultComboBoxModel;
import javax.swing.UIManager;
import jpcsp.WindowPropSaver;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
public class LogWindow extends javax.swing.JFrame {
private static String confFile = "LogSettings.xml";
private final String[] loglevels = {"ALL", "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "OFF"};
public LogWindow() {
initComponents();
TextPaneAppender textPaneAppender = (TextPaneAppender) Logger.getRootLogger().getAppender("JpcspAppender");
if (textPaneAppender != null) {
textPaneAppender.setTextPane(tpLog);
}
getLogLevelFromConfig();
WindowPropSaver.loadWindowProperties(this);
}
public static void setConfXMLFile(String path) {
confFile = path;
}
public void clearScreenMessages() {
synchronized (tpLog) {
tpLog.setText("");
}
}
private void getLogLevelFromConfig() {
final Logger rootLogger = Logger.getRootLogger();
Level lvlConfig = rootLogger.getLevel();
if (lvlConfig.equals(Level.ALL)) {
cmbLogLevel.setSelectedIndex(0);
}
if (lvlConfig.equals(Level.TRACE)) {
cmbLogLevel.setSelectedIndex(1);
}
if (lvlConfig.equals(Level.DEBUG)) {
cmbLogLevel.setSelectedIndex(2);
}
if (lvlConfig.equals(Level.INFO)) {
cmbLogLevel.setSelectedIndex(3);
}
if (lvlConfig.equals(Level.WARN)) {
cmbLogLevel.setSelectedIndex(4);
}
if (lvlConfig.equals(Level.ERROR)) {
cmbLogLevel.setSelectedIndex(5);
}
if (lvlConfig.equals(Level.FATAL)) {
cmbLogLevel.setSelectedIndex(6);
}
if (lvlConfig.equals(Level.OFF)) {
cmbLogLevel.setSelectedIndex(7);
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
System.setProperty("log4j.properties", confFile);
DOMConfigurator.configure(confFile);
System.setOut(new PrintStream(new LoggingOutputStream(Logger.getLogger("sysout"), Level.INFO)));
new LogWindow().setVisible(true);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
scrollPane = new javax.swing.JScrollPane();
lblLevel = new javax.swing.JLabel();
cmbLogLevel = new javax.swing.JComboBox();
btnClear = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("jpcsp/languages/jpcsp"); // NOI18N
setTitle(bundle.getString("LogWindow.title")); // NOI18N
setMinimumSize(new java.awt.Dimension(400, 120));
scrollPane.setViewportView(tpLog);
lblLevel.setText(bundle.getString("LogWindow.lblLevel.text")); // NOI18N
cmbLogLevel.setModel(new DefaultComboBoxModel(loglevels));
cmbLogLevel.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
cmbLogLevelItemStateChanged(evt);
}
});
btnClear.setText(bundle.getString("ClearButton.text")); // NOI18N
btnClear.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnClearActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(scrollPane)
.addGroup(layout.createSequentialGroup()
.addComponent(lblLevel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cmbLogLevel, 0, 309, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(btnClear)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 145, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblLevel)
.addComponent(cmbLogLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(btnClear, javax.swing.GroupLayout.Alignment.TRAILING))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnClearActionPerformed
clearScreenMessages();
}//GEN-LAST:event_btnClearActionPerformed
private void cmbLogLevelItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbLogLevelItemStateChanged
final Logger rootLogger = Logger.getRootLogger();
if (evt.getStateChange() == ItemEvent.SELECTED) {
if (evt.getItem().equals(loglevels[0])) {
rootLogger.setLevel(Level.ALL);
}
if (evt.getItem().equals(loglevels[1])) {
rootLogger.setLevel(Level.TRACE);
}
if (evt.getItem().equals(loglevels[2])) {
rootLogger.setLevel(Level.DEBUG);
}
if (evt.getItem().equals(loglevels[3])) {
rootLogger.setLevel(Level.INFO);
}
if (evt.getItem().equals(loglevels[4])) {
rootLogger.setLevel(Level.WARN);
}
if (evt.getItem().equals(loglevels[5])) {
rootLogger.setLevel(Level.ERROR);
}
if (evt.getItem().equals(loglevels[6])) {
rootLogger.setLevel(Level.FATAL);
}
if (evt.getItem().equals(loglevels[7])) {
rootLogger.setLevel(Level.OFF);
}
}
}//GEN-LAST:event_cmbLogLevelItemStateChanged
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnClear;
private javax.swing.JComboBox cmbLogLevel;
private javax.swing.JLabel lblLevel;
private javax.swing.JScrollPane scrollPane;
private final javax.swing.JTextPane tpLog = new javax.swing.JTextPane();
// End of variables declaration//GEN-END:variables
}