001package org.hl7.fhir.utilities;
002
003import java.io.BufferedWriter;
004import java.io.File;
005import java.io.FileNotFoundException;
006import java.io.FileOutputStream;
007import java.io.IOException;
008import java.io.OutputStreamWriter;
009
010public class SimpleTimeTracker {
011
012  private long start;
013  private String name;
014  private String context;
015  private int count;
016  
017  public static int level = 0;
018  public static BufferedWriter bw;
019  
020  public SimpleTimeTracker(String name) {    
021    level++;
022    this.name = name;
023    count = -1;
024    start = System.currentTimeMillis();
025    init();
026    log(name);
027  }
028    
029  public SimpleTimeTracker(String name, String context) {
030    level++;
031    this.name = name;
032    this.context = context;
033    start = System.currentTimeMillis();
034    count = -1;
035    init();
036    log(name+" ["+context+"]");
037  }
038  
039  private void init() {
040    if (bw == null) {
041      try {
042        File fout = new File("/Users/grahamegrieve/temp/time.txt");
043        FileOutputStream fos = new FileOutputStream(fout);
044        bw = new BufferedWriter(new OutputStreamWriter(fos));
045      } catch (Exception e) {
046        e.printStackTrace();
047      }
048     
049    }
050    
051  }
052
053  public void report()  {
054    String s = count == -1 ? "" : " ("+count+")";
055    if (context == null) {
056      s = name+": "+(System.currentTimeMillis()-start)+"ms "+s;
057    } else {
058      s = name+": "+(System.currentTimeMillis()-start)+"ms "+s+" ["+context+"]";      
059    }
060    log(s);
061    level--;
062    if (level == 0) {
063      try {
064        bw.close();
065      } catch (Exception e) {
066        e.printStackTrace();
067      }
068    }
069  }
070
071  private void log(String s) {
072    System.out.println(Utilities.padLeft("", '#', level)+" "+s);
073    try {
074      bw.write(s);
075      bw.newLine();
076    } catch (Exception e) {
077      System.out.println("e: " +e.getMessage());
078    }
079  }
080
081  public void count() {
082    if (count == -1) {
083      count = 1;
084    } else {
085      count++;
086    }
087    
088  }
089
090}