/*
* #%L
* =====================================================
* _____ _ ____ _ _ _ _
* |_ _|_ __ _ _ ___| |_ / __ \| | | | ___ | | | |
* | | | '__| | | / __| __|/ / _` | |_| |/ __|| |_| |
* | | | | | |_| \__ \ |_| | (_| | _ |\__ \| _ |
* |_| |_| \__,_|___/\__|\ \__,_|_| |_||___/|_| |_|
* \____/
*
* =====================================================
*
* Hochschule Hannover
* (University of Applied Sciences and Arts, Hannover)
* Faculty IV, Dept. of Computer Science
* Ricklinger Stadtweg 118, 30459 Hannover, Germany
*
* Email: trust@f4-i.fh-hannover.de
* Website: http://trust.f4.hs-hannover.de/
*
* This file is part of visitmeta-visualization, version 0.6.0,
* implemented by the Trust@HsH research group at the Hochschule Hannover.
* %%
* Copyright (C) 2012 - 2016 Trust@HsH
* %%
* Licensed 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.
* #L%
*/
package de.hshannover.f4.trust.visitmeta.gui.dialog;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.swing.JTextArea;
import org.apache.log4j.Appender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.ErrorHandler;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;
public class JTextAreaAppander implements Appender {
private static final Logger LOGGER = Logger.getLogger(JTextAreaAppander.class);
private static final String mNewline = System.getProperty("line.separator");
private static SimpleDateFormat timeFormat;
private String mName;
private boolean mClosed;
private static List<JTextArea> mJtaMain;
public JTextAreaAppander() {
timeFormat = new SimpleDateFormat("HH:mm:ss", Locale.GERMANY);
mJtaMain = new ArrayList<JTextArea>();
}
public static void addJTextArea(JTextArea textArea) {
mJtaMain.add(textArea);
textArea.setText(mJtaMain.get(0).getText());
}
public void removeJTextArea(JTextArea textArea) {
mJtaMain.remove(textArea);
}
public static void clearJTextAreas() {
mJtaMain.clear();
}
@Override
public void addFilter(Filter filter) {
}
@Override
public void clearFilters() {
}
@Override
public void close() {
mClosed = true;
}
@Override
public void doAppend(LoggingEvent event) {
if (!mClosed) {
Throwable throwable = null;
if (event.getThrowableInformation() != null) {
throwable = event.getThrowableInformation().getThrowable();
}
for (JTextArea textArea : mJtaMain) {
switch (event.getLevel().toInt()) {
case Level.INFO_INT:
textArea.append(toString(event.getLoggerName(), event.getLevel(), event.getMessage().toString(),
event.getTimeStamp(), throwable)
+ mNewline);
break;
case Level.ERROR_INT:
textArea.append(toString(event.getLoggerName(), event.getLevel(), event.getMessage().toString(),
event.getTimeStamp(), throwable)
+ mNewline);
break;
case Level.WARN_INT:
textArea.append(toString(event.getLoggerName(), event.getLevel(), event.getMessage().toString(),
event.getTimeStamp(), throwable)
+ mNewline);
break;
default:
break;
}
textArea.setCaretPosition(textArea.getDocument().getLength());
}
}
}
private String toString(String name, Level level, String message, long time, Throwable throwable) {
StringBuilder sb = new StringBuilder();
sb.append(timeFormat.format(time));
sb.append(" [");
if (level != null) {
sb.append(level.toString());
} else {
sb.append("LEVEL NULL");
}
sb.append("] ");
if (message != null) {
sb.append(message);
}
sb.append(' ');
if (throwable != null) {
sb.append(throwable.toString());
// StackTraceElement[] stackTrace = throwable.getStackTrace();
// for (int i = 0; i < stackTrace.length; i++) {
// StackTraceElement element = stackTrace[i];
// sb.append(mNewline);
// sb.append("\tat ");
// sb.append(element.toString());
// }
}
return sb.toString();
}
@Override
public ErrorHandler getErrorHandler() {
LOGGER.trace("getErrorHandler");
return null;
}
@Override
public Filter getFilter() {
LOGGER.trace("getFilter");
return null;
}
@Override
public Layout getLayout() {
LOGGER.trace("getLayout");
return null;
}
@Override
public String getName() {
return mName;
}
@Override
public boolean requiresLayout() {
return false;
}
@Override
public void setErrorHandler(ErrorHandler handler) {
}
@Override
public void setLayout(Layout layout) {
}
@Override
public void setName(String name) {
mName = name;
}
}