use of de.lmu.ifi.dbs.elki.logging.progress.ProgressLogRecord in project elki by elki-project.
the class LogPane method publish.
/**
* Publish a log record to the logging pane.
*
* @param record
* Log record
* @throws Exception
*/
protected synchronized void publish(LogRecord record) throws BadLocationException {
// choose an appropriate formatter
final Formatter fmt;
final Style style;
// always format progress messages using the progress formatter.
if (record.getLevel().intValue() >= Level.WARNING.intValue()) {
// format errors using the error formatter
fmt = errformat;
style = errStyle;
} else if (record.getLevel().intValue() <= Level.FINE.intValue()) {
// format debug statements using the debug formatter.
fmt = debugformat;
style = dbgStyle;
} else {
// default to the message formatter.
fmt = msgformat;
style = msgStyle;
}
// format
final String m;
m = fmt.format(record);
StyledDocument doc = getStyledDocument();
if (record instanceof ProgressLogRecord) {
if (lastNewlinePos < doc.getLength()) {
doc.remove(lastNewlinePos, doc.getLength() - lastNewlinePos);
}
} else {
// insert a newline, if we didn't see one yet.
if (lastNewlinePos < doc.getLength()) {
doc.insertString(doc.getLength(), "\n", style);
lastNewlinePos = doc.getLength();
}
}
int tail = tailingNonNewline(m, 0, m.length());
int headlen = m.length() - tail;
if (headlen > 0) {
String pre = m.substring(0, headlen);
doc.insertString(doc.getLength(), pre, style);
}
lastNewlinePos = doc.getLength();
if (tail > 0) {
String post = m.substring(m.length() - tail);
doc.insertString(lastNewlinePos, post, style);
}
}
use of de.lmu.ifi.dbs.elki.logging.progress.ProgressLogRecord in project elki by elki-project.
the class LogPanel method publish.
/**
* Publish a logging record.
*
* @param record Log record to publish
*/
protected void publish(final LogRecord record) {
if (record instanceof ProgressLogRecord) {
ProgressLogRecord preg = (ProgressLogRecord) record;
Progress prog = preg.getProgress();
JProgressBar pbar = getOrCreateProgressBar(prog);
updateProgressBar(prog, pbar);
if (prog.isComplete()) {
removeProgressBar(prog, pbar);
}
if (prog.isComplete() || prog instanceof StepProgress) {
publishTextRecord(record);
}
} else {
publishTextRecord(record);
}
}
use of de.lmu.ifi.dbs.elki.logging.progress.ProgressLogRecord in project elki by elki-project.
the class CLISmartHandler method publish.
/**
* Publish a log record.
*/
@Override
public void publish(final LogRecord record) {
// determine destination
final Writer destination;
if (record.getLevel().intValue() >= Level.WARNING.intValue()) {
destination = this.err;
} else {
destination = this.out;
}
// format
final String m;
// Progress records are handled specially.
if (record instanceof ProgressLogRecord) {
ProgressLogRecord prec = (ProgressLogRecord) record;
ptrack.addProgress(prec.getProgress());
Collection<Progress> completed = ptrack.removeCompleted();
Collection<Progress> progresses = ptrack.getProgresses();
StringBuilder buf = new StringBuilder();
if (!completed.isEmpty()) {
buf.append(OutputStreamLogger.CARRIAGE_RETURN);
for (Progress prog : completed) {
// TODO: use formatter, somehow?
prog.appendToBuffer(buf);
buf.append(OutputStreamLogger.NEWLINE);
}
}
if (!progresses.isEmpty()) {
boolean first = true;
buf.append(OutputStreamLogger.CARRIAGE_RETURN);
for (Progress prog : progresses) {
if (first) {
first = false;
} else {
buf.append(' ');
}
// TODO: use formatter, somehow?
prog.appendToBuffer(buf);
}
}
m = buf.toString();
} else {
// choose an appropriate formatter
final Formatter fmt;
// always format progress messages using the progress formatter.
if (record.getLevel().intValue() >= Level.WARNING.intValue()) {
// format errors using the error formatter
fmt = errformat;
} else if (record.getLevel().intValue() <= Level.FINE.intValue()) {
// format debug statements using the debug formatter.
fmt = debugformat;
} else {
// default to the message formatter.
fmt = msgformat;
}
try {
m = fmt.format(record);
} catch (Exception ex) {
reportError(null, ex, ErrorManager.FORMAT_FAILURE);
return;
}
}
// write
try {
destination.write(m);
// always flush (although the streams should auto-flush already)
destination.flush();
} catch (Exception ex) {
reportError(null, ex, ErrorManager.WRITE_FAILURE);
return;
}
}
Aggregations