StoryDuration.java
package org.jbehave.core.model;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public class StoryDuration {
private static final int CANCEL_TIMEOUT_RATIO = 20;
private long startedAtMillis;
private long durationInMillis;
private final long timeoutInSecs;
private final long cancelTimeoutInSecs;
public StoryDuration(long timeoutInSecs) {
this(System.currentTimeMillis(), timeoutInSecs);
}
public StoryDuration(long startedAtMillis, long timeoutInSecs) {
this.startedAtMillis = startedAtMillis;
this.timeoutInSecs = timeoutInSecs;
this.cancelTimeoutInSecs = timeoutInSecs / CANCEL_TIMEOUT_RATIO;
}
public long getDurationInSecs() {
return durationInMillis / 1000;
}
public long getTimeoutInSecs() {
return timeoutInSecs;
}
public StoryDuration setDurationInSecs(long durationInSecs) {
this.durationInMillis = durationInSecs * 1000;
return this;
}
public StoryDuration update() {
this.durationInMillis = elapsedTimeInMillis();
return this;
}
private long elapsedTimeInMillis() {
return System.currentTimeMillis() - startedAtMillis;
}
public boolean timedOut() {
return timeoutInSecs != 0 && getDurationInSecs() > timeoutInSecs;
}
public boolean cancelTimedOut() {
return cancelTimeoutInSecs == 0 || getDurationInSecs() > timeoutInSecs + cancelTimeoutInSecs;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SIMPLE_STYLE);
}
}