/*
* 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>();
}
}