Skip to content

Commit

Permalink
Implemented self edit command
Browse files Browse the repository at this point in the history
  • Loading branch information
ChooJeremy committed Nov 1, 2018
1 parent 2a2188a commit 050885d
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public CommandResult runBody(Model model, CommandHistory history) throws Command
* Creates and returns a {@code Person} with the details of {@code personToEdit}
* edited with {@code editPersonDescriptor}.
*/
private static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) {
public static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) {
assert personToEdit != null;

Name updatedName = editPersonDescriptor.getName().orElse(personToEdit.getName());
Expand Down
36 changes: 17 additions & 19 deletions src/main/java/seedu/address/logic/commands/SelfEditCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,20 @@
import static java.util.Objects.requireNonNull;
import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;
import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;
import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;
import static seedu.address.logic.parser.CliSyntax.PREFIX_PROJECT;
import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;
import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;

import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;

import seedu.address.commons.core.Messages;
import seedu.address.commons.core.index.Index;
import seedu.address.commons.util.CollectionUtil;
import seedu.address.logic.CommandHistory;
import seedu.address.logic.commands.exceptions.CommandException;
import seedu.address.model.Model;
import seedu.address.model.permission.Permission;
import seedu.address.model.person.Address;
import seedu.address.model.person.Email;
import seedu.address.model.person.Name;
import seedu.address.model.person.Person;
import seedu.address.model.person.Phone;
import seedu.address.model.person.Salary;
import seedu.address.model.project.Project;


/**
* Edits the details of an existing person in the address book.
* This command makes use of EditCommand's classes to perform it's work.
*/
public class SelfEditCommand extends Command {

Expand All @@ -52,15 +36,29 @@ public class SelfEditCommand extends Command {
public static final String MESSAGE_EDIT_PERSON_SUCCESS = "Edited Person: %1$s";
public static final String MESSAGE_NOT_EDITED = "At least one field to edit must be provided.";

public SelfEditCommand() {
private EditCommand.EditPersonDescriptor editPersonDescriptor;

/**
* @param editPersonDescriptor details to edit the person with
*/
public SelfEditCommand(EditCommand.EditPersonDescriptor editPersonDescriptor) {
requireNonNull(editPersonDescriptor);

requiredPermission.addPermissions(Permission.EDIT_EMPLOYEE);
this.editPersonDescriptor = new EditCommand.EditPersonDescriptor(editPersonDescriptor);
}

@Override
public CommandResult runBody(Model model, CommandHistory history) throws CommandException {
requireNonNull(model);

Person personToEdit = model.getLoggedInUser().getPerson();
Person editedPerson = EditCommand.createEditedPerson(personToEdit, editPersonDescriptor);

model.updatePerson(personToEdit, editedPerson);
model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);
model.commitAddressBook();
return new CommandResult(MESSAGE_EDIT_PERSON_SUCCESS);
return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, editedPerson));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package seedu.address.logic.parser;

import static java.util.Objects.requireNonNull;
import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;
import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;
import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;
import static seedu.address.logic.parser.CliSyntax.PREFIX_PROJECT;

import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
import java.util.Set;

import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;
import seedu.address.logic.commands.SelfEditCommand;
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.project.Project;

/**
* Parses input arguments and creates a new EditCommand object
*/
public class SelfEditCommandParser implements Parser<SelfEditCommand> {

/**
* Parses the given {@code String} of arguments in the context of the EditCommand
* and returns an EditCommand object for execution.
* @throws ParseException if the user input does not conform the expected format
*/
public SelfEditCommand parse(String args) throws ParseException {
requireNonNull(args);
ArgumentMultimap argMultimap =
ArgumentTokenizer.tokenize(args, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS,
PREFIX_PROJECT);

EditPersonDescriptor editPersonDescriptor = new EditPersonDescriptor();
if (argMultimap.getValue(PREFIX_PHONE).isPresent()) {
editPersonDescriptor.setPhone(ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()));
}
if (argMultimap.getValue(PREFIX_EMAIL).isPresent()) {
editPersonDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()));
}
if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) {
editPersonDescriptor.setAddress(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()));
}
parseProjectsForEdit(argMultimap.getAllValues(PREFIX_PROJECT)).ifPresent(editPersonDescriptor::setProjects);

if (!editPersonDescriptor.isAnyFieldEdited()) {
throw new ParseException(SelfEditCommand.MESSAGE_NOT_EDITED);
}

return new SelfEditCommand(editPersonDescriptor);
}

/**
* Parses {@code Collection<String> tags} into a {@code Set<Tag>} if {@code tags} is non-empty.
* If {@code tags} contain only one element which is an empty string, it will be parsed into a
* {@code Set<Tag>} containing zero tags.
*/
private Optional<Set<Project>> parseProjectsForEdit(Collection<String> tags) throws ParseException {
assert tags != null;

if (tags.isEmpty()) {
return Optional.empty();
}
Collection<String> tagSet = tags.size() == 1 && tags.contains("") ? Collections.emptySet() : tags;
return Optional.of(ParserUtil.parseProjects(tagSet));
}

}

0 comments on commit 050885d

Please sign in to comment.