/*
 * NBConsoleFormatter.java
 *
 * Created on April 7, 2005, 12:13 PM
 */
package org.das2.util;

import java.text.DecimalFormat;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;

/**
 *
 * @author Jeremy
 */
public class TimerConsoleFormatter extends Formatter {

    long t0= System.currentTimeMillis();
    DecimalFormat nf;
    String lastLoggerName;
    String resetMessage;

    private final static String SPACES = "                                  ";
    
    @Override
    public String format(LogRecord rec) {
        
        final String message = rec.getMessage();
        //if ( lastLoggerName==null || lastLoggerName!=rec.getLoggerName() ) {
        if (message != null && resetMessage!=null && message.contains(resetMessage)) {
            //lastLoggerName = rec.getLoggerName();
            t0 = System.currentTimeMillis();
        }

        String source = "???";
        
        StackTraceElement[] st = new Throwable().getStackTrace();
        if (st.length > 8) {
            int idx= 5;
            while ( idx<8 && st[idx].getClassName().contains("java.util.logging.Logger") ) idx++;
            source = String.valueOf(st[idx].getClassName());
            if (source.startsWith("org.das2")) {
                source = source.substring("org.das2".length());
                if (source.length() < SPACES.length()) {
                    source = SPACES.substring(source.length()) + source;
                }
            }
        }

        long t = System.currentTimeMillis() - t0;
        
        String threadId= Thread.currentThread().getName();
        threadId = fixedColumn(threadId, 20);
        
        return nf.format(t) + ":" + fixedColumn(rec.getLoggerName(),20) + ": " + source + ": " + threadId+":" + rec.getLevel().getLocalizedName() + ": " + String.valueOf(message) + "\n";
    }

    public void setResetMessage( String msg ) {
        this.resetMessage= msg;
    }
    
    public TimerConsoleFormatter() {
        t0 = System.currentTimeMillis();
        nf = new DecimalFormat("00000");
    }

    private String fixedColumn(String threadId, int sp) {
        try {
        if (threadId.length() > sp) threadId = threadId.substring(threadId.length()-sp, threadId.length());
        if (threadId.length() < sp) threadId = SPACES.substring(0, sp - threadId.length()) + threadId;
        return threadId;
        } catch ( StringIndexOutOfBoundsException ex ) {
            return threadId;
        }
    }
}