/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.livetrace;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.joda.time.DateTime;
import org.joda.time.Period;
import com.google.common.base.Preconditions;
/**
* Oct 11, 2010
*/
public class Duration
extends SimpleDuration
{
private DateTime startTime;
private DateTime stopTime;
public boolean hasStarted()
{
return startTime != null;
}
public DateTime getStartTime()
{
return startTime;
}
void setStartTime( DateTime time )
{
this.startTime = time;
}
public boolean hasEnded()
{
return stopTime != null;
}
public DateTime getStopTime()
{
return stopTime;
}
void setStopTime( DateTime stopTime )
{
Preconditions.checkNotNull( startTime );
Preconditions.checkNotNull( stopTime );
this.stopTime = stopTime;
this.setDurationInMilliseconds( stopTime.getMillis() - startTime.getMillis() );
}
@Override
@JsonIgnore
public long getAsMilliseconds()
{
if ( hasEnded() )
{
return super.getAsMilliseconds();
}
else if ( startTime != null )
{
return new DateTime().getMillis() - startTime.getMillis();
}
else
{
return 0L;
}
}
@Override
public String getAsHRFormat()
{
if ( hasEnded() )
{
return super.getAsHRFormat();
}
else if ( startTime != null )
{
return HOURS_MINUTES_MILLIS.print( new Period( startTime, new DateTime() ) );
}
else
{
return "0";
}
}
@Override
public String toString()
{
StringBuffer s = new StringBuffer();
s.append( "startTime: " ).append( startTime ).append( "\n" );
s.append( "stopTime: " ).append( stopTime ).append( "\n" );
s.append( "executionTimeInMilliseconds: " ).append( getAsMilliseconds() ).append( "\n" );
return s.toString();
}
}