import javax.swing.text.html.HTMLDocument; import java.net.SocketOption; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.DateTimeException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.time.format.SignStyle; import java.util.*; public class TextMenu { private final String title = "title"; private final String[] options = new String []{ "List of all packages", "Add a package", "remove a package", "list overdue packages", "List upcoming packages", "mark package as delivered", "exit"}; public void display(){ int tag = title.length(); for (int i=0; i<= tag+3; i++){ System.out.print("#"); } System.out.println("\n# " + title + " #"); for (int i=0; i<= tag+3; i++){ System.out.print("#"); } DateFormat today = new SimpleDateFormat("yyy-MM-dd"); Calendar cal=Calendar.getInstance(); System.out.println("\nToday is: " + today.format(cal.getTime())); for (int i = 0; i < options.length; i++){ System.out.println((i+1) + ": " + options[i]); } } public void list(ArrayList packageList){ if (packageList.size() == 0){ System.out.println("No packages to show"); } else{ for (int i=0; i < packageList.size(); i++){ System.out.println("Package #" + (i+1)); System.out.println(packageList.get(i).toString()); } } } public void add(ArrayList packageList){ Scanner scan = new Scanner(System.in); String pName; do { System.out.println("enter a valid package name:"); pName = scan.nextLine(); } while (pName.length()==0); System.out.println("notes:"); String pNotes = scan.nextLine(); boolean checkDate = false; DateTimeFormatter format = DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm"); LocalDateTime pDate=LocalDateTime.now(); while (checkDate == false){ try { System.out.println("enter date as yyyy-mm-dd hh:mm:"); pDate = LocalDateTime.parse(scan.nextLine(), format); checkDate = true; } catch (DateTimeParseException e) { System.out.println("invalid date format"); } } double pPrice; do { System.out.println("enter price:"); pPrice = scan.nextDouble(); } while (pPrice < 0); double pWeight; do { System.out.println("enter weight:"); pWeight = scan.nextDouble(); } while (pWeight <= 0); packageList.add(new PackageInfo(pName, pNotes, pPrice, pWeight, false, pDate)); System.out.println(pName + " has been added to the list!"); } public void remove(ArrayList packageList) { this.list(packageList); if (packageList.size() == 0){ return; } Scanner scan = new Scanner(System.in); int n; do { System.out.println("enter item number you want to remove (0 to cancel):"); n = scan.nextInt(); } while (n < 0 || n > packageList.size()); if (n > 0){ System.out.println(packageList.get(n-1).getName() + " has been removed from the list."); packageList.remove(n-1); } } //due=true returns overdue packages, else upcoming packages public ArrayList sortList(ArrayList pList, boolean due){ ArrayList sortedList = new ArrayList<>(); LocalDateTime today = LocalDateTime.now(); DateTimeFormatter format = DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm"); today.format(format); for (int i = 0; i < pList.size(); i++) { PackageInfo p = pList.get(i); if (!p.getDelivered()) { if (due && today.isAfter(p.getExpectedDate())) { sortedList.add(p); } else if (!due && today.isBefore(p.getExpectedDate())){ sortedList.add(p); } } } Collections.sort(sortedList); return sortedList; } public void overDueList(ArrayList packageList){ ArrayList overdue = sortList(packageList, true); if (overdue.size() == 0){ System.out.println("no overdue packages to show"); return; } this.list(overdue); } public void upcomingList(ArrayList packageList){ ArrayList upcoming = sortList(packageList, false); if (upcoming.size() == 0){ System.out.println("no upcoming packages to show"); return; } this.list(upcoming); } public ArrayList getUndelivered(List packageList){ ArrayList undelivered = new ArrayList<>(); for (int i = 0; i < packageList.size(); i++){ if (packageList.get(i).getDelivered() == false){ undelivered.add(packageList.get(i)); } } return undelivered; } public void markDelivered(ArrayList packageList){ ArrayList undelivered=getUndelivered(packageList); if (undelivered.size() == 0){ System.out.println("No undelivered packages to show"); return; } this.list(undelivered); Scanner scan = new Scanner(System.in); int n; do { System.out.println("enter item number you want to mark delivered (0 to cancel):"); n = scan.nextInt(); } while (n < 0 || n > undelivered.size()); if (n > 0){ PackageInfo p = undelivered.get(n-1); packageList.get(packageList.indexOf(p)).setDelivered(true); System.out.println(p.getName() + " has been delivered."); } } }