Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/V0.4' into enhanced-search
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/main/java/seedu/manager/model/Model.java
#	src/main/java/seedu/manager/model/ModelManager.java
#	src/test/java/seedu/manager/logic/LogicManagerTest.java
  • Loading branch information
gary-tang committed Oct 26, 2016
2 parents 23306fc + 74e576f commit fdb54c0
Show file tree
Hide file tree
Showing 11 changed files with 283 additions and 25 deletions.
20 changes: 20 additions & 0 deletions src/main/java/seedu/manager/commons/core/CommandWord.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package seedu.manager.commons.core;

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"), ALIAS("alias");

private String commandRep;

private Commands(String commandRep) {
this.commandRep = commandRep;
}

public String toString() {
return commandRep;
}
}
}
6 changes: 3 additions & 3 deletions src/main/java/seedu/manager/commons/core/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/**
* Config values used by the app
*/
public class Config extends ComponentManager {
public class Config {

public static final String DEFAULT_CONFIG_FILE = "config.json";

Expand All @@ -26,7 +26,7 @@ public class Config extends ComponentManager {


public Config() {
super();
EventsCenter.getInstance().registerHandler(this);
}

public String getAppTitle() {
Expand Down Expand Up @@ -110,7 +110,7 @@ public void handleStorageLocationChangedEvent(StorageLocationChangedEvent event)
setTaskManagerFilePath(event.filePath);
try {
ConfigUtil.saveConfig(this, DEFAULT_CONFIG_FILE);
raise(new ConfigFilePathChangedEvent(event.filePath));
EventsCenter.getInstance().post(new ConfigFilePathChangedEvent(event.filePath));
} catch (IOException e) {
e.printStackTrace();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package seedu.manager.commons.events.storage;

import seedu.manager.commons.events.BaseEvent;
import seedu.manager.model.UserPrefs;

public class UserPrefsChangedEvent extends BaseEvent {

public UserPrefs userPrefs;

public UserPrefsChangedEvent(UserPrefs userPrefs) {
this.userPrefs = userPrefs;
}

@Override
public String toString() {
return "User Preferences have changed";
}

}
1 change: 1 addition & 0 deletions src/main/java/seedu/manager/logic/LogicManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class LogicManager extends ComponentManager implements Logic {
public LogicManager(Model model, Storage storage) {
this.model = model;
this.parser = new Parser();
this.parser.setCommandWords(model.getCommandWords());
}

@Override
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/seedu/manager/logic/commands/AliasCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package seedu.manager.logic.commands;

import seedu.manager.commons.exceptions.IllegalValueException;

public class AliasCommand extends Command {

public static final String MESSAGE_SUCCESS = "Old command %1$s changed to %2$s";
public static final String MESSAGE_WRONG_NUM_ARGS = "Alias command should have exactly 2 parameters";
public static final String MESSAGE_NO_MATCH = "I cannot recognise the command you want to alias";
public static final String MESSAGE_ALIAS_TAKEN = "This alias is already taken by the %1$s command";

private final String oldCommand;
private final String alias;

public AliasCommand(String oldCommand, String alias) {
this.oldCommand = oldCommand;
this.alias = alias;
}

@Override
public CommandResult execute() {
try {
model.setSingleCommandWord(oldCommand, alias, MESSAGE_NO_MATCH, MESSAGE_ALIAS_TAKEN);

return new CommandResult(String.format(MESSAGE_SUCCESS, oldCommand, alias));
} catch (IllegalValueException e) {
return new CommandResult(e.getMessage());
}
}
}
71 changes: 57 additions & 14 deletions src/main/java/seedu/manager/logic/parser/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import seedu.manager.commons.core.CommandWord.Commands;
import seedu.manager.commons.exceptions.IllegalValueException;
import seedu.manager.commons.util.StringUtil;
import seedu.manager.logic.commands.*;
Expand All @@ -15,7 +16,6 @@
* Parses user input.
*/
public class Parser {

/**
* Used for initial separation of command word and args.
*/
Expand All @@ -30,8 +30,14 @@ public class Parser {
Pattern.compile("(?<arguments>.+)");

private static final ExtensionParser extParser = new ExtensionParser();

private HashMap<Commands, String> commandWords = null;

public Parser() {}

public void setCommandWords(HashMap<Commands, String> commandWordsIn) {
commandWords = commandWordsIn;
}

/**
* Parses user input into command for execution.
Expand All @@ -40,52 +46,76 @@ public Parser() {}
* @return the command based on the user input
*/
public Command parseCommand(String userInput) {
assert commandWords != null;

final Matcher matcher = BASIC_COMMAND_FORMAT.matcher(userInput.trim());
if (!matcher.matches()) {
return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));
}

final String commandWord = matcher.group("commandWord").trim();
final String arguments = matcher.group("arguments").trim();
switch (commandWord) {

Commands matchedCommand;

try {
matchedCommand = getMatchedCommand(commandWord);
} catch (IllegalValueException e) {
return new IncorrectCommand(e.getMessage());
}

switch (matchedCommand) {

case AddCommand.COMMAND_WORD:
case ADD:
return prepareAdd(arguments);

case DeleteCommand.COMMAND_WORD:
case DELETE:
return prepareDelete(arguments);

case EditCommand.COMMAND_WORD:
case EDIT:
return prepareEdit(arguments);

case ClearCommand.COMMAND_WORD:
case CLEAR:
return new ClearCommand();

case FindCommand.COMMAND_WORD:
case FIND:
return prepareFind(arguments);

case DoneCommand.COMMAND_WORD:
case DONE:
return prepareDone(arguments);

case ListCommand.COMMAND_WORD:
case LIST:
return new ListCommand();

case ExitCommand.COMMAND_WORD:
case EXIT:
return new ExitCommand();

case HelpCommand.COMMAND_WORD:
case HELP:
return new HelpCommand();

case StorageCommand.COMMAND_WORD:
case STORAGE:
return new StorageCommand(arguments);

case SortCommand.COMMAND_WORD:
case SORT:
return new SortCommand();

case ALIAS:
return prepareAlias(arguments);

default:
return new IncorrectCommand(MESSAGE_UNKNOWN_COMMAND);
}
}

private Commands getMatchedCommand(String commandWord) throws IllegalValueException {
for (Commands command : Commands.values()) {
if (commandWords.get(command).equals(commandWord)) {
return command;
}
}

throw new IllegalValueException(MESSAGE_UNKNOWN_COMMAND);
}

/**
* Parses arguments in the context of the add task command.
Expand Down Expand Up @@ -198,5 +228,18 @@ private Command prepareFind(String args) {
return new IncorrectCommand(e.getMessage());
}
}


/**
* Parses arguments in the context of the alias command
* @param args full command args string
* @return the prepared command
*/
private Command prepareAlias(String args) {
String[] splitArgs = args.split(" ");
if (splitArgs.length != 2) {
return new IncorrectCommand(AliasCommand.MESSAGE_WRONG_NUM_ARGS);
}

return new AliasCommand(splitArgs[0], splitArgs[1]);
}
}
9 changes: 9 additions & 0 deletions src/main/java/seedu/manager/model/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import java.util.Set;

import seedu.manager.commons.core.UnmodifiableObservableList;
import seedu.manager.commons.core.CommandWord.Commands;
import seedu.manager.commons.exceptions.IllegalValueException;
import seedu.manager.model.task.ReadOnlyTask;
import seedu.manager.model.task.Task;
import seedu.manager.model.task.TaskProperty;
Expand All @@ -20,12 +22,19 @@ public interface Model {

/** Returns the TaskManager */
ReadOnlyTaskManager getTaskManager();

/** Returns the Command words */
HashMap<Commands, String> getCommandWords();

/** Deletes the given task. */
void deleteTask(ReadOnlyTask target) throws UniqueTaskList.TaskNotFoundException;

/** Adds the given task */
void addTask(Task task) throws UniqueTaskList.DuplicateTaskException;

/** Change alias for a certain command */
public void setSingleCommandWord(String commandToChange, String alias,
String messageNoMatch, String messageAliasAlreadyTaken) throws IllegalValueException;

/** Returns the sorted and filtered task list as an {@code UnmodifiableObservableList<ReadOnlyTask>} */
UnmodifiableObservableList<ReadOnlyTask> getSortedFilteredTaskList();
Expand Down
20 changes: 18 additions & 2 deletions src/main/java/seedu/manager/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import seedu.manager.commons.core.ComponentManager;
import seedu.manager.commons.core.LogsCenter;
import seedu.manager.commons.core.UnmodifiableObservableList;
import seedu.manager.commons.core.CommandWord.Commands;
import seedu.manager.commons.events.model.TaskManagerChangedEvent;
import seedu.manager.commons.exceptions.IllegalValueException;
import seedu.manager.commons.util.StringUtil;
import seedu.manager.model.task.ReadOnlyTask;
import seedu.manager.model.task.Task;
Expand All @@ -29,6 +31,7 @@ public class ModelManager extends ComponentManager implements Model {
private final TaskManager taskManager;
private final FilteredList<Task> filteredTasks;
private final SortedList<Task> sortedTasks;
private final UserPrefs userPrefs;

/**
* Initializes a ModelManager with the given TaskManager
Expand All @@ -44,6 +47,7 @@ public ModelManager(TaskManager src, UserPrefs userPrefs) {
taskManager = new TaskManager(src);
filteredTasks = new FilteredList<>(taskManager.getTasks());
sortedTasks = new SortedList<>(filteredTasks);
this.userPrefs = userPrefs;
}

public ModelManager() {
Expand All @@ -54,6 +58,7 @@ public ModelManager(ReadOnlyTaskManager initialData, UserPrefs userPrefs) {
taskManager = new TaskManager(initialData);
filteredTasks = new FilteredList<>(taskManager.getTasks());
sortedTasks = new SortedList<>(filteredTasks);
this.userPrefs = userPrefs;
}

@Override
Expand All @@ -66,6 +71,11 @@ public void resetData(ReadOnlyTaskManager newData) {
public ReadOnlyTaskManager getTaskManager() {
return taskManager;
}

@Override
public HashMap<Commands, String> getCommandWords() {
return userPrefs.commandWords;
}

/** Raises an event to indicate the model has changed */
private void indicateTaskManagerChanged() {
Expand All @@ -85,6 +95,13 @@ public synchronized void addTask(Task task) throws UniqueTaskList.DuplicateTaskE
indicateTaskManagerChanged();
}

@Override
public void setSingleCommandWord(String commandToChange, String alias,
String messageNoMatch, String messageAliasAlreadyTaken) throws IllegalValueException {
userPrefs.setSingleCommandWord(commandToChange, alias, messageNoMatch, messageAliasAlreadyTaken);

}

//=========== Sorted and Filtered Task List Accessors ===============================================================

@Override
Expand Down Expand Up @@ -190,7 +207,7 @@ public String toString() {
return "desc=" + String.join(", ", descKeyWords);
}
}

private class EnhancedSearchQualifier implements Qualifier {
private HashMap<TaskProperties, Optional<TaskProperty>> propertiesToMatch;

Expand All @@ -203,5 +220,4 @@ public boolean run(ReadOnlyTask task) {
return task.matches(propertiesToMatch);
}
}

}

0 comments on commit fdb54c0

Please sign in to comment.