package gov.nysenate.openleg.client.view.bill; import com.fasterxml.jackson.annotation.JsonIgnore; import gov.nysenate.openleg.client.view.base.ViewObject; import gov.nysenate.openleg.model.bill.BillAction; import gov.nysenate.openleg.model.bill.BillId; import gov.nysenate.openleg.model.entity.Chamber; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.util.Optional; @Component public class BillActionView implements ViewObject { protected BillIdView billId; protected String date; protected String chamber; protected Integer sequenceNo; protected String text; protected BillActionView() {} public BillActionView(BillAction billAction) { Optional<BillAction> billActionOpt = Optional.ofNullable(billAction); billId = billActionOpt.map(BillAction::getBillId) .map(BillIdView::new) .orElse(null); date = billActionOpt.map(BillAction::getDate) .map(LocalDate::toString) .orElse(null); chamber = billActionOpt.map(BillAction::getChamber) .map(Chamber::name) .orElse(null); sequenceNo = billActionOpt.map(BillAction::getSequenceNo) .orElse(null); text = billActionOpt.map(BillAction::getText) .orElse(null); } @JsonIgnore public BillAction toBillAction() { LocalDate date = Optional.ofNullable(this.date) .map(LocalDate::parse).orElse(null); Chamber chamber = Optional.ofNullable(this.chamber) .map(Chamber::getValue).orElse(null); BillId billId = null; try { billId = Optional.ofNullable(this.billId) .map(BillIdView::toBillId).orElse(null); } catch (IllegalArgumentException | NullPointerException ignored) {} return new BillAction( date, text, chamber, sequenceNo, billId); } public BillIdView getBillId() { return billId; } public String getDate() { return date; } public String getChamber() { return chamber; } public Integer getSequenceNo() { return sequenceNo; } public String getText() { return text; } @Override public String getViewType() { return "bill-action"; } }