Skip to content

Commit

Permalink
Add reviews to show command
Browse files Browse the repository at this point in the history
  • Loading branch information
dvrylc committed Nov 6, 2019
1 parent 70d72f3 commit eda3157
Show file tree
Hide file tree
Showing 17 changed files with 262 additions and 21 deletions.
4 changes: 4 additions & 0 deletions src/main/java/seedu/address/logic/Logic.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import seedu.address.model.ReadOnlyAddressBook;
import seedu.address.model.ReadOnlyFeedList;
import seedu.address.model.eatery.Eatery;
import seedu.address.model.eatery.Review;

/**
* API of the Logic component
Expand Down Expand Up @@ -41,6 +42,9 @@ public interface Logic {
/** Returns an unmodifiable view of the filtered list of todos */
ObservableList<Eatery> getFilteredTodoList();

/** Returns an unmodifiable view of the active reviews */
ObservableList<Review> getActiveReviews();

boolean isMainMode();

/**
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/seedu/address/logic/LogicManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import seedu.address.model.ReadOnlyAddressBook;
import seedu.address.model.ReadOnlyFeedList;
import seedu.address.model.eatery.Eatery;
import seedu.address.model.eatery.Review;
import seedu.address.storage.Storage;

/**
Expand Down Expand Up @@ -68,6 +69,11 @@ public ObservableList<Eatery> getFilteredTodoList() {
return model.getFilteredTodoList();
}

@Override
public ObservableList<Review> getActiveReviews() {
return model.getActiveReviews();
}

@Override
public boolean isMainMode() {
return model.isMainMode();
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/seedu/address/logic/commands/ShowCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

import static java.util.Objects.requireNonNull;

import java.util.Collections;
import java.util.List;

import seedu.address.commons.core.Messages;
import seedu.address.commons.core.index.Index;
import seedu.address.logic.commands.exceptions.CommandException;
import seedu.address.model.Model;
import seedu.address.model.eatery.Eatery;
import seedu.address.model.eatery.Review;

/**
* Shows a eatery identified using it's displayed index from the address book.
Expand Down Expand Up @@ -40,6 +42,11 @@ public CommandResult execute(Model model) throws CommandException {
}

Eatery eateryToShow = lastShownList.get(targetIndex.getZeroBased());

List<Review> reviews = eateryToShow.getReviews();
Collections.sort(reviews);
model.updateActiveReviews(reviews);

return new CommandResult(
String.format(MESSAGE_SHOW_EATERY_SUCCESS, eateryToShow.getName().fullName), eateryToShow);
}
Expand Down
23 changes: 19 additions & 4 deletions src/main/java/seedu/address/model/Model.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package seedu.address.model;

import java.nio.file.Path;
import java.util.List;
import java.util.function.Predicate;

import javafx.collections.ObservableList;
import seedu.address.commons.core.GuiSettings;
import seedu.address.model.eatery.Eatery;
import seedu.address.model.eatery.Review;
import seedu.address.model.feed.Feed;

/**
Expand Down Expand Up @@ -87,23 +89,36 @@ public interface Model {
*/
ObservableList<Eatery> getFilteredEateryList();

/** Returns an unmodifiable view of the filtered list */
/**
* Returns an unmodifiable view of the filtered list
*/
ObservableList<Eatery> getFilteredTodoList();

/**
* Updates the filter of the filtered eatery list to filter by the given {@code predicate}.
*
* @throws NullPointerException if {@code predicate} is null.
*/
void updateFilteredEateryList(Predicate<Eatery> predicate);

/**
* Switch between main mode and to-do mode.
* */
* Returns an unmodifiable view of the active reviews
*/
ObservableList<Review> getActiveReviews();

/**
* Updates the list of active reviews based on the given {@code reviews}.
*/
void updateActiveReviews(List<Review> reviews);

/**
* Switch between main mode and to-do mode.
*/
void toggle();

/**
* Return status of mode, Main or To-do.
* */
*/
boolean isMainMode();

/*
Expand Down
25 changes: 24 additions & 1 deletion src/main/java/seedu/address/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@
import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;

import java.nio.file.Path;
import java.util.List;
import java.util.function.Predicate;
import java.util.logging.Logger;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import seedu.address.commons.core.GuiSettings;
import seedu.address.commons.core.LogsCenter;
import seedu.address.model.eatery.Eatery;
import seedu.address.model.eatery.Review;
import seedu.address.model.feed.Feed;

/**
Expand All @@ -26,7 +29,7 @@ public class ModelManager implements Model {

private FilteredList<Eatery> filteredTodo;
private FilteredList<Eatery> filteredEateries;

private ObservableList<Review> activeReviews;

/**
* Initializes a ModelManager with the given addressBook, feedList and userPrefs.
Expand All @@ -44,6 +47,7 @@ public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyFeedList feedList,

filteredEateries = new FilteredList<>(this.addressBook.getEateryList());
filteredTodo = new FilteredList<>(this.addressBook.getTodoList());
activeReviews = FXCollections.observableArrayList();
}

public ModelManager() {
Expand Down Expand Up @@ -157,6 +161,25 @@ public void updateFilteredEateryList(Predicate<Eatery> predicate) {
}
}

//=========== Active Review Accessors =============================================================

/**
* Returns an unmodifiable view of the active reviews
*/
@Override
public ObservableList<Review> getActiveReviews() {
return activeReviews;
}

/**
* Updates the list of active reviews based on the given {@code reviews}.
*/
@Override
public void updateActiveReviews(List<Review> reviews) {
activeReviews.clear();
activeReviews.addAll(reviews);
}

//=========== General =============================================================

@Override
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/seedu/address/model/eatery/Eatery.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;

Expand All @@ -19,7 +21,7 @@ public class Eatery {
// Data fields
private final Address address;
private final Category category;
private Set<Review> reviews = new HashSet<>();
private final List<Review> reviews = new ArrayList<>();
private Set<Tag> tags = new HashSet<>();

/**
Expand Down Expand Up @@ -82,15 +84,13 @@ public void addReview(Review review) {
reviews.add(review);
}

public Set<Review> getReviews() {
public List<Review> getReviews() {
return reviews;
}

public void setReviews(Set<Review> reviews) {
public void setReviews(List<Review> reviews) {
this.reviews.clear();
for (Review r : reviews) {
this.addReview(r);
}
this.reviews.addAll(reviews);
}

/**
Expand Down
10 changes: 7 additions & 3 deletions src/main/java/seedu/address/model/eatery/Review.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/**
* Represents an Eatery's review in the EatMe application.
*/
public class Review {
public class Review implements Comparable<Review> {

public static final String REVIEW_CONSTRAINTS = "Review description should not be empty,"
+ " Cost cannot be negative and cannot exceed 10000 and"
Expand All @@ -36,8 +36,8 @@ public class Review {
* Constructs a {@code Review}
*
* @param description A valid description.
* @param cost Cost of the meal being reviewed.
* @param rating Rating out of 5 for the meal being reviewed.
* @param cost Cost of the meal being reviewed.
* @param rating Rating out of 5 for the meal being reviewed.
*/
public Review(String description, double cost, int rating, Date date) {
requireAllNonNull(description, cost, rating, date);
Expand Down Expand Up @@ -128,4 +128,8 @@ public int hashCode() {
return Objects.hash(description, cost, rating, date);
}

@Override
public int compareTo(Review other) {
return other.date.compareTo(this.date);
}
}
6 changes: 3 additions & 3 deletions src/main/java/seedu/address/storage/JsonAdaptedEatery.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ public JsonAdaptedEatery(@JsonProperty("name") String name,
@JsonProperty("isOpen") String isOpen,
@JsonProperty("address") String address,
@JsonProperty("category") String category,
@JsonProperty("reviews") List<JsonAdaptedReview> reviews,
@JsonProperty("tagged") List<JsonAdaptedTag> tagged) {
@JsonProperty("reviews") List<JsonAdaptedReview> reviews,
@JsonProperty("tagged") List<JsonAdaptedTag> tagged) {
this.name = name;
this.isOpen = isOpen;
this.address = address;
Expand Down Expand Up @@ -120,7 +120,7 @@ public Eatery toModelType() throws IllegalValueException {
}
final Category modelCategory = new Category(category);

final Set<Review> modelReviews = new HashSet<>(eateryReviews);
final List<Review> modelReviews = new ArrayList<>(eateryReviews);
final Set<Tag> modelTags = new HashSet<>(eateryTags);
Eatery eatery = new Eatery(modelName, modelIsOpen, modelAddress, modelCategory, modelTags);
eatery.setReviews(modelReviews);
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/seedu/address/ui/MainWindow.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public class MainWindow extends UiPart<Stage> {
private HelpWindow helpWindow;

private CommandBox commandBox;
private ReviewListPanel reviewListPanel;

@FXML
private VBox commandBoxPlaceholder;
Expand Down Expand Up @@ -83,7 +84,9 @@ void fillInnerParts() {
feedPostListPanel = new FeedPostListPanel(logic.getFeedList(), logic);
feedPostListPanelPlaceholder.getChildren().add(feedPostListPanel.getRoot());

resultDisplay = new ResultDisplay();
reviewListPanel = new ReviewListPanel(logic.getActiveReviews());

resultDisplay = new ResultDisplay(reviewListPanel);
resultDisplayPlaceholder.getChildren().add(resultDisplay.getRoot());

StatusBarFooter statusBarFooter = new StatusBarFooter(logic.getAddressBookFilePath());
Expand Down
16 changes: 15 additions & 1 deletion src/main/java/seedu/address/ui/ResultDisplay.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import javafx.scene.control.Label;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebView;
import seedu.address.logic.commands.CommandResult;
import seedu.address.model.eatery.Eatery;
Expand All @@ -29,6 +30,8 @@ public class ResultDisplay extends UiPart<Region> {
+ "style=\"border:0\" src=\"https://www.google.com/maps/embed/v1/search?q=%s&key=%s\" "
+ "allowfullscreen></iframe>";

private final ReviewListPanel reviewListPanel;

@FXML
private Label commandFeedback;

Expand All @@ -42,10 +45,15 @@ public class ResultDisplay extends UiPart<Region> {
private FlowPane eateryTags;
@FXML
private WebView eateryMap;
@FXML
private Label reviewHeader;
@FXML
private StackPane reviewListPanelPlaceholder;

public ResultDisplay() {
public ResultDisplay(ReviewListPanel reviewListPanel) {
super(FXML);
eateryMap.getEngine().loadContent(String.format(WEBVIEW_WRAPPER, ""));
this.reviewListPanel = reviewListPanel;
}

public void setFeedbackToUser(CommandResult commandResult) {
Expand Down Expand Up @@ -73,6 +81,10 @@ public void setFeedbackToUser(CommandResult commandResult) {
URLEncoder.encode(eateryToShow.getAddress().value, StandardCharsets.UTF_8),
new String(Base64.getDecoder().decode(K)));
eateryMap.getEngine().loadContent(String.format(WEBVIEW_WRAPPER, doc));

// Reviews
reviewHeader.setText("Reviews");
reviewListPanelPlaceholder.getChildren().add(reviewListPanel.getRoot());
}
}

Expand All @@ -92,6 +104,8 @@ private void reset() {
eateryAddress.setText("");
eateryTags.getChildren().clear();
eateryMap.getEngine().loadContent(String.format(WEBVIEW_WRAPPER, ""));
reviewHeader.setText("");
reviewListPanelPlaceholder.getChildren().clear();
}

}

0 comments on commit eda3157

Please sign in to comment.