package cmpt213.assignment2.packagedeliveriestracker.model; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import static java.lang.Math.abs; /** * PackageInfo is a class that contains information about a package */ public class PackageInfo implements Comparable { private final String name; private final String note; private final double price; private final double weight; private final LocalDateTime expectedDate; private boolean delivered; private String type; public PackageInfo(String name, String note, double price, double weight, boolean delivered, LocalDateTime expectedDate) { this.name = name; this.note = note; this.price = price; this.weight = weight; this.delivered = delivered; this.expectedDate = expectedDate; } /** * This function returns the name of the person. * * @return The name of the person. */ public String getName() { return name; } public boolean getDelivered() { return delivered; } /** * This function sets the value of the delivered variable to the value of the delivered parameter. * * @param delivered This is a boolean value that indicates whether the message has been delivered * to the recipient. */ public void setDelivered(boolean delivered) { this.delivered = delivered; } public LocalDateTime getExpectedDate() { return expectedDate; } /** * This function sets the type of the object to the type passed in as a parameter * * @param type The type of the event. */ public void setType(String type) { this.type = type; } // Comparing the expected date of the package to the expected date of the package passed in as a // parameter. @Override public int compareTo(PackageInfo p) { return this.expectedDate.compareTo(p.getExpectedDate()); } // Overriding the toString method. @Override public String toString() { DateTimeFormatter format = DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm"); LocalDateTime today = LocalDateTime.now(); today.format(format); long diff = ChronoUnit.DAYS.between(today, expectedDate); String isDelivered = delivered ? "yes" : "no"; return "Name: " + name + "\n" + "Notes: " + note + "\n" + "Price: " + price + "\n" + "Weight: " + weight + "\n" + "Expected Delivery Date: " + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").format(expectedDate) + "\n" + "Delivered? " + isDelivered + "\n" + ((diff > 0 && !delivered) ? diff + " days remaining" : abs(diff) + " days overdue"); } }