Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cleanup ModelManager #493

Merged
merged 6 commits into from
Nov 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions src/main/java/seedu/address/model/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,26 @@ public interface Model {
*/
void updateFilteredCustomerList(Predicate<Customer> predicate);

/**
* Resets the customer list to all customers.
*/
void showAllFilteredCustomerList();

/**
* Returns the number of customers in the filtered customer list.
*
* @return the number of customers in the filtered customer list.
*/
int getFilteredCustomerListSize();

/**
* Returns true if the filtered customer list is empty.
*
* @return true if the filtered customer list is empty.
*/
boolean isFilteredCustomerListEmpty();


/**
* Returns the user prefs' delivery book file path.
*/
Expand Down Expand Up @@ -200,13 +220,40 @@ public interface Model {
*/
void setDelivery(Delivery target, Delivery editedDelivery);

/**
* Resets the delivery list to show all deliveries.
*/
void showAllFilteredDeliveryList();

/**
* Returns the number of deliveries in the filtered delivery list.
*
* @return the number of deliveries in the filtered delivery list.
*/
int getFilteredDeliveryListSize();

/**
* Returns true if the filtered delivery list is empty.
*
* @return true if the filtered delivery list is empty.
*/
boolean isFilteredDeliveryListEmpty();

/**
* Returns the number of deliveries in the sorted delivery list.
*
* @return the number of deliveries in the sorted delivery list.
*/
boolean isSortedDeliveryListEmpty();

/**
* Returns an unmodifiable view of the filtered delivery list
*/
ObservableList<Delivery> getFilteredDeliveryList();

ObservableList<Delivery> getSortedDeliveryList();

@Deprecated
Delivery getDeliveryUsingFilteredList(int id);

/**
Expand Down
129 changes: 101 additions & 28 deletions src/main/java/seedu/address/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ public class ModelManager implements Model {

private final FilteredList<Customer> filteredCustomers;
private final FilteredList<Delivery> filteredDeliveries;
private User loggedInUser;
private SortedList<Delivery> sortedDeliveries;
private User loggedInUser;

private ObservableList<ListItem> uiList;

Expand All @@ -54,13 +54,14 @@ public ModelManager(ReadOnlyBook<Customer> addressBook,
this.addressBook = new AddressBook(addressBook);
this.deliveryBook = new DeliveryBook(deliveryBook);
this.userPrefs = new UserPrefs(userPrefs);
filteredCustomers = new FilteredList<>(this.addressBook.getList());
filteredDeliveries = new FilteredList<>(this.deliveryBook.getList());
sortedDeliveries = new SortedList<>(filteredDeliveries);
this.filteredCustomers = new FilteredList<>(this.addressBook.getList());
this.filteredDeliveries = new FilteredList<>(this.deliveryBook.getList());
this.sortedDeliveries = new SortedList<>(filteredDeliveries);
this.isLoggedIn = isLoggedIn;
this.loggedInUser = userPrefs.getStoredUser();
this.setUiListCustomer();

// Set the UI list to the customer list by default
this.setUiListCustomer();
}

public ModelManager() {
Expand Down Expand Up @@ -94,33 +95,37 @@ public void setGuiSettings(GuiSettings guiSettings) {

@Override
public void setUiListDelivery() {
String orderDateFormat = "Ordered on: %s";
String deliveryDateFormat = "Deliver by: %s";
this.uiList = this.getSortedDeliveryList().stream().map(
delivery -> new ListItem(String.format("[%d] %s",
delivery.getDeliveryId(),
delivery.getName()),
String.format(orderDateFormat,
delivery.getOrderDate().toString()),
delivery.getStatus().toString(),
String.format(deliveryDateFormat, delivery.getDeliveryDate().toString())))
.collect(Collectors.toCollection(
FXCollections::observableArrayList));
this.uiList = this.getSortedDeliveryList()
.stream()
.map(this::transformDeliveryToListItem)
.collect(Collectors.toCollection(FXCollections::observableArrayList));
}

private ListItem transformDeliveryToListItem(Delivery delivery) {
return new ListItem(String.format("[%d] %s", delivery.getDeliveryId(), delivery.getName()),
String.format("Ordered on: %s", delivery.getOrderDate().toString()),
delivery.getStatus().toString(),
String.format("Deliver by: %s", delivery.getDeliveryDate().toString()));
}


@Override
public void setUiListCustomer() {
String descriptionFormat = "Email: %s\nAddress: %s";
this.uiList = this.getFilteredCustomerList().stream().map(
customer -> new ListItem(String.format("[%d] %s", customer.getCustomerId(), customer.getName()),
String.format(descriptionFormat,
customer.getEmail().toString(),
customer.getAddress().toString()),
customer.getPhone().toString()))
this.uiList = this.getFilteredCustomerList()
.stream()
.map(this::transformCustomerToListItem)
.collect(Collectors.toCollection(FXCollections::observableArrayList));
}

private ListItem transformCustomerToListItem(Customer customer) {
String descriptionFormat = "Email: %s\nAddress: %s";
return new ListItem(String.format("[%d] %s", customer.getCustomerId(), customer.getName()),
String.format(descriptionFormat,
customer.getEmail().toString(),
customer.getAddress().toString()),
customer.getPhone().toString());
}

@Override
public ObservableList<ListItem> getUiList() {
return this.uiList;
Expand All @@ -142,6 +147,7 @@ public Path getDeliveryBookFilePath() {
return userPrefs.getDeliveryBookFilePath();
}

@Deprecated
@Override
public Delivery getDeliveryUsingFilteredList(int id) {
for (Delivery d : filteredDeliveries) {
Expand Down Expand Up @@ -191,6 +197,7 @@ public Optional<Customer> getCustomer(int id) {
return this.addressBook.getById(id);
}

@Deprecated
@Override
public Customer getCustomerUsingFilteredList(int id) {
for (Customer c : filteredCustomers) {
Expand Down Expand Up @@ -265,6 +272,34 @@ public void updateFilteredCustomerList(Predicate<Customer> predicate) {
setUiListCustomer();
}

/**
* Resets the customer list to all customers.
*/
@Override
public void showAllFilteredCustomerList() {
updateFilteredCustomerList(PREDICATE_SHOW_ALL_CUSTOMERS);
}

/**
* Returns the number of customers in the filtered customer list.
*
* @return the number of customers in the filtered customer list.
*/
@Override
public int getFilteredCustomerListSize() {
return this.filteredCustomers.size();
}

/**
* Returns true if the filtered customer list is empty.
*
* @return true if the filtered customer list is empty.
*/
@Override
public boolean isFilteredCustomerListEmpty() {
return this.filteredCustomers.isEmpty();
}

//=========== User Related Methods =======================================================================

/**
Expand Down Expand Up @@ -420,6 +455,44 @@ public void setDelivery(Delivery target, Delivery editedDelivery) {
updateFilteredDeliveryList(PREDICATE_SHOW_ALL_DELIVERIES);
}

/**
* Resets the delivery list to show all deliveries.
*/
@Override
public void showAllFilteredDeliveryList() {
updateFilteredDeliveryList(PREDICATE_SHOW_ALL_DELIVERIES);
}

/**
* Returns the number of deliveries in the filtered delivery list.
*
* @return the number of deliveries in the filtered delivery list.
*/
@Override
public int getFilteredDeliveryListSize() {
return this.filteredDeliveries.size();
}

/**
* Returns true if the filtered delivery list is empty.
*
* @return true if the filtered delivery list is empty.
*/
@Override
public boolean isFilteredDeliveryListEmpty() {
return this.filteredDeliveries.isEmpty();
}

/**
* Returns the number of deliveries in the sorted delivery list.
*
* @return the number of deliveries in the sorted delivery list.
*/
@Override
public boolean isSortedDeliveryListEmpty() {
return this.sortedDeliveries.isEmpty();
}

//=========== Filtered Customer List Accessors =============================================================

/**
Expand All @@ -446,13 +519,13 @@ public ObservableList<Delivery> getSortedDeliveryList() {
@Override
public void updateFilteredDeliveryList(Predicate<Delivery> predicate) {
requireNonNull(predicate);
// only shows the delivery list if the user is logged in
if (isLoggedIn) {
filteredDeliveries.setPredicate(predicate);
} else {
if (!isLoggedIn) {
filteredDeliveries.setPredicate(PREDICATE_SHOW_NO_DELIVERIES);
return;
}

// only shows the delivery list if the user is logged in
filteredDeliveries.setPredicate(predicate);
// Update the sorted list
this.sortedDeliveries = new SortedList<>(filteredDeliveries);

Expand Down
Loading
Loading