import java.util.ArrayList; import java.util.Date; import java.util.List; public class ApprovalContext { private List approvalHistory = new ArrayList<>(); private ApprovalStatus currentStatus = ApprovalStatus.PENDING; private String rejectionReason; private ApprovalLevel currentRequiredLevel; public void addApprovalRecord(Approver approver, boolean approved, String comment) { ApprovalRecord record = new ApprovalRecord( approver.getApproverName(), new Date(), approved, comment ); approvalHistory.add(record); } public List getApprovalHistory() { return new ArrayList<>(approvalHistory); } public ApprovalStatus getCurrentStatus() { return currentStatus; } public void setCurrentStatus(ApprovalStatus currentStatus) { this.currentStatus = currentStatus; } public String getRejectionReason() { return rejectionReason; } public void setRejectionReason(String rejectionReason) { this.rejectionReason = rejectionReason; } public ApprovalLevel getCurrentRequiredLevel() { return currentRequiredLevel; } public void setCurrentRequiredLevel(ApprovalLevel currentRequiredLevel) { this.currentRequiredLevel = currentRequiredLevel; } public static class ApprovalRecord { private String approverName; private Date approvalTime; private boolean approved; private String comment; public ApprovalRecord(String approverName, Date approvalTime, boolean approved, String comment) { this.approverName = approverName; this.approvalTime = approvalTime; this.approved = approved; this.comment = comment; } @Override public String toString() { return "ApprovalRecord{" + "approverName='" + approverName + '\'' + ", time=" + approvalTime + ", approved=" + approved + ", comment='" + comment + '\'' + '}'; } } }