forked from nus-cs2103-AY1718S2/addressbook-level4
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #90 from jordancjq/team_implementation
Add AssignCommand without test
- Loading branch information
Showing
24 changed files
with
620 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
106 changes: 106 additions & 0 deletions
106
src/main/java/seedu/address/logic/commands/AssignCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
package seedu.address.logic.commands; | ||
|
||
import static java.util.Objects.requireNonNull; | ||
import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX; | ||
import static seedu.address.logic.parser.CliSyntax.PREFIX_TEAMNAME; | ||
import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; | ||
|
||
import java.util.ArrayList; | ||
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.person.Person; | ||
import seedu.address.model.person.exceptions.DuplicatePersonException; | ||
import seedu.address.model.team.TeamName; | ||
|
||
/** | ||
* Assigns a person to a team. | ||
*/ | ||
public class AssignCommand extends UndoableCommand { | ||
|
||
public static final String COMMAND_WORD = "assign"; | ||
public static final String COMMAND_ALIAS = "at"; | ||
|
||
public static final String MESSAGE_USAGE = COMMAND_WORD + ": Assigns a person or a group of person to a team " | ||
+ "by the index number used in the last person listing.\n" | ||
+ "Team of the person will be updated and will be added to team.\n" | ||
+ "Parameters: " | ||
+ PREFIX_TEAMNAME + "TEAM_NAME " | ||
+ PREFIX_INDEX + "INDEX (must be a positive integer) " | ||
+ "[INDEX]...\n" | ||
+ "Example: " + COMMAND_WORD + " " | ||
+ PREFIX_TEAMNAME + "Arsenal " | ||
+ PREFIX_INDEX + "1 2"; | ||
|
||
public static final String MESSAGE_PARAMETERS = PREFIX_TEAMNAME + "TEAM_NAME " | ||
+ PREFIX_INDEX + "INDEX " | ||
+ "[INDEX]..."; | ||
|
||
public static final String MESSAGE_SUCCESS = "Person assigned to team"; | ||
public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the team"; | ||
|
||
private final TeamName targetTeam; | ||
private final List<Index> targetIndexes; | ||
|
||
private List<Person> personsToAssign; | ||
|
||
/** | ||
* Creates an AssignCommand to assign person to {@code Team} | ||
*/ | ||
public AssignCommand(TeamName targetTeam, List<Index> targetIndexes) { | ||
requireNonNull(targetTeam); | ||
requireNonNull(targetIndexes); | ||
|
||
this.targetTeam = targetTeam; | ||
this.targetIndexes = targetIndexes; | ||
} | ||
|
||
@Override | ||
public CommandResult executeUndoableCommand() throws CommandException { | ||
try { | ||
for (Person person : personsToAssign) { | ||
model.assignPersonToTeam(person, targetTeam); | ||
} | ||
} catch (DuplicatePersonException e) { | ||
throw new CommandException(MESSAGE_DUPLICATE_PERSON); | ||
} | ||
|
||
model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); | ||
return new CommandResult(MESSAGE_SUCCESS); | ||
} | ||
|
||
@Override | ||
protected void preprocessUndoableCommand() throws CommandException { | ||
if (!model.getAddressBook().getTeamList().stream().anyMatch(t -> t.getTeamName().equals(targetTeam))) { | ||
throw new CommandException(Messages.MESSAGE_TEAM_NOT_FOUND); | ||
} | ||
|
||
List<Person> lastShownList = model.getFilteredPersonList(); | ||
List<Index> executableIndexes = new ArrayList<>(); | ||
Boolean canAssignPerson = false; | ||
|
||
for (Index idx : targetIndexes) { | ||
if (idx.getZeroBased() < lastShownList.size()) { | ||
executableIndexes.add(idx); | ||
canAssignPerson = true; | ||
} | ||
} | ||
|
||
if (!canAssignPerson) { | ||
throw new CommandException(Messages.MESSAGE_INVALID_ALL_INDEX); | ||
} | ||
|
||
personsToAssign = new ArrayList<>(); | ||
executableIndexes.forEach(idx -> personsToAssign.add(lastShownList.get(idx.getZeroBased()))); | ||
} | ||
|
||
@Override | ||
public boolean equals(Object other) { | ||
return other == this // short circuit if same object | ||
|| (other instanceof AssignCommand // instanceof handles nulls | ||
&& this.targetTeam.equals(((AssignCommand) other).targetTeam)) // state check | ||
&& this.targetIndexes.equals(((AssignCommand) other).targetIndexes); | ||
} | ||
} |
51 changes: 51 additions & 0 deletions
51
src/main/java/seedu/address/logic/commands/RemoveCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
package seedu.address.logic.commands; | ||
|
||
import static java.util.Objects.requireNonNull; | ||
|
||
import seedu.address.commons.core.Messages; | ||
import seedu.address.logic.commands.exceptions.CommandException; | ||
import seedu.address.model.team.TeamName; | ||
import seedu.address.model.team.exceptions.TeamNotFoundException; | ||
|
||
/** | ||
* Removes a team identified using the team name | ||
*/ | ||
public class RemoveCommand extends UndoableCommand { | ||
|
||
public static final String COMMAND_WORD = "remove"; | ||
public static final String COMMAND_ALIAS = "rt"; | ||
|
||
public static final String MESSAGE_USAGE = COMMAND_WORD | ||
+ ": Removes the team specified by the team name.\n" | ||
+ "Parameters: TEAM_NAME\n" | ||
+ "Example: " + COMMAND_WORD + " Arsenal"; | ||
|
||
public static final String MESSAGE_PARAMETERS = "TEAM_NAME"; | ||
|
||
public static final String MESSAGE_REMOVE_TEAM_SUCCESS = "Removed Team: %1$s"; | ||
|
||
private TeamName targetTeamName; | ||
|
||
public RemoveCommand(TeamName targetTeamName) { | ||
this.targetTeamName = targetTeamName; | ||
} | ||
|
||
@Override | ||
public CommandResult executeUndoableCommand() throws CommandException { | ||
requireNonNull(targetTeamName); | ||
try { | ||
model.removeTeam(targetTeamName); | ||
} catch (TeamNotFoundException tnfe) { | ||
throw new CommandException(Messages.MESSAGE_TEAM_NOT_FOUND); | ||
} | ||
|
||
return new CommandResult(String.format(MESSAGE_REMOVE_TEAM_SUCCESS, targetTeamName)); | ||
} | ||
|
||
@Override | ||
public boolean equals(Object other) { | ||
return other == this // short circuit if same object | ||
|| (other instanceof RemoveCommand // instanceof handles nulls | ||
&& this.targetTeamName.equals(((RemoveCommand) other).targetTeamName)); // state check | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
52 changes: 52 additions & 0 deletions
52
src/main/java/seedu/address/logic/parser/AssignCommandParser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package seedu.address.logic.parser; | ||
|
||
import static java.util.Objects.requireNonNull; | ||
import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; | ||
import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX; | ||
import static seedu.address.logic.parser.CliSyntax.PREFIX_TEAMNAME; | ||
|
||
import java.util.List; | ||
import java.util.stream.Stream; | ||
|
||
import seedu.address.commons.core.index.Index; | ||
import seedu.address.commons.exceptions.IllegalValueException; | ||
import seedu.address.logic.commands.AssignCommand; | ||
import seedu.address.logic.parser.exceptions.ParseException; | ||
import seedu.address.model.team.TeamName; | ||
|
||
/** | ||
* Parses input arguments and creates a new AssignCommand object | ||
*/ | ||
public class AssignCommandParser implements Parser<AssignCommand> { | ||
|
||
/** | ||
* Parses the given {@code String} of arguments in the context of the AssignCommand | ||
* and returns an AssignCommand object for execution. | ||
* @throws ParseException if the user input does not conform the expected format | ||
*/ | ||
public AssignCommand parse(String args) throws ParseException { | ||
requireNonNull(args); | ||
ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args, PREFIX_TEAMNAME, PREFIX_INDEX); | ||
|
||
if (!arePrefixesPresent(argMultimap, PREFIX_TEAMNAME, PREFIX_INDEX)) { | ||
throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AssignCommand.MESSAGE_USAGE)); | ||
} | ||
|
||
try { | ||
TeamName teamName = ParserUtil.parseTeamName(argMultimap.getValue(PREFIX_TEAMNAME).get()); | ||
List<Index> indexList = ParserUtil.parseIndexes(argMultimap.getValue(PREFIX_INDEX).get()); | ||
|
||
return new AssignCommand(teamName, indexList); | ||
} catch (IllegalValueException ive) { | ||
throw new ParseException(ive.getMessage(), ive); | ||
} | ||
} | ||
|
||
/** | ||
* Returns true if none of the prefixes contains empty {@code Optional} values in the given | ||
* {@code ArgumentMultimap}. | ||
*/ | ||
private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) { | ||
return Stream.of(prefixes).allMatch(prefix -> argumentMultimap.getValue(prefix).isPresent()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.