blob: 09e3144b8f864ad4da20f0de1919e4d58aacfd81 [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.
*/
/**
* @author Vitaly A. Provodin
*/
/**
* Created on 28.03.2005
*/
package org.apache.harmony.jpda.tests.share;
import java.io.PrintStream;
import org.apache.harmony.jpda.tests.framework.LogWriter;
/**
* This class provides logging messages to underlying output stream. There are
* can be several JPDALogWriter objects writing to the same underlying stream
* with different prefixes.
*/
public class JPDALogWriter extends LogWriter {
protected String printPrefix;
protected String errorMessage;
protected LogStream logStream;
public boolean enablePrint = true;
/**
* Constructs an instance of the class for given output stream.
*
* @param outputStream
* stream for output
* @param prefix
* prefix for messages or null
* @param enablePrint
* flag for enabling print to log
*/
public JPDALogWriter(PrintStream outputStream, String prefix,
boolean enablePrint) {
super(prefix);
this.enablePrint = enablePrint;
logStream = new LogStream(outputStream);
}
/**
* Constructs an instance of the class for given output stream.
*
* @param outputStream
* stream for output
* @param prefix
* prefix for messages or null
*/
public JPDALogWriter(PrintStream outputStream, String prefix) {
this(outputStream, prefix, true);
}
/**
* Constructs an instance of the class to log to the same output stream.
*
* @param logWriter
* log writer containing stream for output
* @param prefix
* prefix for messages or null
*/
public JPDALogWriter(JPDALogWriter logWriter, String prefix) {
super(prefix);
logStream = logWriter.getLogStream();
}
/**
* Sets prefix for messages.
*
* @param prefix
* to be set
*/
@Override
public void setPrefix(String prefix) {
super.setPrefix(prefix);
if (prefix == null || prefix.length() <= 0) {
printPrefix = "";
} else {
printPrefix = prefix + "> ";
}
}
/**
* Prints error message.
*
* @param message
* error message to be printed
*/
@Override
public void printError(String message) {
if (null == errorMessage) {
errorMessage = message;
}
logStream.println(getErrorPrefix() + message);
}
/**
* Prints exception information with explaining message.
*
* @param message
* explaining message to be printed
* @param throwable
* exception to be printed
*/
@Override
public void printError(String message, Throwable throwable) {
if (null == errorMessage) {
errorMessage = message;
}
logStream.printStackTrace(getErrorPrefix() + message, throwable);
}
/**
* Prints exception information w/o explaining message.
*
* @param throwable
* exception to be printed
*/
@Override
public void printError(Throwable throwable) {
logStream.printStackTrace(null, throwable);
}
/**
* Prints message to the output stream w/o line feed.
*
* @param message
* to be printed
*/
@Override
public void print(String message) {
if (enablePrint) {
logStream.print(printPrefix + message);
}
}
/**
* Prints message to the output stream with line feed.
*
* @param message
* to be printed
*/
@Override
public void println(String message) {
if (enablePrint) {
logStream.println(printPrefix + message);
}
}
/**
* Returns saved error message.
*
* @return message string
*/
public String getErrorMessage() {
return errorMessage;
}
// /////////////////////////////////////////////////////////////////////////////
/**
* Get prefix for error messages.
*/
protected String getErrorPrefix() {
return "# ERROR: " + printPrefix;
}
/**
* Get underlying LogStream object.
*/
protected LogStream getLogStream() {
return logStream;
}
/**
* Underlying stream with synchronous access.
*/
protected static class LogStream {
protected PrintStream outputStream;
/**
* A constructor.
*
* @param outputStream
*/
public LogStream(PrintStream outputStream) {
setOutputStream(outputStream);
}
/**
* @return The associated output stream.
*/
public synchronized PrintStream getOutputStream() {
return outputStream;
}
/**
* Sets new output stream.
*
* @param outputStream
* new output stream
*/
public synchronized void setOutputStream(PrintStream outputStream) {
this.outputStream = outputStream;
}
/**
* Prints the given message with the newline to the output stream.
*
* @param message
* log message
*/
public synchronized void println(String message) {
outputStream.println(message);
}
/**
* Prints the given message to the output stream.
*
* @param message
* log message
*/
public synchronized void print(String message) {
outputStream.print(message);
outputStream.flush();
}
/**
* Prints the given message and the call stack of the exception to the
* output stream.
*
* @param message
* log message
* @param throwable
* exception
*/
public synchronized void printStackTrace(String message,
Throwable throwable) {
if (message != null) {
println(message);
}
throwable.printStackTrace(outputStream);
}
}
}