package gov.nysenate.openleg.model.spotcheck.senatesite;
import com.google.common.collect.ComparisonChain;
import gov.nysenate.openleg.util.DateUtils;
import java.util.*;
import java.util.stream.IntStream;
public class SenateSiteDump implements Comparable<SenateSiteDump> {
/** Uniquely Ids this dump */
private final SenateSiteDumpId dumpId;
/** The fragments that make up this dump, categorized by their sequence number */
private TreeMap<Integer, SenateSiteDumpFragment> fragmentMap = new TreeMap<>();
public SenateSiteDump(SenateSiteDumpId dumpId) {
this.dumpId = dumpId;
}
/** --- Functional Getters / Setters --- */
public void addDumpFragment(SenateSiteDumpFragment fragment) {
fragmentMap.put(fragment.getSequenceNo(), fragment);
}
/**
* @return boolean - true iff this dump contains a complete set of fragments
*/
public boolean isComplete() {
return IntStream.rangeClosed(1, dumpId.getFragmentCount())
.allMatch(fragmentMap::containsKey);
}
/**
* @return Collection<SenateSiteBillDumpFragment> - All received fragments of this dump
*/
public Collection<SenateSiteDumpFragment> getDumpFragments() {
return fragmentMap.values();
}
/** --- Overridden Methods --- */
@Override
public int compareTo(SenateSiteDump o) {
return ComparisonChain.start()
.compare(DateUtils.startOfDateTimeRange(this.getDumpId().getRange()),
DateUtils.startOfDateTimeRange(o.getDumpId().getRange()))
.compare(DateUtils.endOfDateTimeRange(this.getDumpId().getRange()),
DateUtils.endOfDateTimeRange(o.getDumpId().getRange()))
.result();
}
/** --- Getters --- */
public SenateSiteDumpId getDumpId() {
return dumpId;
}
}