package gov.nysenate.openleg.model.spotcheck; import gov.nysenate.openleg.dao.base.OrderBy; import gov.nysenate.openleg.dao.base.SortOrder; import gov.nysenate.openleg.dao.spotcheck.MismatchOrderBy; import gov.nysenate.openleg.model.base.SessionYear; import java.time.LocalDateTime; import java.util.EnumSet; import java.util.Set; /** * Contains query parameters used to query for spotcheck mismatches. * Provides reasonable defaults for non required parameters. */ public class MismatchQuery { private SpotCheckDataSource dataSource; private Set<SpotCheckContentType> contentTypes; private Set<SpotCheckMismatchStatus> mismatchStatuses; private Set<SpotCheckMismatchIgnore> ignoredStatuses; private LocalDateTime toDate; private LocalDateTime fromDate; private OrderBy orderBy; public MismatchQuery(SpotCheckDataSource dataSource, Set<SpotCheckContentType> contentTypes) { this.dataSource = dataSource; this.contentTypes = contentTypes; // Default values this.mismatchStatuses = EnumSet.of(SpotCheckMismatchStatus.NEW, SpotCheckMismatchStatus.EXISTING, SpotCheckMismatchStatus.REGRESSION); this.ignoredStatuses = EnumSet.of(SpotCheckMismatchIgnore.NOT_IGNORED); this.toDate = LocalDateTime.now(); this.fromDate = SessionYear.of(this.toDate.getYear()).asDateTimeRange().lowerEndpoint(); this.orderBy = new OrderBy(MismatchOrderBy.REFERENCE_DATE.getColumnName(), SortOrder.DESC); } public MismatchQuery withMismatchStatuses(Set<SpotCheckMismatchStatus> mismatchStatuses) { this.mismatchStatuses = mismatchStatuses; return this; } public MismatchQuery withIgnoredStatuses(Set<SpotCheckMismatchIgnore> ignoredStatuses) { this.ignoredStatuses = ignoredStatuses; return this; } public MismatchQuery withToDate(LocalDateTime toDate) { this.toDate = toDate; return this; } public MismatchQuery withFromDate(LocalDateTime fromDate) { this.fromDate = fromDate; return this; } public MismatchQuery withOrderBy(OrderBy orderBy) { this.orderBy = orderBy; return this; } public SpotCheckDataSource getDataSource() { return dataSource; } public Set<SpotCheckContentType> getContentTypes() { return contentTypes; } public Set<SpotCheckMismatchStatus> getMismatchStatuses() { return mismatchStatuses; } public Set<SpotCheckMismatchIgnore> getIgnoredStatuses() { return ignoredStatuses; } public LocalDateTime getToDate() { return toDate; } public LocalDateTime getFromDate() { return fromDate; } public OrderBy getOrderBy() { return orderBy; } }