package eu.leads.processor.execute; import eu.leads.processor.utils.StdOutputWriter; import java.io.*; import java.util.TimerTask; /** * Created by vagvaz on 12/17/13. */ public class ProgressReport extends TimerTask implements Serializable { private long ticks; private long overall; private boolean maxed; private String prefix; public ProgressReport(String prefix, long ticks, long overall) { this.ticks = ticks; this.overall = overall; maxed = false; this.prefix = prefix; } @Override public void run() { if (maxed) { this.cancel(); StdOutputWriter.getInstance().println(""); return; } double report = getReport(); printReport(report); // try { // } catch (IOException e) { // e.printStackTrace(); // } } public void printReport(double report) { if (report >= 0.999999998) maxed = true; String tmp = ""; if (!maxed) // tmp = prefix + " processed: " + Integer.toString((int)(Math.ceil(report*100))) + "%\r"; tmp = prefix + " processed: " + Long.toString(ticks) + " tuples\r"; else // tmp = prefix + " processed: " + Integer.toString((int)(Math.ceil(report*100))) + "%\n"; tmp = prefix + " processed: " + Long.toString(ticks) + " tuples\n"; StdOutputWriter.getInstance().write(tmp); } public void tick() { ticks++; } public void tick(long t) { ticks += t; } public double getReport() { if (overall > 0) return Math.min(1.0, (double) ticks / overall); else return 0.0; } private void writeObject(ObjectOutputStream out) { try { out.writeLong(ticks); out.writeLong(overall); out.writeBoolean(maxed); out.writeUTF(prefix); } catch (IOException e) { e.printStackTrace(); } } private void readObject(ObjectInputStream in) { try { ticks = in.readLong(); overall = in.readLong(); maxed = in.readBoolean(); prefix = in.readUTF(); } catch (IOException e) { e.printStackTrace(); } } private void readObjectNoData() { ticks = 0; overall = 0; maxed = false; } }