From 60cd7efd1de6ef7e39990365915dcb93d31a00f0 Mon Sep 17 00:00:00 2001 From: Connor Lim Date: Tue, 25 Oct 2022 16:54:59 +0800 Subject: [PATCH] Improve Task command keywords Task command keyword were previously a randomly chosen with no clear format. This commit changes Task commands to have the following format: task [subcommand_word] [arguments]. This will make task commands make more sense and easier to add new ones in the future. --- .../logic/commands/tasks/AddTaskCommand.java | 15 +++-- ...askCommand.java => DeleteTaskCommand.java} | 20 +++---- ...{MarkCommand.java => MarkTaskCommand.java} | 15 +++-- .../logic/commands/tasks/TaskCommand.java | 21 +++++++ ...arkCommand.java => UnmarkTaskCommand.java} | 17 +++--- .../logic/parser/AddressBookParser.java | 19 ++----- .../logic/parser/MarkCommandParser.java | 26 --------- .../logic/parser/RmTaskCommandParser.java | 27 --------- .../logic/parser/UnmarkCommandParser.java | 26 --------- .../{ => tasks}/AddTaskCommandParser.java | 6 +- .../parser/tasks/DeleteTaskCommandParser.java | 29 ++++++++++ .../parser/tasks/MarkTaskCommandParser.java | 28 +++++++++ .../logic/parser/tasks/TaskCommandParser.java | 57 +++++++++++++++++++ .../parser/tasks/UnmarkTaskCommandParser.java | 28 +++++++++ 14 files changed, 204 insertions(+), 130 deletions(-) rename src/main/java/seedu/address/logic/commands/tasks/{RmTaskCommand.java => DeleteTaskCommand.java} (68%) rename src/main/java/seedu/address/logic/commands/tasks/{MarkCommand.java => MarkTaskCommand.java} (77%) create mode 100644 src/main/java/seedu/address/logic/commands/tasks/TaskCommand.java rename src/main/java/seedu/address/logic/commands/tasks/{UnmarkCommand.java => UnmarkTaskCommand.java} (75%) delete mode 100644 src/main/java/seedu/address/logic/parser/MarkCommandParser.java delete mode 100644 src/main/java/seedu/address/logic/parser/RmTaskCommandParser.java delete mode 100644 src/main/java/seedu/address/logic/parser/UnmarkCommandParser.java rename src/main/java/seedu/address/logic/parser/{ => tasks}/AddTaskCommandParser.java (86%) create mode 100644 src/main/java/seedu/address/logic/parser/tasks/DeleteTaskCommandParser.java create mode 100644 src/main/java/seedu/address/logic/parser/tasks/MarkTaskCommandParser.java create mode 100644 src/main/java/seedu/address/logic/parser/tasks/TaskCommandParser.java create mode 100644 src/main/java/seedu/address/logic/parser/tasks/UnmarkTaskCommandParser.java diff --git a/src/main/java/seedu/address/logic/commands/tasks/AddTaskCommand.java b/src/main/java/seedu/address/logic/commands/tasks/AddTaskCommand.java index a5e7b9b6dd5..45b147ea2fb 100644 --- a/src/main/java/seedu/address/logic/commands/tasks/AddTaskCommand.java +++ b/src/main/java/seedu/address/logic/commands/tasks/AddTaskCommand.java @@ -4,23 +4,22 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_DESCRIPTION; import static seedu.address.logic.parser.CliSyntax.PREFIX_TITLE; -import seedu.address.logic.commands.Command; import seedu.address.logic.commands.CommandResult; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.Model; import seedu.address.model.task.Task; //@@author connlim + /** * Create a task and assign it to a group */ -public class AddTaskCommand extends Command { - public static final String COMMAND_WORD = "task"; +public class AddTaskCommand extends TaskCommand { + public static final String SUBCOMMAND_WORD = "add"; - public static final String MESSAGE_USAGE = COMMAND_WORD + ": Adds a task to the address book current team. " - + "Parameters: " - + PREFIX_TITLE + "NAME " - + PREFIX_DESCRIPTION + "Description"; + public static final String MESSAGE_USAGE = + TaskCommand.getFullCommand(SUBCOMMAND_WORD) + ": Adds a task to the address book current team. " + + "Parameters: " + PREFIX_TITLE + "NAME " + PREFIX_DESCRIPTION + "Description"; public static final String MESSAGE_SUCCESS = "New task have been added: %1$s"; public static final String MESSAGE_DUPLICATE_TASK = "This task already exists!"; @@ -55,6 +54,6 @@ public CommandResult execute(Model model) throws CommandException { public boolean equals(Object other) { return other == this // short circuit if same object || (other instanceof AddTaskCommand // instanceof handles nulls - && toAdd.equals(((AddTaskCommand) other).toAdd)); + && toAdd.equals(((AddTaskCommand) other).toAdd)); } } diff --git a/src/main/java/seedu/address/logic/commands/tasks/RmTaskCommand.java b/src/main/java/seedu/address/logic/commands/tasks/DeleteTaskCommand.java similarity index 68% rename from src/main/java/seedu/address/logic/commands/tasks/RmTaskCommand.java rename to src/main/java/seedu/address/logic/commands/tasks/DeleteTaskCommand.java index dfdfb5a94f4..b185146fb63 100644 --- a/src/main/java/seedu/address/logic/commands/tasks/RmTaskCommand.java +++ b/src/main/java/seedu/address/logic/commands/tasks/DeleteTaskCommand.java @@ -6,29 +6,29 @@ import seedu.address.commons.core.Messages; import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.Command; import seedu.address.logic.commands.CommandResult; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.Model; import seedu.address.model.task.Task; -//@@author mohamedsaf1 /** - * Removes a task from Contactmation + * Deletes a task from Contactmation. + * + * @author connlim + * @author mohamedsaf1 */ -public class RmTaskCommand extends Command { - public static final String COMMAND_WORD = "rmTask"; +public class DeleteTaskCommand extends TaskCommand { + public static final String SUBCOMMAND_WORD = "delete"; - public static final String MESSAGE_USAGE = COMMAND_WORD - + ": Delete the selected task\n" - + "Parameters: INDEX (must be a positive integer)\n" - + "Example: " + COMMAND_WORD + " 1\n"; + public static final String MESSAGE_USAGE = + TaskCommand.getFullCommand(SUBCOMMAND_WORD) + ": Delete the selected task\n" + + "Parameters: INDEX (must be a positive integer)\n" + "Example: " + COMMAND_WORD + " 1\n"; public static final String DELETE_SUCCESS = " task %s is deleted%n"; private final Index targetIndex; - public RmTaskCommand(Index targetIndex) { + public DeleteTaskCommand(Index targetIndex) { this.targetIndex = targetIndex; } diff --git a/src/main/java/seedu/address/logic/commands/tasks/MarkCommand.java b/src/main/java/seedu/address/logic/commands/tasks/MarkTaskCommand.java similarity index 77% rename from src/main/java/seedu/address/logic/commands/tasks/MarkCommand.java rename to src/main/java/seedu/address/logic/commands/tasks/MarkTaskCommand.java index 60cac2295a1..852796203d7 100644 --- a/src/main/java/seedu/address/logic/commands/tasks/MarkCommand.java +++ b/src/main/java/seedu/address/logic/commands/tasks/MarkTaskCommand.java @@ -6,30 +6,29 @@ import seedu.address.commons.core.Messages; import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.Command; import seedu.address.logic.commands.CommandResult; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.Model; import seedu.address.model.task.Task; //@@author connlim + /** * Marks a task as complete */ -public class MarkCommand extends Command { - public static final String COMMAND_WORD = "mark"; +public class MarkTaskCommand extends TaskCommand { + public static final String SUBCOMMAND_WORD = "mark"; - public static final String MESSAGE_USAGE = COMMAND_WORD - + ": Marks the task as completed\n" - + "Parameters: INDEX (must be a positive integer)\n" - + "Example: " + COMMAND_WORD + " 1\n"; + public static final String MESSAGE_USAGE = + TaskCommand.getFullCommand(SUBCOMMAND_WORD) + ": Marks the task as completed\n" + + "Parameters: INDEX (must be a positive integer)\n" + "Example: " + COMMAND_WORD + " 1\n"; public static final String COMPLETE_SUCESS = " task %s is marked as complete%n"; public static final String ALREADY_MARKED = " task %s is already completed%n"; private final Index targetIndex; - public MarkCommand(Index targetIndex) { + public MarkTaskCommand(Index targetIndex) { this.targetIndex = targetIndex; } diff --git a/src/main/java/seedu/address/logic/commands/tasks/TaskCommand.java b/src/main/java/seedu/address/logic/commands/tasks/TaskCommand.java new file mode 100644 index 00000000000..64114588f81 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/tasks/TaskCommand.java @@ -0,0 +1,21 @@ +package seedu.address.logic.commands.tasks; + +import seedu.address.logic.commands.Command; + +/** + * Commands for Tasks + */ +public abstract class TaskCommand extends Command { + + public static final String COMMAND_WORD = "task"; + + /** + * Returns the complete command phrase for the task command with given subCommand + * + * @param subcommand The subcommand to be added + * @return The complete command phrase + */ + static String getFullCommand(String subcommand) { + return "task " + subcommand; + } +} diff --git a/src/main/java/seedu/address/logic/commands/tasks/UnmarkCommand.java b/src/main/java/seedu/address/logic/commands/tasks/UnmarkTaskCommand.java similarity index 75% rename from src/main/java/seedu/address/logic/commands/tasks/UnmarkCommand.java rename to src/main/java/seedu/address/logic/commands/tasks/UnmarkTaskCommand.java index 6634a773e11..e7154c2c026 100644 --- a/src/main/java/seedu/address/logic/commands/tasks/UnmarkCommand.java +++ b/src/main/java/seedu/address/logic/commands/tasks/UnmarkTaskCommand.java @@ -6,30 +6,29 @@ import seedu.address.commons.core.Messages; import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.Command; import seedu.address.logic.commands.CommandResult; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.Model; import seedu.address.model.task.Task; //@@author connlim + /** * Unmarks a task as complete. */ -public class UnmarkCommand extends Command { - public static final String COMMAND_WORD = "unmark"; +public class UnmarkTaskCommand extends TaskCommand { + public static final String SUBCOMMAND_WORD = "unmark"; - public static final String MESSAGE_USAGE = COMMAND_WORD - + ": Marks the task as incompleted\n" - + "Parameters: INDEX (must be a positive integer)\n" - + "Example: " + COMMAND_WORD + " 1\n"; + public static final String MESSAGE_USAGE = + TaskCommand.getFullCommand(SUBCOMMAND_WORD) + ": Marks the task as incomplete\n" + + "Parameters: INDEX (must be a positive integer)\n" + "Example: " + COMMAND_WORD + " 1\n"; - public static final String ALREADY_UNMARKED = " task %s is already incompleted%n"; + public static final String ALREADY_UNMARKED = " task %s is already incomplete%n"; public static final String UNMARK_SUCCESS = " task %s is marked as incomplete%n"; private final Index targetIndex; - public UnmarkCommand(Index targetIndex) { + public UnmarkTaskCommand(Index targetIndex) { this.targetIndex = targetIndex; } diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index 8ba4bc6c33f..18a1c0fe5d0 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -17,16 +17,14 @@ import seedu.address.logic.commands.HelpCommand; import seedu.address.logic.commands.ListCommand; import seedu.address.logic.commands.RemoveFieldCommand; -import seedu.address.logic.commands.tasks.AddTaskCommand; -import seedu.address.logic.commands.tasks.MarkCommand; -import seedu.address.logic.commands.tasks.RmTaskCommand; -import seedu.address.logic.commands.tasks.UnmarkCommand; +import seedu.address.logic.commands.tasks.TaskCommand; import seedu.address.logic.commands.teams.AddTeamCommand; import seedu.address.logic.commands.teams.AddUserToTeamCommand; import seedu.address.logic.commands.teams.ChangeTeamCommand; import seedu.address.logic.commands.teams.DeleteTeamCommand; import seedu.address.logic.commands.teams.RemoveUserFromTeamCommand; import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.logic.parser.tasks.TaskCommandParser; /** * Parses user input. @@ -90,17 +88,8 @@ public Command parseCommand(String userInput) throws ParseException { case ChangeTeamCommand.COMMAND_WORD: return new ChangeTeamCommandParser().parse(arguments); - case MarkCommand.COMMAND_WORD: - return new MarkCommandParser().parse(arguments); - - case UnmarkCommand.COMMAND_WORD: - return new UnmarkCommandParser().parse(arguments); - - case AddTaskCommand.COMMAND_WORD: - return new AddTaskCommandParser().parse(arguments); - - case RmTaskCommand.COMMAND_WORD: - return new RmTaskCommandParser().parse(arguments); + case TaskCommand.COMMAND_WORD: + return new TaskCommandParser().parse(arguments); case DeleteTeamCommand.COMMAND_WORD: return new DeleteTeamCommandParser().parse(arguments); diff --git a/src/main/java/seedu/address/logic/parser/MarkCommandParser.java b/src/main/java/seedu/address/logic/parser/MarkCommandParser.java deleted file mode 100644 index 5bd89de4b21..00000000000 --- a/src/main/java/seedu/address/logic/parser/MarkCommandParser.java +++ /dev/null @@ -1,26 +0,0 @@ -package seedu.address.logic.parser; - -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; - -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.tasks.MarkCommand; -import seedu.address.logic.parser.exceptions.ParseException; - -//@@author connlim -/** - * Parses input arguments and creates a new MarkCommand object - */ -public class MarkCommandParser implements Parser { - - @Override - public MarkCommand parse(String args) throws ParseException { - try { - Index index = ParserUtil.parseIndex(args); - return new MarkCommand(index); - } catch (ParseException pe) { - throw new ParseException( - String.format(MESSAGE_INVALID_COMMAND_FORMAT, MarkCommand.MESSAGE_USAGE), pe); - } - } - -} diff --git a/src/main/java/seedu/address/logic/parser/RmTaskCommandParser.java b/src/main/java/seedu/address/logic/parser/RmTaskCommandParser.java deleted file mode 100644 index 4a77e9b6199..00000000000 --- a/src/main/java/seedu/address/logic/parser/RmTaskCommandParser.java +++ /dev/null @@ -1,27 +0,0 @@ -package seedu.address.logic.parser; - -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; - -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.tasks.RmTaskCommand; -import seedu.address.logic.commands.tasks.UnmarkCommand; -import seedu.address.logic.parser.exceptions.ParseException; - -//@@author mohamedsaf1 -/** - * Parses input arguments and creates a new RmTaskCommand object - */ -public class RmTaskCommandParser implements Parser { - - @Override - public RmTaskCommand parse(String args) throws ParseException { - try { - Index index = ParserUtil.parseIndex(args); - return new RmTaskCommand(index); - } catch (ParseException pe) { - throw new ParseException( - String.format(MESSAGE_INVALID_COMMAND_FORMAT, UnmarkCommand.MESSAGE_USAGE), pe); - } - } - -} diff --git a/src/main/java/seedu/address/logic/parser/UnmarkCommandParser.java b/src/main/java/seedu/address/logic/parser/UnmarkCommandParser.java deleted file mode 100644 index 69c873b4260..00000000000 --- a/src/main/java/seedu/address/logic/parser/UnmarkCommandParser.java +++ /dev/null @@ -1,26 +0,0 @@ -package seedu.address.logic.parser; - -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; - -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.tasks.UnmarkCommand; -import seedu.address.logic.parser.exceptions.ParseException; - -//@@author connlim -/** - * Parses input arguments and creates a new UnmarkCommand object - */ -public class UnmarkCommandParser implements Parser { - - @Override - public UnmarkCommand parse(String args) throws ParseException { - try { - Index index = ParserUtil.parseIndex(args); - return new UnmarkCommand(index); - } catch (ParseException pe) { - throw new ParseException( - String.format(MESSAGE_INVALID_COMMAND_FORMAT, UnmarkCommand.MESSAGE_USAGE), pe); - } - } - -} diff --git a/src/main/java/seedu/address/logic/parser/AddTaskCommandParser.java b/src/main/java/seedu/address/logic/parser/tasks/AddTaskCommandParser.java similarity index 86% rename from src/main/java/seedu/address/logic/parser/AddTaskCommandParser.java rename to src/main/java/seedu/address/logic/parser/tasks/AddTaskCommandParser.java index f9df0e54142..778325d3992 100644 --- a/src/main/java/seedu/address/logic/parser/AddTaskCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/tasks/AddTaskCommandParser.java @@ -1,4 +1,4 @@ -package seedu.address.logic.parser; +package seedu.address.logic.parser.tasks; import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.logic.parser.CliSyntax.PREFIX_DESCRIPTION; @@ -7,6 +7,10 @@ import java.util.stream.Stream; import seedu.address.logic.commands.tasks.AddTaskCommand; +import seedu.address.logic.parser.ArgumentMultimap; +import seedu.address.logic.parser.ArgumentTokenizer; +import seedu.address.logic.parser.Parser; +import seedu.address.logic.parser.Prefix; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.task.Task; diff --git a/src/main/java/seedu/address/logic/parser/tasks/DeleteTaskCommandParser.java b/src/main/java/seedu/address/logic/parser/tasks/DeleteTaskCommandParser.java new file mode 100644 index 00000000000..044d4a71297 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/tasks/DeleteTaskCommandParser.java @@ -0,0 +1,29 @@ +package seedu.address.logic.parser.tasks; + +import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; + +import seedu.address.commons.core.index.Index; +import seedu.address.logic.commands.tasks.DeleteTaskCommand; +import seedu.address.logic.parser.Parser; +import seedu.address.logic.parser.ParserUtil; +import seedu.address.logic.parser.exceptions.ParseException; + +//@@author mohamedsaf1 + +/** + * Parses input arguments and creates a new RmTaskCommand object + */ +public class DeleteTaskCommandParser implements Parser { + + @Override + public DeleteTaskCommand parse(String args) throws ParseException { + try { + Index index = ParserUtil.parseIndex(args); + return new DeleteTaskCommand(index); + } catch (ParseException pe) { + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteTaskCommand.MESSAGE_USAGE), + pe); + } + } + +} diff --git a/src/main/java/seedu/address/logic/parser/tasks/MarkTaskCommandParser.java b/src/main/java/seedu/address/logic/parser/tasks/MarkTaskCommandParser.java new file mode 100644 index 00000000000..c0fe40b4384 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/tasks/MarkTaskCommandParser.java @@ -0,0 +1,28 @@ +package seedu.address.logic.parser.tasks; + +import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; + +import seedu.address.commons.core.index.Index; +import seedu.address.logic.commands.tasks.MarkTaskCommand; +import seedu.address.logic.parser.Parser; +import seedu.address.logic.parser.ParserUtil; +import seedu.address.logic.parser.exceptions.ParseException; + +//@@author connlim +/** + * Parses input arguments and creates a new MarkTaskCommand object + */ +public class MarkTaskCommandParser implements Parser { + + @Override + public MarkTaskCommand parse(String args) throws ParseException { + try { + Index index = ParserUtil.parseIndex(args); + return new MarkTaskCommand(index); + } catch (ParseException pe) { + throw new ParseException( + String.format(MESSAGE_INVALID_COMMAND_FORMAT, MarkTaskCommand.MESSAGE_USAGE), pe); + } + } + +} diff --git a/src/main/java/seedu/address/logic/parser/tasks/TaskCommandParser.java b/src/main/java/seedu/address/logic/parser/tasks/TaskCommandParser.java new file mode 100644 index 00000000000..4fec9e43301 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/tasks/TaskCommandParser.java @@ -0,0 +1,57 @@ +package seedu.address.logic.parser.tasks; + + +import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import seedu.address.logic.commands.tasks.AddTaskCommand; +import seedu.address.logic.commands.tasks.DeleteTaskCommand; +import seedu.address.logic.commands.tasks.MarkTaskCommand; +import seedu.address.logic.commands.tasks.TaskCommand; +import seedu.address.logic.commands.tasks.UnmarkTaskCommand; +import seedu.address.logic.parser.Parser; +import seedu.address.logic.parser.exceptions.ParseException; + +/** + * Parser for all Task commands + */ +public class TaskCommandParser implements Parser { + private static final String MESSAGE_USAGE = TaskCommand.COMMAND_WORD + " [add|delete|mark|unmark|set]"; + /** + * Used for initial separation of command word and args. + */ + private static final Pattern BASIC_COMMAND_FORMAT = Pattern.compile("(?\\S+)(?.*)"); + + /** + * Parses user input into command for execution. The input must be a valid subcommand for Task. There should not be + * a TaskCommand prefix in the input. + * + * @param userInput full user input string + * @return the command based on the user input + * @throws ParseException if the user input does not conform the expected format + */ + public TaskCommand parse(String userInput) throws ParseException { + final Matcher matcher = BASIC_COMMAND_FORMAT.matcher(userInput.trim()); + if (!matcher.matches()) { + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, MESSAGE_USAGE)); + } + + final String commandWord = matcher.group("subcommandWord"); + final String arguments = matcher.group("arguments"); + + switch (commandWord) { + case AddTaskCommand.SUBCOMMAND_WORD: + return new AddTaskCommandParser().parse(arguments); + case DeleteTaskCommand.SUBCOMMAND_WORD: + return new DeleteTaskCommandParser().parse(arguments); + case MarkTaskCommand.SUBCOMMAND_WORD: + return new MarkTaskCommandParser().parse(arguments); + case UnmarkTaskCommand.SUBCOMMAND_WORD: + return new UnmarkTaskCommandParser().parse(arguments); + default: + throw new ParseException(MESSAGE_USAGE); + } + } +} diff --git a/src/main/java/seedu/address/logic/parser/tasks/UnmarkTaskCommandParser.java b/src/main/java/seedu/address/logic/parser/tasks/UnmarkTaskCommandParser.java new file mode 100644 index 00000000000..16da0f8d9c4 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/tasks/UnmarkTaskCommandParser.java @@ -0,0 +1,28 @@ +package seedu.address.logic.parser.tasks; + +import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; + +import seedu.address.commons.core.index.Index; +import seedu.address.logic.commands.tasks.UnmarkTaskCommand; +import seedu.address.logic.parser.Parser; +import seedu.address.logic.parser.ParserUtil; +import seedu.address.logic.parser.exceptions.ParseException; + +//@@author connlim +/** + * Parses input arguments and creates a new UnmarkTaskCommand object + */ +public class UnmarkTaskCommandParser implements Parser { + + @Override + public UnmarkTaskCommand parse(String args) throws ParseException { + try { + Index index = ParserUtil.parseIndex(args); + return new UnmarkTaskCommand(index); + } catch (ParseException pe) { + throw new ParseException( + String.format(MESSAGE_INVALID_COMMAND_FORMAT, UnmarkTaskCommand.MESSAGE_USAGE), pe); + } + } + +}