/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.livetrace; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.joda.time.Period; import org.joda.time.format.PeriodFormatter; import org.joda.time.format.PeriodFormatterBuilder; public class Traces<T extends Trace> implements Iterable<T> { private static final PeriodFormatter hoursMinutesMillis = new PeriodFormatterBuilder().appendHours().appendSuffix( " h ", " h " ).appendMinutes().appendSuffix( " m ", " m " ).appendSeconds().appendSuffix( " s ", " s " ).appendMillis().appendSuffix( " ms", " ms" ).toFormatter(); private List<T> list = new ArrayList<T>(); private int totalPeriodTimeInMilliseconds = 0; private Traces() { // protection } @Override public Iterator<T> iterator() { return list.iterator(); } public void add( T trace ) { trace.setContainer( this ); list.add( trace ); computeTotalPeriod(); } @SuppressWarnings("UnusedDeclaration") public List<T> getList() { return list; } public int getTotalPeriodInMilliseconds() { return totalPeriodTimeInMilliseconds; } public String getTotalPeriodInHRFormat() { return hoursMinutesMillis.print( new Period( totalPeriodTimeInMilliseconds ) ); } void computeTotalPeriod() { int newTotalPeriodTimeInMilliseconds = 0; for ( Trace trace : list ) { long asMilliseconds = trace.getDuration().getAsMilliseconds(); newTotalPeriodTimeInMilliseconds += asMilliseconds; } totalPeriodTimeInMilliseconds = newTotalPeriodTimeInMilliseconds; } public static <T extends Trace> Traces<T> create() { return new Traces<T>(); } }