Untitled
unknown
java
2 years ago
5.7 kB
10
Indexable
package assignments.assignment3.systemCLI;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Scanner;
import assignments.assignment3.Menu;
import assignments.assignment3.Order;
import assignments.assignment3.Restaurant;
import assignments.assignment3.User;
public abstract class UserSystemCLI {
protected Scanner input;
protected ArrayList<Restaurant> restoList;
protected ArrayList<User> userList;
protected User userLoggedIn;
public void run() {
boolean isLoggedIn = true;
while (isLoggedIn) {
displayMenu();
int command = input.nextInt();
input.nextLine();
isLoggedIn = handleMenu(command);
}
}
abstract void displayMenu();
abstract boolean handleMenu(int command);
protected boolean checkIsDigit(String digits) {
return digits.chars().allMatch(Character::isDigit);
}
protected String getValidRestaurantName() {
String name = "";
boolean isRestaurantNameValid = false;
while (!isRestaurantNameValid) {
System.out.print("Nama: ");
String inputName = input.nextLine().trim();
boolean isRestaurantExist = restoList.stream()
.anyMatch(restoran -> restoran.getNama().equalsIgnoreCase(inputName));
boolean isRestaurantNameLengthValid = inputName.length() >= 4;
if (isRestaurantExist) {
System.out.printf("Restoran dengan nama %s sudah pernah terdaftar. Mohon masukkan nama yang berbeda!%n",
inputName);
System.out.println();
} else if (!isRestaurantNameLengthValid) {
System.out.println("Nama Restoran tidak valid! Minimal 4 karakter diperlukan.");
System.out.println();
} else {
name = inputName;
isRestaurantNameValid = true;
}
}
return name;
}
protected Restaurant getRestaurantByName(String name) {
Optional<Restaurant> restaurantMatched = restoList.stream()
.filter(restoran -> restoran.getNama().equalsIgnoreCase(name)).findFirst();
if (restaurantMatched.isPresent()) {
return restaurantMatched.get();
}
return null;
}
protected boolean validateRequestPesanan(Restaurant restaurant, List<String> listMenuPesananRequest) {
return listMenuPesananRequest.stream().allMatch(
pesanan -> restaurant.getMenu().stream().anyMatch(menu -> menu.getNamaMakanan().equals(pesanan)));
}
protected Menu[] getMenuRequest(Restaurant restaurant, List<String> listMenuPesananRequest) {
Menu[] menu = new Menu[listMenuPesananRequest.size()];
for (int i = 0; i < menu.length; i++) {
for (Menu existMenu : restaurant.getMenu()) {
if (existMenu.getNamaMakanan().equals(listMenuPesananRequest.get(i))) {
menu[i] = existMenu;
}
}
}
return menu;
}
protected Order getOrderOrNull(String orderId) {
for (User user : userList) {
for (Order order : user.getOrderHistory()) {
if (order.getOrderId().equals(orderId)) {
return order;
}
}
}
return null;
}
protected String outputBillPesanan(Order order) {
DecimalFormat decimalFormat = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator('.');
decimalFormat.setDecimalFormatSymbols(symbols);
return String.format("Bill:%n" +
"Order ID: %s%n" +
"Tanggal Pemesanan: %s%n" +
"Lokasi Pengiriman: %s%n" +
"Status Pengiriman: %s%n" +
"Pesanan:%n%s%n" +
"Biaya Ongkos Kirim: Rp %s%n" +
"Total Biaya: Rp %s%n",
order.getOrderId(),
order.getTanggal(),
userLoggedIn.getLokasi(),
!order.getOrderFinished() ? "Not Finished" : "Finished",
getMenuPesananOutput(order),
decimalFormat.format(order.getOngkir()),
decimalFormat.format(order.getTotalHarga()));
}
protected String getMenuPesananOutput(Order order) {
StringBuilder pesananBuilder = new StringBuilder();
DecimalFormat decimalFormat = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator('\u0000');
decimalFormat.setDecimalFormatSymbols(symbols);
for (Menu menu : order.getSortedMenu()) {
pesananBuilder.append("- ").append(menu.getNamaMakanan()).append(" ")
.append(decimalFormat.format(menu.getHarga())).append("\n");
}
if (pesananBuilder.length() > 0) {
pesananBuilder.deleteCharAt(pesananBuilder.length() - 1);
}
return pesananBuilder.toString();
}
// Getter
public User getUserLoggedIn() {
return userLoggedIn;
}
// Setter
public void setRestoList(List<Restaurant> restoList) {
this.restoList = (ArrayList<Restaurant>) restoList;
}
public void setUserList(List<User> userList) {
this.userList = (ArrayList<User>) userList;
}
public void setUserLoggedIn(User userLoggedIn) {
this.userLoggedIn = userLoggedIn;
}
public void setInput(Scanner input) {
this.input = input;
}
}Editor is loading...
Leave a Comment