// Carnegie Mellon University
//   Information Networking Institute and
//   School of Computer Science
//
// Master Thesis: A Monitoring Tool for Overlay Network
// By: TungFai Chan and Annie Cheng
//
// File: EventTableEntry.java
// Path: eventbase/event
// Description: defines description for event table entry.

package eventbase.event;
import java.text.*;
import eventbase.*;

public class EventTableEntry {

  final String OBJECT_NAME = "EventTableEntry";

  private double timeStamp;
  private OverlayHost nodeEventOccur;
  private int eventType;
  private OverlayEvent e;

  public EventTableEntry(double t, OverlayHost node, OverlayEvent e) {
    this.timeStamp = t;
    this.nodeEventOccur = node;
    this.eventType = e.getEventId();
    this.e = e;
  }

  public int getMemorySize() {
    // Overlay Event size + eventType size + Overlay Host size
    return e.getMemorySize() + 4 + OverlayHost.getMemorySize();
  }

  public double getTime() {
    return timeStamp;
  }

  public OverlayEvent getEvent() {
    return e;
  }

  public OverlayHost getSourceNode() {
    return nodeEventOccur;
  }

  public boolean occursEarlier(EventTableEntry inEvent) {
    return (this.getTime() < inEvent.getTime());
  }

  public boolean occursLater(EventTableEntry inEvent) {
    return (this.getTime() > inEvent.getTime());
  }

  public void print() {
    // Number Format
    DecimalFormat numformat = new DecimalFormat();
    numformat.setMaximumFractionDigits(6);
    System.out.println(numformat.format(timeStamp) + " " + nodeEventOccur.getName()
                       + " " + eventType);
    System.out.println("   <" + e.getOutputString() + ">");
  }

}