package bank; import bank.exceptions.TransactionAttributeException; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import java.lang.reflect.Type; /** * The Transfer class represents a financial transfer between two parties, * including the date, amount, description, sender, and recipient. */ public class Transfer extends Transaction { /** * private variables * initialized as empty Strings to avoid null-errors */ private String sender = ""; private String recipient = ""; /** * Sets the amount by checking if condition is valid * @param newAmount The new amount for the payment. */ @Override public void setAmount(double newAmount) throws TransactionAttributeException{ if(newAmount >= 0) this.amount = newAmount; else throw new TransactionAttributeException("Amount cannot be negative"); } /** * Sets the sender of the transfer. * * @param newSender The new sender for the transfer. */ public void setSender(String newSender) { this.sender = newSender; } /** * Gets the sender of the transfer. * * @return The sender of the transfer. */ public String getSender() { return sender; } /** * Sets the recipient of the transfer. * * @param newRecipient The new recipient for the transfer. */ public void setRecipient(String newRecipient) { this.recipient = newRecipient; } /** * Gets the recipient of the transfer. * * @return The recipient of the transfer. */ public String getRecipient() { return recipient; } /** * Constructor for creating a transfer with date, amount, and description * based on abstract class * * @param newDate The date of the transfer. * @param newAmount The amount of the transfer. * @param newDescription The description of the transfer. */ public Transfer(String newDate, double newAmount, String newDescription) throws TransactionAttributeException { super(newDate, newAmount, newDescription); } @Override public double calculate() { return this.getAmount(); } /** * Constructor for creating a transfer with date, amount, description, * sender, and recipient based on abstract class * * @param newDate The date of the transfer. * @param newAmount The amount of the transfer. * @param newDescription The description of the transfer. * @param newSender The sender of the transfer. * @param newRecipient The recipient of the transfer. */ public Transfer(String newDate, double newAmount, String newDescription, String newSender, String newRecipient) throws TransactionAttributeException { super(newDate, newAmount, newDescription); this.setSender(newSender); this.setRecipient(newRecipient); } /** * Copy constructor to create a new Transfer object based on an existing one. * * @param t The Transfer object to copy from. */ public Transfer(Transfer t) throws TransactionAttributeException { this(t.getDate(), t.getAmount(), t.getDescription(), t.getSender(), t.getRecipient()); } /** * Prints the transfer details to the console. */ @Override public String toString() { return ("\n------------Transfer-----------" + super.toString()+ "\n Sender: " + this.getSender() + "\n Recipient: " + this.getRecipient() + "\n-------------------------------\n" ); } /** * Compares obj with current transaction * * @param obj The object to compare with * @return Result of the comparison */ @Override public boolean equals(Object obj) { if (obj instanceof Transfer) { Transfer t = (Transfer) obj; return( super.equals(t) && this.getSender().equals(t.getSender()) && this.getRecipient().equals(t.getRecipient()) ); } return false; } }