From f649d41891db43c678a5f34280bf9e9746cc16d4 Mon Sep 17 00:00:00 2001 From: Dexter Wong Date: Wed, 20 Mar 2024 14:22:24 +0800 Subject: [PATCH 1/8] Add info class as a starting point for future modifications --- src/main/java/seedu/address/model/person/Info.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/seedu/address/model/person/Info.java diff --git a/src/main/java/seedu/address/model/person/Info.java b/src/main/java/seedu/address/model/person/Info.java new file mode 100644 index 00000000000..04120093992 --- /dev/null +++ b/src/main/java/seedu/address/model/person/Info.java @@ -0,0 +1,4 @@ +package seedu.address.model.person; + +public class Info { +} From a3afd13e9b3ac29bd46136f30df31e8dd18321cd Mon Sep 17 00:00:00 2001 From: Dexter Wong Date: Wed, 20 Mar 2024 15:41:32 +0800 Subject: [PATCH 2/8] Add functionality for info tag support In this commit we will be able to add an optional tag for infomation regarding the person. --- .../java/seedu/address/logic/Messages.java | 1 + .../address/logic/commands/AddCommand.java | 7 +++- .../address/logic/commands/EditCommand.java | 17 +++++++- .../logic/parser/AddCommandParser.java | 7 +++- .../seedu/address/logic/parser/CliSyntax.java | 1 + .../logic/parser/EditCommandParser.java | 9 +++- .../address/logic/parser/ParserUtil.java | 6 +++ .../java/seedu/address/model/person/Info.java | 41 +++++++++++++++++++ .../seedu/address/model/person/Person.java | 10 ++++- .../address/model/util/SampleDataUtil.java | 13 +++--- .../address/storage/JsonAdaptedPerson.java | 10 ++++- .../java/seedu/address/ui/PersonCard.java | 3 ++ src/main/resources/view/PersonListCard.fxml | 1 + 13 files changed, 108 insertions(+), 18 deletions(-) diff --git a/src/main/java/seedu/address/logic/Messages.java b/src/main/java/seedu/address/logic/Messages.java index 511311f7c70..e1ea5dd8782 100644 --- a/src/main/java/seedu/address/logic/Messages.java +++ b/src/main/java/seedu/address/logic/Messages.java @@ -46,6 +46,7 @@ public static String format(Person person) { .append("; Salary: ") .append(person.getSalary()) .append("$") + .append(person.getInfo()) .append("; Tags: "); person.getTags().forEach(builder::append); return builder.toString(); diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index 8e08572554c..be1e8419853 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -6,6 +6,7 @@ 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_SALARY; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INFO; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import seedu.address.commons.util.ToStringBuilder; @@ -27,14 +28,16 @@ public class AddCommand extends Command { + PREFIX_PHONE + "PHONE " + PREFIX_EMAIL + "EMAIL " + PREFIX_ADDRESS + "ADDRESS " - + PREFIX_SALARY + "SALARY" + + PREFIX_SALARY + "SALARY " + + PREFIX_INFO + "INFO " + "[" + PREFIX_TAG + "TAG]...\n" + "Example: " + COMMAND_WORD + " " + PREFIX_NAME + "John Doe " + PREFIX_PHONE + "98765432 " + PREFIX_EMAIL + "johnd@example.com " + PREFIX_ADDRESS + "311, Clementi Ave 2, #02-25 " - + PREFIX_SALARY + "Salary: 0$" + + PREFIX_SALARY + "Salary: 0$ " + + PREFIX_INFO + "Birthday: 12 May 2001 " + PREFIX_TAG + "friends " + PREFIX_TAG + "owesMoney"; diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 64ffdc00563..5197e7d4063 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -6,6 +6,7 @@ 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_SALARY; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INFO; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; @@ -21,6 +22,7 @@ import seedu.address.commons.util.ToStringBuilder; import seedu.address.logic.Messages; import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.logic.parser.Prefix; import seedu.address.model.Model; import seedu.address.model.person.Address; import seedu.address.model.person.Email; @@ -28,6 +30,7 @@ import seedu.address.model.person.Person; import seedu.address.model.person.Phone; import seedu.address.model.person.Salary; +import seedu.address.model.person.Info; import seedu.address.model.tag.Tag; /** @@ -46,6 +49,7 @@ public class EditCommand extends Command { + "[" + PREFIX_EMAIL + "EMAIL] " + "[" + PREFIX_ADDRESS + "ADDRESS] " + "[" + PREFIX_SALARY + "SALARY] " + + "[" + PREFIX_INFO + "INFO] " + "[" + PREFIX_TAG + "TAG]...\n" + "Example: " + COMMAND_WORD + " 1 " + PREFIX_PHONE + "91234567 " @@ -103,11 +107,12 @@ private static Person createEditedPerson(Person personToEdit, EditPersonDescript Email updatedEmail = editPersonDescriptor.getEmail().orElse(personToEdit.getEmail()); Address updatedAddress = editPersonDescriptor.getAddress().orElse(personToEdit.getAddress()); Salary updatedSalary = editPersonDescriptor.getSalary().orElse(personToEdit.getSalary()); + Info updatedInfo = editPersonDescriptor.getInfo().orElse(personToEdit.getInfo()); Set updatedTags = editPersonDescriptor.getTags().orElse(personToEdit.getTags()); return new Person( updatedName, updatedPhone, updatedEmail, - updatedAddress, updatedSalary, updatedTags); + updatedAddress, updatedSalary, updatedInfo, updatedTags); } @Override @@ -144,6 +149,7 @@ public static class EditPersonDescriptor { private Email email; private Address address; private Salary salary; + private Info info; private Set tags; public EditPersonDescriptor() {} @@ -158,6 +164,7 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { setEmail(toCopy.email); setAddress(toCopy.address); setSalary(toCopy.salary); + setInfo(toCopy.info); setTags(toCopy.tags); } @@ -165,7 +172,7 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { * Returns true if at least one field is edited. */ public boolean isAnyFieldEdited() { - return CollectionUtil.isAnyNonNull(name, phone, email, address, salary, tags); + return CollectionUtil.isAnyNonNull(name, phone, email, address, salary, info, tags); } public void setName(Name name) { @@ -208,6 +215,10 @@ public Optional getSalary() { return Optional.ofNullable(salary); } + public void setInfo(Info info) {this.info = info; } + + public Optional getInfo() { return Optional.ofNullable(info); } + /** * Sets {@code tags} to this object's {@code tags}. * A defensive copy of {@code tags} is used internally. @@ -242,6 +253,7 @@ public boolean equals(Object other) { && Objects.equals(email, otherEditPersonDescriptor.email) && Objects.equals(address, otherEditPersonDescriptor.address) && Objects.equals(salary, otherEditPersonDescriptor.salary) + && Objects.equals(info, otherEditPersonDescriptor.info) && Objects.equals(tags, otherEditPersonDescriptor.tags); } @@ -253,6 +265,7 @@ public String toString() { .add("email", email) .add("address", address) .add("salary", salary) + .add("info", info) .add("tags", tags) .toString(); } diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java index c5a69f0a6e9..618c2f0e80f 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddCommandParser.java @@ -6,6 +6,7 @@ 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_SALARY; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INFO; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import java.util.Set; @@ -19,6 +20,7 @@ import seedu.address.model.person.Person; import seedu.address.model.person.Phone; import seedu.address.model.person.Salary; +import seedu.address.model.person.Info; import seedu.address.model.tag.Tag; /** @@ -34,7 +36,7 @@ public class AddCommandParser implements Parser { public AddCommand parse(String args) throws ParseException { ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize( - args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG, PREFIX_SALARY); + args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG, PREFIX_INFO, PREFIX_SALARY); if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_EMAIL) || !argMultimap.getPreamble().isEmpty()) { @@ -47,9 +49,10 @@ public AddCommand parse(String args) throws ParseException { Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()); Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()); Salary salary = ParserUtil.parseSalary(argMultimap.getValue(PREFIX_SALARY).orElse("0")); + Info info = ParserUtil.parseInfo(argMultimap.getValue(PREFIX_INFO).orElse("")); Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); - Person person = new Person(name, phone, email, address, salary, tagList); + Person person = new Person(name, phone, email, address, salary, info, tagList); return new AddCommand(person); } diff --git a/src/main/java/seedu/address/logic/parser/CliSyntax.java b/src/main/java/seedu/address/logic/parser/CliSyntax.java index 1775633356d..8a1c23f82dd 100644 --- a/src/main/java/seedu/address/logic/parser/CliSyntax.java +++ b/src/main/java/seedu/address/logic/parser/CliSyntax.java @@ -12,5 +12,6 @@ public class CliSyntax { public static final Prefix PREFIX_ADDRESS = new Prefix("a/"); public static final Prefix PREFIX_TAG = new Prefix("t/"); public static final Prefix PREFIX_SALARY = new Prefix("s/"); + public static final Prefix PREFIX_INFO = new Prefix("i/"); } diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/seedu/address/logic/parser/EditCommandParser.java index a2b9a902f62..53fd47f6c40 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/EditCommandParser.java @@ -7,6 +7,7 @@ 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_SALARY; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INFO; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import java.util.Collection; @@ -34,7 +35,8 @@ public EditCommand parse(String args) throws ParseException { requireNonNull(args); ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize( - args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_SALARY, PREFIX_TAG); + args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_SALARY, PREFIX_INFO, + PREFIX_TAG); Index index; @@ -45,7 +47,7 @@ public EditCommand parse(String args) throws ParseException { } argMultimap.verifyNoDuplicatePrefixesFor( - PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_SALARY, PREFIX_ADDRESS); + PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_SALARY, PREFIX_INFO, PREFIX_ADDRESS); EditPersonDescriptor editPersonDescriptor = new EditPersonDescriptor(); @@ -64,6 +66,9 @@ public EditCommand parse(String args) throws ParseException { if (argMultimap.getValue(PREFIX_SALARY).isPresent()) { editPersonDescriptor.setSalary(ParserUtil.parseSalary(argMultimap.getValue(PREFIX_SALARY).get())); } + if (argMultimap.getValue(PREFIX_INFO).isPresent()) { + editPersonDescriptor.setInfo(ParserUtil.parseInfo(argMultimap.getValue(PREFIX_INFO).get())); + } parseTagsForEdit(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(editPersonDescriptor::setTags); if (!editPersonDescriptor.isAnyFieldEdited()) { diff --git a/src/main/java/seedu/address/logic/parser/ParserUtil.java b/src/main/java/seedu/address/logic/parser/ParserUtil.java index d616ba8f22c..c8488789095 100644 --- a/src/main/java/seedu/address/logic/parser/ParserUtil.java +++ b/src/main/java/seedu/address/logic/parser/ParserUtil.java @@ -14,6 +14,7 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Phone; import seedu.address.model.person.Salary; +import seedu.address.model.person.Info; import seedu.address.model.tag.Tag; /** @@ -137,4 +138,9 @@ public static Salary parseSalary(String salary) throws ParseException { } return new Salary(trimmedSalary); } + + public static Info parseInfo(String info) { + String trimmedInfo = info.trim(); + return new Info(trimmedInfo); + } } diff --git a/src/main/java/seedu/address/model/person/Info.java b/src/main/java/seedu/address/model/person/Info.java index 04120093992..598a151aa89 100644 --- a/src/main/java/seedu/address/model/person/Info.java +++ b/src/main/java/seedu/address/model/person/Info.java @@ -1,4 +1,45 @@ package seedu.address.model.person; + public class Info { + public final String value; + + /** + * Constructs a {@code Info}. + * + * @param info Information about the person in the address book + */ + public Info(String info) { + value = info; + } + + public Info() { + value = ""; + } + + @Override + public String toString() { + return value; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof Info)) { + return false; + } + + Info otherInfo = (Info) other; + return value.equals(otherInfo.value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } + } diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index 9dd70c6d924..2e18a92666a 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -24,18 +24,20 @@ public class Person { // Data fields private final Address address; private final Salary salary; + private final Info info; private final Set tags = new HashSet<>(); /** * Every field must be present and not null. */ - public Person(Name name, Phone phone, Email email, Address address, Salary salary, Set tags) { - requireAllNonNull(name, phone, email, address, salary, tags); + public Person(Name name, Phone phone, Email email, Address address, Salary salary, Info info, Set tags) { + requireAllNonNull(name, phone, email, address, salary, info, tags); this.name = name; this.phone = phone; this.email = email; this.address = address; this.salary = salary; + this.info = info; this.tags.addAll(tags); } @@ -58,6 +60,9 @@ public Address getAddress() { public Salary getSalary() { return salary; } + public Info getInfo() { + return info; + } /** * Returns an immutable tag set, which throws {@code UnsupportedOperationException} @@ -117,6 +122,7 @@ public String toString() { .add("email", email) .add("address", address) .add("salary", salary) + .add("info", info) .add("tags", tags) .toString(); } diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java index 6be261b4b35..0243742c4d8 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -12,6 +12,7 @@ import seedu.address.model.person.Person; import seedu.address.model.person.Phone; import seedu.address.model.person.Salary; +import seedu.address.model.person.Info; import seedu.address.model.tag.Tag; /** @@ -21,22 +22,22 @@ public class SampleDataUtil { public static Person[] getSamplePersons() { return new Person[] { new Person(new Name("Alex Yeoh"), new Phone("87438807"), new Email("alexyeoh@example.com"), - new Address("Blk 30 Geylang Street 29, #06-40"), new Salary("0"), + new Address("Blk 30 Geylang Street 29, #06-40"), new Salary("0"), new Info("Friend of boss"), getTagSet("friends")), new Person(new Name("Bernice Yu"), new Phone("99272758"), new Email("berniceyu@example.com"), - new Address("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), new Salary("0"), + new Address("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), new Salary("0"), new Info("Friend of boss"), getTagSet("colleagues", "friends")), new Person(new Name("Charlotte Oliveiro"), new Phone("93210283"), new Email("charlotte@example.com"), - new Address("Blk 11 Ang Mo Kio Street 74, #11-04"), new Salary("0"), + new Address("Blk 11 Ang Mo Kio Street 74, #11-04"), new Salary("0"), new Info("Friend of boss"), getTagSet("neighbours")), new Person(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"), - new Address("Blk 436 Serangoon Gardens Street 26, #16-43"), new Salary("0"), + new Address("Blk 436 Serangoon Gardens Street 26, #16-43"), new Salary("0"), new Info("Friend of boss"), getTagSet("family")), new Person(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"), - new Address("Blk 47 Tampines Street 20, #17-35"), new Salary("0"), + new Address("Blk 47 Tampines Street 20, #17-35"), new Salary("0"), new Info("Friend of boss"), getTagSet("classmates")), new Person(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"), - new Address("Blk 45 Aljunied Street 85, #11-31"), new Salary("0"), + new Address("Blk 45 Aljunied Street 85, #11-31"), new Salary("0"), new Info("Friend of boss"), getTagSet("colleagues")) }; } diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java index 88d2bacc262..27de917d333 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java @@ -16,6 +16,7 @@ import seedu.address.model.person.Person; import seedu.address.model.person.Phone; import seedu.address.model.person.Salary; +import seedu.address.model.person.Info; import seedu.address.model.tag.Tag; /** @@ -30,6 +31,7 @@ class JsonAdaptedPerson { private final String email; private final String address; private final String salary; + private final String info; private final List tags = new ArrayList<>(); /** @@ -38,13 +40,14 @@ class JsonAdaptedPerson { @JsonCreator public JsonAdaptedPerson(@JsonProperty("name") String name, @JsonProperty("phone") String phone, @JsonProperty("email") String email, @JsonProperty("address") String address, - @JsonProperty("salary") String salary, + @JsonProperty("salary") String salary, @JsonProperty("info") String info, @JsonProperty("tags") List tags) { this.name = name; this.phone = phone; this.email = email; this.address = address; this.salary = salary; + this.info = info; if (tags != null) { this.tags.addAll(tags); } @@ -59,6 +62,7 @@ public JsonAdaptedPerson(Person source) { email = source.getEmail().value; address = source.getAddress().value; salary = source.getSalary().toString(); + info = source.getInfo().value; tags.addAll(source.getTags().stream() .map(JsonAdaptedTag::new) .collect(Collectors.toList())); @@ -115,8 +119,10 @@ public Person toModelType() throws IllegalValueException { } final Salary modelSalary = new Salary(salary); + final Info modelInfo = new Info(info); + final Set modelTags = new HashSet<>(personTags); - return new Person(modelName, modelPhone, modelEmail, modelAddress, modelSalary, modelTags); + return new Person(modelName, modelPhone, modelEmail, modelAddress, modelSalary, modelInfo, modelTags); } } diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index 36db11d6a8a..685d1db5798 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -41,6 +41,8 @@ public class PersonCard extends UiPart { @FXML private Label salary; @FXML + private Label info; + @FXML private FlowPane tags; /** @@ -55,6 +57,7 @@ public PersonCard(Person person, int displayedIndex) { address.setText(person.getAddress().value); email.setText(person.getEmail().value); salary.setText("Salary: " + person.getSalary().toString() + "$"); + info.setText(person.getInfo().value); person.getTags().stream() .sorted(Comparator.comparing(tag -> tag.tagName)) .forEach(tag -> tags.getChildren().add(new Label(tag.tagName))); diff --git a/src/main/resources/view/PersonListCard.fxml b/src/main/resources/view/PersonListCard.fxml index 950911a4afe..c136d9c2360 100644 --- a/src/main/resources/view/PersonListCard.fxml +++ b/src/main/resources/view/PersonListCard.fxml @@ -32,6 +32,7 @@