Newer
Older
simple-jdbc-stats / src / nl / astraeus / jdbc / web / page / ShowStacktrace.java
package nl.astraeus.jdbc.web.page;

import nl.astraeus.jdbc.JdbcLogger;
import nl.astraeus.jdbc.SqlFormatter;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * User: rnentjes
 * Date: 4/12/12
 * Time: 9:16 PM
 */
public class ShowStacktrace extends TemplatePage {

    private Page previous;
    private JdbcLogger.LogEntry logEntry;

    boolean sortAvgTime = false;
    boolean sortTime = false;

    public ShowStacktrace(Page previous, JdbcLogger.LogEntry logEntry) {
        this.previous = previous;
        this.logEntry = logEntry;
    }

    @Override
    public Page processRequest(HttpServletRequest request) {

        if ("sortTime".equals(request.getParameter("action"))) {
            sortTime = true;
            sortAvgTime = false;
        } else if ("sortAvgTime".equals(request.getParameter("action"))) {
            sortTime = false;
            sortAvgTime = true;
        } else if ("back".equals(request.getParameter("action"))) {
            return previous;
        }

        return this;
    }

    public static class TraceElement {
        private StackTraceElement element;
        private boolean highlight;

        public TraceElement(StackTraceElement element, boolean highlight) {
            this.element = element;
            this.highlight = highlight;
        }

        public StackTraceElement getElement() {
            return element;
        }

        public boolean getHighlight() {
            return highlight;
        }
    }

    @Override
    public Map<String, Object> defineModel(HttpServletRequest request) {
        Map<String, Object> result = new HashMap<String, Object>();

        List<TraceElement> trace = new LinkedList<TraceElement>();

        for (int index = 4; index < logEntry.getStackTrace().length; index++) {
            boolean hl = logEntry.getStackTrace()[index].getClassName().startsWith("com.brandcleaner");
            trace.add(new TraceElement(logEntry.getStackTrace()[index], hl));
        }

        SqlFormatter formatter = new SqlFormatter();

        result.put("trace", trace);
        result.put("count", trace.size());
        result.put("sql", logEntry.getSql());

        result.put("sortAvgTime", sortAvgTime);
        result.put("sortTime", sortTime);

        return result;
    }

}