// 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: TestFilesParser.java
// Path: monitor/parser/


package parser;

import java.io.*;
import eventbase.*;
import eventbase.event.*;
import eventbase.neighbor.*;
import eventbase.routing.*;
import eventbase.link.*;
import java.util.*;

class TestFilesParser {

    public static void main(String[] args) {
/*
    EventTableManager manager = new EventTableManager();
    OverlayHost host = new OverlayHost(2, "Apple");
    OverlayEvent e = new JoinGroupEvent(host);
    EventTableEntry entry = new EventTableEntry(10, host, e);
    manager.InsertEventToTable(entry);
    manager.printTable();
    entry = new EventTableEntry(2, host, e);
    manager.InsertEventToTable(entry);
    manager.printTable();
    entry = new EventTableEntry(4, host, e);
    manager.InsertEventToTable(entry);
    manager.printTable();
    entry = new EventTableEntry(3, host, e);
    manager.InsertEventToTable(entry);
    manager.printTable();
    entry = new EventTableEntry(15, host, e);
    manager.InsertEventToTable(entry);
    manager.printTable();
    entry = new EventTableEntry(1, host, e);
    manager.InsertEventToTable(entry);
    manager.printTable();
*/

        EventBaseAgent dbAgent = new EventBaseAgent();
	FilesParser parser = new LogFilesParser();
        parser.getDBObject(dbAgent);
        File[] files = new File[args.length];
        for (int i = 0; i < args.length; i++)
            files[i] = new File(args[i]);

	parser.parseFiles(files);

        dbAgent.printEventTable();

        dbAgent.getNextEventInit(0);
        EventTableEntry tblEntry;
        while ((tblEntry = dbAgent.getNextEvent()) != null) {
          tblEntry.print();
        }

       // dbAgent.printLinkInfoTable();

        //dbAgent.printNeighborTable();
/*
        System.out.println("Base Time is: " + dbAgent.getBaseTime());
        System.out.println("End Time is: " + dbAgent.getTimeOfLastEvent());

        int unix4id = 1;
        double t = Double.parseDouble("3.174675071619249E9");
        Vector v = dbAgent.getNbrTableForDisplay(1, t);
        // 08/12 Test
        for (Enumeration e = v.elements(); e.hasMoreElements();) {
          DisplayNeighborTableEntry entry = ((DisplayNeighborTableEntry)e.nextElement());
          System.out.println(entry.getNeighbor().getName() + " " +  entry.getTimeSinceNeighbor()
                             + " " + entry.getTimeCeaseNeighbor() + " " + entry.getReasonToLeave());
        }

//        dbAgent.printLinkInfoTable();

        // testing for delay
        //3,174,674,309.405383
        t = Double.parseDouble("3174675334.359385");
        // link of node 4 to 2
        DisplayLinkInfo info = dbAgent.getLinkInfo(t, 4, 2, 0);
        // should be 11
        if (!info.isEmpty()) {
          System.out.println("src to target delay " + info.getSrcToTargetDelay());
          // should be 1
          System.out.println("target to src delay " + info.getTargetToSrcDelay());
        }


      dbAgent.printMappingTable();
      dbAgent.printSpanningTreeTables();
      System.out.println("test spanning tree");
      t = Double.parseDouble("3174675071.619249");
      v = dbAgent.getSpanningTreeForDisplay(t, 1);
      for (int i = 0; i < v.size(); i++) {
        ((SpanningTreeTableEntry)v.get(i)).print();
      }

      System.out.println("test VRT");
      t = Double.parseDouble("3174675071.619249");
      v = dbAgent.getRoutingTableForDisplay(t, 1);
      for (int i = 0; i < v.size(); i++) {
        ((VirtualRoutingTableEntry)v.get(i)).print();
      }
*/
    }
}
