Skip to content

Commit

Permalink
Changed sort to sortby, allowing sorting by time and priority
Browse files Browse the repository at this point in the history
  • Loading branch information
varung97 committed Nov 4, 2016
1 parent f1276a6 commit a1625bf
Show file tree
Hide file tree
Showing 11 changed files with 162 additions and 159 deletions.
6 changes: 3 additions & 3 deletions src/main/java/seedu/manager/commons/core/CommandWord.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ public class CommandWord {
public enum Commands {
ADD("add"), EDIT("edit"), DELETE("delete"), UNDO("undo"),
FIND("find"), STORAGE("storage"), CLEAR("clear"), DONE("done"),
EXIT("exit"), HELP("help"), LIST("list"), SORT("sort"),
UNSORT("unsort"), ALIAS("alias"), BY("by"), AT("at"),
EVENT("from"), PRIORITY("priority"), TAG("tag"), VENUE("venue");
EXIT("exit"), HELP("help"), LIST("list"), SORTBY("sortby"),
ALIAS("alias"), BY("by"), AT("at"), EVENT("from"),
PRIORITY("priority"), TAG("tag"), VENUE("venue");

private String commandRep;

Expand Down
3 changes: 1 addition & 2 deletions src/main/java/seedu/manager/logic/commands/HelpCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,8 @@ private static void buildUsageMessageHashmap() {
usageMessages.put(Commands.FIND, FindCommand.MESSAGE_USAGE);
usageMessages.put(Commands.HELP, HelpCommand.MESSAGE_USAGE);
usageMessages.put(Commands.LIST, ListCommand.MESSAGE_USAGE);
usageMessages.put(Commands.SORT, SortCommand.MESSAGE_USAGE);
usageMessages.put(Commands.SORTBY, SortCommand.MESSAGE_USAGE);
usageMessages.put(Commands.STORAGE, StorageCommand.MESSAGE_USAGE);
usageMessages.put(Commands.UNSORT, UnSortCommand.MESSAGE_USAGE);
usageMessages.put(Commands.UNDO, UndoCommand.MESSAGE_USAGE);

usageMessages.put(Commands.AT, MESSAGE_AT_USAGE);
Expand Down
50 changes: 37 additions & 13 deletions src/main/java/seedu/manager/logic/commands/SortCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,52 @@
* Allows user to sort the displayed tasks by priority
*
*/
public class SortCommand extends Command implements UndoableCommand{
public static final String COMMAND_WORD = "sort";
public class SortCommand extends Command {
public static final String COMMAND_WORD = "sortby";

public static final String MESSAGE_USAGE = COMMAND_WORD
+ ": Sorts the displayed tasks by priority, from highest to lowest. Tasks with no priority are shown last.\n"
+ "Example: " + COMMAND_WORD;

public static final String MESSAGE_SUCCESS = "Sorted task list.";
public static final String UNDO_SUCCESS = "Unsorted task list.";
public static final String MESSAGE_SUCCESS = "Sorted task list by %1$s";
public static final String UNDO_SUCCESS = "Unsorted task list";
public static final String MESSAGE_NOT_A_COMPARATOR = "This is not a valid property to sort by";

public SortCommand() {}
public static enum SortComparators {
TIME("time"), PRIORITY("priority");

private String value;

private SortComparators(String value) {
this.value = value;
}

public String getValue() {
return value;
}
}

private SortComparators comparator;

public SortCommand(SortComparators comparator) {
this.comparator = comparator;
}

@Override
public CommandResult execute() {
model.sortSortedFilteredTaskListByPriority();
this.addUndo(this);
return new CommandResult(MESSAGE_SUCCESS);
}
switch (comparator) {
case PRIORITY:
model.sortSortedFilteredTaskListByPriority();
break;

case TIME:
model.sortSortedFilteredTaskListByTime();
break;

@Override
public CommandResult undoIt() {
model.sortSortedFilteredTaskListByTime();
return new CommandResult(UNDO_SUCCESS);
default:
return new CommandResult(MESSAGE_NOT_A_COMPARATOR);
}

return new CommandResult(String.format(MESSAGE_SUCCESS, comparator.getValue()));
}
}
32 changes: 0 additions & 32 deletions src/main/java/seedu/manager/logic/commands/UnSortCommand.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public class UndoCommand extends Command {
public static final String NO_UNDOABLE_COMMANDS = "Sorry, there are no commands to undo";

public static final String MESSAGE_USAGE = COMMAND_WORD + ": Undo your last undoable step, "
+ "e.g. add, delete, edit, done, alias and sort.\n"
+ "e.g. add, delete, edit, done and alias.\n"
+ "Example: " + COMMAND_WORD;

public static final String SHOWING_UNDO_MESSAGE = "Typed in \"undo\" to the input box.";
Expand Down
21 changes: 16 additions & 5 deletions src/main/java/seedu/manager/logic/parser/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,8 @@ public Command parseCommand(String userInput) {
case STORAGE:
return new StorageCommand(arguments);

case SORT:
return new SortCommand();

case UNSORT:
return new UnSortCommand();
case SORTBY:
return prepareSort(arguments);

case UNDO:
return new UndoCommand();
Expand Down Expand Up @@ -262,6 +259,7 @@ private Command prepareFind(String args) {
*/
private Command prepareAlias(String args) {
String[] splitArgs = args.trim().split(" ");

if (splitArgs.length != 2) {
return new IncorrectCommand(AliasCommand.MESSAGE_WRONG_NUM_ARGS);
}
Expand All @@ -276,6 +274,7 @@ private Command prepareAlias(String args) {
*/
private Command prepareHelp(String args) {
String[] splitArgs = args.trim().split(" ");

if (splitArgs.length > 1) {
return new IncorrectCommand(HelpCommand.MESSAGE_WRONG_NUM_ARGS);
} else if (splitArgs.length == 1 && !splitArgs[0].equals("")) {
Expand All @@ -284,4 +283,16 @@ private Command prepareHelp(String args) {
return new HelpCommand(Optional.empty());
}
}

private Command prepareSort(String args) {
args = args.trim();

for (SortCommand.SortComparators comparator : SortCommand.SortComparators.values()) {
if (args.equals(comparator.getValue())) {
return new SortCommand(comparator);
}
}

return new IncorrectCommand(SortCommand.MESSAGE_NOT_A_COMPARATOR);
}
}
4 changes: 2 additions & 2 deletions src/main/java/seedu/manager/model/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,10 @@ public void setSingleCommandWord(String commandToChange, String alias,
void updateFilteredTaskList(HashMap<TaskProperties, Optional<TaskProperty>> propertiesToMatch);

// @@author A0147924X
/** Sorts the sorted and filtered task list by a certain property */
/** Sorts the sorted and filtered task list by priority */
void sortSortedFilteredTaskListByPriority();

/** Unsorts the sorted and filtered task list */
/** Sorts the sorted and filtered task list by time */
void sortSortedFilteredTaskListByTime();

/**
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/seedu/manager/model/UserPrefs.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,22 @@ public void updateLastUsedGuiSetting(GuiSettings guiSettings) {
// @@author A0147924X
public UserPrefs(){
this.setGuiSettings(500, 500, 0, 0);

this.setCommandWords(
new Commands[]{
Commands.ADD, Commands.EDIT, Commands.DELETE, Commands.UNDO,
Commands.FIND, Commands.STORAGE, Commands.CLEAR, Commands.DONE,
Commands.EXIT, Commands.HELP, Commands.LIST, Commands.SORT,
Commands.UNSORT, Commands.ALIAS
Commands.EXIT, Commands.HELP, Commands.LIST, Commands.SORTBY,
Commands.ALIAS
},
new String[]{
"add", "edit", "delete", "undo",
"find", "storage", "clear", "done",
"exit", "help", "list", "sort",
"unsort", "alias"
"exit", "help", "list", "sortby",
"alias"
}
);

this.setExtensionsWords(
new Commands[]{
Commands.BY, Commands.AT, Commands.EVENT, Commands.PRIORITY,
Expand Down
65 changes: 48 additions & 17 deletions src/test/java/guitests/SortCommandTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,47 +8,78 @@

import javafx.collections.ObservableList;
import seedu.manager.logic.commands.SortCommand;
import seedu.manager.logic.commands.SortCommand.SortComparators;
import seedu.manager.model.task.ReadOnlyTask;
import seedu.manager.testutil.TestTask;

// @@author A0147924X
public class SortCommandTest extends TaskManagerGuiTest {

private Comparator<ReadOnlyTask> priorityComparator = (t1, t2) -> {
int doneCompare = t1.compareDone(t2);
if (doneCompare != 0) {
return doneCompare;
} else {
return t1.comparePriority(t2);
}
};

private Comparator<ReadOnlyTask> timeComparator = (t1, t2) -> {
int doneCompare = t1.compareDone(t2);
if (doneCompare != 0) {
return doneCompare;
} else {
return t1.compareTime(t2);
}
};

@Test
public void sortByTime() {
runSortTest(SortComparators.TIME);
}

@Test
public void sort() {
assertSortSuccess(true);
public void sortByPriority() {
runSortTest(SortComparators.PRIORITY);
}

private void runSortTest(SortComparators comparator) {
assertSortSuccess(true, comparator);

TestTask taskToAdd = td.hotel;
commandBox.runCommand(taskToAdd.getAddCommand());

assertSortSuccess(false);
assertSortSuccess(false, comparator);

commandBox.runCommand("find CS2101");
assertSortSuccess(true);
assertSortSuccess(true, comparator);
}

/**
* Asserts that the sort command worked
* @param shouldRunSortCommand Whether the sort command should be run or not
*/
private void assertSortSuccess(boolean shouldRunSortCommand) {
private void assertSortSuccess(boolean shouldRunSortCommand, SortComparators comparator) {
if (shouldRunSortCommand) {
commandBox.runCommand("sort");
commandBox.runCommand(String.format("sortby %1$s", comparator.getValue()));
}

Comparator<ReadOnlyTask> priorityComparator = (t1, t2) -> {
int doneCompare = t1.compareDone(t2);
if (doneCompare != 0) {
return doneCompare;
} else {
return t1.comparePriority(t2);
}
};

assertTrue(isSorted(priorityComparator, taskListPanel.getListView().getItems()));
switch (comparator) {
case PRIORITY:
assertTrue(isSorted(priorityComparator, taskListPanel.getListView().getItems()));
break;

case TIME:
assertTrue(isSorted(timeComparator, taskListPanel.getListView().getItems()));
break;

default:
assert false;
break;
}

if (shouldRunSortCommand) {
assertResultMessage(SortCommand.MESSAGE_SUCCESS);
assertResultMessage(String.format(SortCommand.MESSAGE_SUCCESS, comparator.getValue()));
}
}

Expand Down
72 changes: 0 additions & 72 deletions src/test/java/guitests/UnSortCommandTest.java

This file was deleted.

0 comments on commit a1625bf

Please sign in to comment.