package scrum.server.sprint;
import ilarkesto.base.time.Date;
import ilarkesto.fp.Predicate;
import java.util.LinkedList;
import java.util.List;
public class SprintDaySnapshotDao extends GSprintDaySnapshotDao {
public SprintDaySnapshot getSprintDaySnapshot(final Sprint sprint, final Date date, boolean autoCreate) {
SprintDaySnapshot snapshot = getEntity(new Predicate<SprintDaySnapshot>() {
public boolean test(SprintDaySnapshot e) {
return e.isSprint(sprint) && e.isDate(date);
}
});
if (autoCreate && snapshot == null) {
snapshot = newEntityInstance();
snapshot.setSprint(sprint);
snapshot.setDate(date);
saveEntity(snapshot);
}
return snapshot;
}
public List<SprintDaySnapshot> getSprintDaySnapshots(Sprint sprint) {
List<SprintDaySnapshot> ret = new LinkedList<SprintDaySnapshot>();
Date date = sprint.getBegin();
Date end = sprint.getEnd();
SprintDaySnapshot previousSnapshot = null;
while (date.isBeforeOrSame(end) && date.isPastOrToday()) {
SprintDaySnapshot snapshot = getSprintDaySnapshot(sprint, date, false);
if (snapshot == null) {
snapshot = new SprintDaySnapshot();
snapshot.setSprint(sprint);
snapshot.setDate(date);
if (previousSnapshot != null) {
snapshot.setRemainingWork(previousSnapshot.getRemainingWork());
snapshot.setBurnedWork(previousSnapshot.getBurnedWork());
}
}
ret.add(snapshot);
previousSnapshot = snapshot;
date = date.nextDay();
}
return ret;
}
}