Skip to content

Commit

Permalink
Merge pull request #493 from AY2324S1-CS2103T-T13-3/490-modelmanager-…
Browse files Browse the repository at this point in the history
…improve-code-quality

Cleanup ModelManager
  • Loading branch information
jianyangg committed Nov 11, 2023
2 parents 7e890f9 + 9b3fe30 commit 6193d42
Show file tree
Hide file tree
Showing 5 changed files with 373 additions and 47 deletions.
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

0 comments on commit 6193d42

Please sign in to comment.