package com.tagtraum.perf.gcviewer;


/**
 * GCEvent.
 *
 * Date: Jan 30, 2002
 * Time: 5:05:43 PM
 * @author <a href="mailto:hs@tagtraum.com">Hendrik Schreiber</a>
 * @version $Id: $
 */
public class GCEvent extends AbstractGCEvent {

    /**
     * Used before GC in KB.
     */
    private int preUsed;
    /**
     * Used after GC in KB.
     */
    private int postUsed;
    /**
     * Capacity in KB.
     */
    private int total;
    /**
     * Pause in seconds.
     */
    private double pause;

    public GCEvent() {
    }

    public GCEvent(double timestamp, int preUsed, int postUsed, int total, double pause, GCEvent.Type type) {
        this.setTimestamp(timestamp);
        this.preUsed = preUsed;
        this.postUsed = postUsed;
        this.total = total;
        this.pause = pause;
        this.setType(type);
    }

    public void setPreUsed(int preUsed) {
        this.preUsed = preUsed;
    }

    public void setPostUsed(int postUsed) {
        this.postUsed = postUsed;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public void setPause(double pause) {
        this.pause = pause;
    }

    public boolean isFull() {
        //return getType() == GCEvent.Type.FULL_GC;
        return getType() == GCEvent.Type.FULL_GC || getType().getGeneration() == Generation.TENURED || hasTenuredDetail();
    }

    public boolean isInc() {
        return getType() == GCEvent.Type.INC_GC;
    }

    public double getPause() {
        return pause;
    }

    public int getPreUsed() {
        return preUsed;
    }

    public int getPostUsed() {
        return postUsed;
    }

    public int getTotal() {
        return total;
    }

    public void toStringBuffer(StringBuffer sb) {
        sb.append(getTimestamp());
        sb.append(": [");
        sb.append(getType());
        sb.append(' ');
        if (details != null) {
            for (int i=0,length=details.size(); i<length; i++) {
                final AbstractGCEvent event = (AbstractGCEvent)details.get(i);
                event.toStringBuffer(sb);
            }
        }
        sb.append(preUsed);
        sb.append("K->");
        sb.append(postUsed);
        sb.append("K(");
        sb.append(total);
        sb.append("K), ");
        sb.append(pause);
        sb.append(" secs]");
    }


}
