package gov.nysenate.openleg.client.view.bill; import com.google.common.collect.Iterables; import gov.nysenate.openleg.client.view.base.ListView; import gov.nysenate.openleg.client.view.base.MapView; import gov.nysenate.openleg.client.view.base.ViewObject; import gov.nysenate.openleg.model.bill.BillInfo; import gov.nysenate.openleg.model.bill.BillStatusType; import java.util.function.Function; import java.util.stream.Collectors; import static java.util.stream.Collectors.toList; /** * Just the essentials for displaying a Bill in a search result for example. */ public class BillInfoView extends SimpleBillInfoView implements ViewObject { protected String summary; protected boolean signed; protected boolean adopted; protected boolean vetoed; protected BillStatusView status; protected ListView<BillStatusView> milestones; protected ListView<BillActionView> actions; protected MapView<String, PublishStatusView> publishStatusMap; protected ProgramInfoView programInfo; public BillInfoView(BillInfo billInfo) { super(billInfo); if (billInfo != null) { summary = billInfo.getSummary(); if (!billInfo.getMilestones().isEmpty()) { BillStatusType lastStatus = Iterables.getLast(billInfo.getMilestones()).getStatusType(); if (!billType.isResolution()) { if (lastStatus.equals(BillStatusType.SIGNED_BY_GOV)) { signed = true; } else if (lastStatus.equals(BillStatusType.VETOED)) { vetoed = true; } } else if (lastStatus.equals(BillStatusType.ADOPTED)) { adopted = true; } } billType = new BillTypeView(billInfo.getBillId().getBillType()); programInfo = billInfo.getProgramInfo() != null ? new ProgramInfoView(billInfo.getProgramInfo()) : null; status = new BillStatusView(billInfo.getStatus()); milestones = ListView.of(billInfo.getMilestones().stream().map(BillStatusView::new).collect(toList())); actions = ListView.of(billInfo.getActions().stream().map(BillActionView::new).collect(toList())); publishStatusMap = billInfo.getAmendPublishStatusMap().entrySet().stream() .map((pubStatEntry) -> new PublishStatusView(pubStatEntry.getKey().getValue(), pubStatEntry.getValue())) .collect(Collectors.collectingAndThen( Collectors.toMap(PublishStatusView::getVersion, Function.identity()), MapView::of)); } } protected BillInfoView(){ super(); } public String getSummary() { return summary; } public boolean isSigned() { return signed; } public boolean isAdopted() { return adopted; } public boolean isVetoed() { return vetoed; } public BillStatusView getStatus() { return status; } public ListView<BillStatusView> getMilestones() { return milestones; } public ListView<BillActionView> getActions() { return actions; } public ProgramInfoView getProgramInfo() { return programInfo; } public MapView<String, PublishStatusView> getPublishStatusMap() { return publishStatusMap; } @Override public String getViewType() { return "bill-info"; } }