Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Resolves #45: Implements (simplified) Student Class #50

Merged
merged 6 commits into from
Oct 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/main/java/seedu/address/MainApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,16 @@
import seedu.address.commons.util.StringUtil;
import seedu.address.logic.Logic;
import seedu.address.logic.LogicManager;
import seedu.address.model.*;
import seedu.address.model.Model;
import seedu.address.model.ModelManager;
import seedu.address.model.ReadOnlyReeve;
import seedu.address.model.ReadOnlyUserPrefs;
import seedu.address.model.Reeve;
import seedu.address.model.UserPrefs;
import seedu.address.model.util.SampleDataUtil;
import seedu.address.storage.ReeveStorage;
import seedu.address.storage.JsonReeveStorage;
import seedu.address.storage.JsonUserPrefsStorage;
import seedu.address.storage.ReeveStorage;
import seedu.address.storage.Storage;
import seedu.address.storage.StorageManager;
import seedu.address.storage.UserPrefsStorage;
Expand Down
16 changes: 6 additions & 10 deletions src/main/java/seedu/address/logic/commands/AddCommand.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package seedu.address.logic.commands;

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_TAG;
import static seedu.address.logic.parser.CliSyntax.PREFIX_SCHOOL;
import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR;

import seedu.address.logic.commands.exceptions.CommandException;
import seedu.address.model.Model;
Expand All @@ -22,16 +21,13 @@ public class AddCommand extends Command {
+ "Parameters: "
+ PREFIX_NAME + "NAME "
+ PREFIX_PHONE + "PHONE "
+ PREFIX_EMAIL + "EMAIL "
+ PREFIX_ADDRESS + "ADDRESS "
+ "[" + PREFIX_TAG + "TAG]...\n"
+ PREFIX_SCHOOL + "SCHOOL "
+ PREFIX_YEAR + "YEAR\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_TAG + "friends "
+ PREFIX_TAG + "owesMoney";
+ PREFIX_SCHOOL + "NUS High School "
+ PREFIX_YEAR + "5";

public static final String MESSAGE_SUCCESS = "New person added: %1$s";
public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book";
Expand Down
106 changes: 6 additions & 100 deletions src/main/java/seedu/address/logic/commands/EditCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,25 @@

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_TAG;
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.commands.exceptions.CommandException;
import seedu.address.model.Model;
import seedu.address.model.admin.AdditionalDetails;
import seedu.address.model.admin.ClassTime;
import seedu.address.model.admin.ClassVenue;
import seedu.address.model.student.Name;
import seedu.address.model.student.Phone;
import seedu.address.model.student.School;
import seedu.address.model.student.Student;
import seedu.address.model.student.Year;
import seedu.address.model.tag.Tag;
import seedu.address.model.student.admin.Admin;

/**
* Edits the details of an existing person in the address book.
Expand All @@ -42,12 +35,10 @@ public class EditCommand extends Command {
+ "Parameters: INDEX (must be a positive integer) "
+ "[" + PREFIX_NAME + "NAME] "
+ "[" + PREFIX_PHONE + "PHONE] "
+ "[" + PREFIX_EMAIL + "EMAIL] "
+ "[" + PREFIX_ADDRESS + "ADDRESS] "
+ "[" + PREFIX_TAG + "TAG]...\n"
+ "Example: " + COMMAND_WORD + " 1 "
+ PREFIX_PHONE + "91234567 "
+ PREFIX_EMAIL + "johndoe@example.com";
+ PREFIX_PHONE + "91234567 ";

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.";
Expand Down Expand Up @@ -100,18 +91,8 @@ private static Student createEditedPerson(Student studentToEdit, EditStudentDesc
Phone updatedPhone = editStudentDescriptor.getPhone().orElse(studentToEdit.getPhone());
School updatedSchool = editStudentDescriptor.getSchool().orElse(studentToEdit.getSchool());
Year updatedYear = editStudentDescriptor.getYear().orElse(studentToEdit.getYear());
ClassVenue updatedClassVenue = editStudentDescriptor.getClassVenue().orElse(studentToEdit.getClassVenue());
ClassTime updatedClassTime = editStudentDescriptor.getClassTime().orElse(studentToEdit.getClassTime());
AdditionalDetails updatedAdditionalDetails =
editStudentDescriptor.getAdditionalDetails().orElse(studentToEdit.getAdditionalDetails());
MeetingLink updatedMeetingLink = editStudentDescriptor.getMeetingLink().orElse(studentToEdit.getMeetingLink());
Subject updatedSubject = editStudentDescriptor.getSubject().orElse(studentToEdit.getSubject());
Set<Tag> updatedTags = editStudentDescriptor.getTags().orElse(studentToEdit.getTags());

return new Student(updatedName, updatedPhone, updatedSchool, updatedYear,
updatedClassVenue,
updatedClassTime, updatedAdditionalDetails, updatedMeetingLink,
updatedSubject, updatedTags);

return new Student(updatedName, updatedPhone, updatedSchool, updatedYear, new Admin());
}

@Override
Expand Down Expand Up @@ -141,12 +122,6 @@ public static class EditStudentDescriptor {
private Phone phone;
private School school;
private Year year;
private ClassVenue classVenue;
private ClassTime classTime;
private AdditionalDetails additionalDetails;
private MeetingLink meetingLink;
private Subject subject;
private Set<Tag> tags;

public EditStudentDescriptor() {}

Expand All @@ -159,19 +134,13 @@ public EditStudentDescriptor(EditStudentDescriptor toCopy) {
setPhone(toCopy.phone);
setSchool(toCopy.school);
setYear(toCopy.year);
setClassVenue(toCopy.classVenue);
setClassTime(toCopy.classTime);
setAdditionalDetails(toCopy.additionalDetails);
setMeetingLink(toCopy.meetingLink);
setSubject(toCopy.subject);
setTags(toCopy.tags);
}

/**
* Returns true if at least one field is edited.
*/
public boolean isAnyFieldEdited() {
return CollectionUtil.isAnyNonNull(name, phone, meetingLink, classVenue, tags);
return CollectionUtil.isAnyNonNull(name, phone, school, year);
}

public void setName(Name name) {
Expand Down Expand Up @@ -206,63 +175,6 @@ public Optional<Year> getYear() {
return Optional.ofNullable(year);
}

public void setClassVenue(ClassVenue classVenue) {
this.classVenue = classVenue;
}

public Optional<ClassVenue> getClassVenue() {
return Optional.ofNullable(classVenue);
}

public void setClassTime(ClassTime classTime) {
this.classTime = classTime;
}

public Optional<ClassTime> getClassTime() {
return Optional.ofNullable(classTime);
}

public void setAdditionalDetails(AdditionalDetails additionalDetails) {
this.additionalDetails = additionalDetails;
}

public Optional<AdditionalDetails> getAdditionalDetails() {
return Optional.ofNullable(additionalDetails);
}

public void setSubject(Subject subject) {
this.subject = subject;
}

public Optional<Subject> getSubject() {
return Optional.ofNullable(subject);
}

public void setMeetingLink(MeetingLink meetingLink) {
this.meetingLink = meetingLink;
}

public Optional<MeetingLink> getMeetingLink() {
return Optional.ofNullable(meetingLink);
}

/**
* Sets {@code tags} to this object's {@code tags}.
* A defensive copy of {@code tags} is used internally.
*/
public void setTags(Set<Tag> tags) {
this.tags = (tags != null) ? new HashSet<>(tags) : null;
}

/**
* Returns an unmodifiable tag set, which throws {@code UnsupportedOperationException}
* if modification is attempted.
* Returns {@code Optional#empty()} if {@code tags} is null.
*/
public Optional<Set<Tag>> getTags() {
return (tags != null) ? Optional.of(Collections.unmodifiableSet(tags)) : Optional.empty();
}

@Override
public boolean equals(Object other) {
// short circuit if same object
Expand All @@ -281,13 +193,7 @@ public boolean equals(Object other) {
return getName().equals(e.getName())
&& getPhone().equals(e.getPhone())
&& getSchool().equals(e.getSchool())
&& getYear().equals(e.getYear())
&& getClassVenue().equals(e.getClassVenue())
&& getClassTime().equals(e.getClassTime())
&& getAdditionalDetails().equals(e.getAdditionalDetails())
&& getMeetingLink().equals(e.getMeetingLink())
&& getSubject().equals(e.getSubject())
&& getTags().equals(e.getTags());
&& getYear().equals(e.getYear());
}
}
}
24 changes: 11 additions & 13 deletions src/main/java/seedu/address/logic/parser/AddCommandParser.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package seedu.address.logic.parser;

import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT;
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.COMPULSORY_PREFIXES;
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_TAG;
import static seedu.address.logic.parser.CliSyntax.PREFIX_SCHOOL;
import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR;

import java.util.Set;
import java.util.stream.Stream;

import seedu.address.logic.commands.AddCommand;
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.admin.ClassVenue;
import seedu.address.model.student.Name;
import seedu.address.model.student.Phone;
import seedu.address.model.student.School;
import seedu.address.model.student.Student;
import seedu.address.model.tag.Tag;
import seedu.address.model.student.Year;
import seedu.address.model.student.admin.Admin;

/**
* Parses input arguments and creates a new AddCommand object
Expand All @@ -30,21 +30,19 @@ public class AddCommandParser implements Parser<AddCommand> {
*/
public AddCommand parse(String args) throws ParseException {
ArgumentMultimap argMultimap =
ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG);
ArgumentTokenizer.tokenize(args, COMPULSORY_PREFIXES);

if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_EMAIL)
if (!arePrefixesPresent(argMultimap, COMPULSORY_PREFIXES)
|| !argMultimap.getPreamble().isEmpty()) {
throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));
}

Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get());
Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get());
MeetingLink meetingLink = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get());
ClassVenue classVenue = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get());
Set<Tag> tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG));
School school = ParserUtil.parseSchool(argMultimap.getValue(PREFIX_SCHOOL).get());
Year year = ParserUtil.parseYear(argMultimap.getValue(PREFIX_YEAR).get());

Student student = new Student(name, phone, null, null, null, null,
null, meetingLink, null, tagList);
Student student = new Student(name, phone, school, year, new Admin());

return new AddCommand(student);
}
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/seedu/address/logic/parser/CliSyntax.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ public class CliSyntax {
/* Prefix definitions */
public static final Prefix PREFIX_NAME = new Prefix("n/");
public static final Prefix PREFIX_PHONE = new Prefix("p/");
public static final Prefix PREFIX_EMAIL = new Prefix("e/");
public static final Prefix PREFIX_SCHOOL = new Prefix("s/");
public static final Prefix PREFIX_YEAR = new Prefix("y/");
public static final Prefix PREFIX_ADDRESS = new Prefix("a/");
public static final Prefix PREFIX_TAG = new Prefix("t/");

public static final Prefix[] COMPULSORY_PREFIXES = new Prefix[] {PREFIX_NAME, PREFIX_PHONE,
PREFIX_SCHOOL, PREFIX_YEAR};

}
17 changes: 8 additions & 9 deletions src/main/java/seedu/address/logic/parser/EditCommandParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

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_ADDRESS;
import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;
import static seedu.address.logic.parser.CliSyntax.COMPULSORY_PREFIXES;
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_TAG;
import static seedu.address.logic.parser.CliSyntax.PREFIX_SCHOOL;
import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR;

import java.util.Collection;
import java.util.Collections;
Expand All @@ -32,7 +32,7 @@ public class EditCommandParser implements Parser<EditCommand> {
public EditCommand parse(String args) throws ParseException {
requireNonNull(args);
ArgumentMultimap argMultimap =
ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG);
ArgumentTokenizer.tokenize(args, COMPULSORY_PREFIXES);

Index index;

Expand All @@ -49,13 +49,12 @@ public EditCommand parse(String args) throws ParseException {
if (argMultimap.getValue(PREFIX_PHONE).isPresent()) {
editStudentDescriptor.setPhone(ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()));
}
if (argMultimap.getValue(PREFIX_EMAIL).isPresent()) {
editStudentDescriptor.setMeetingLink(ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()));
if (argMultimap.getValue(PREFIX_SCHOOL).isPresent()) {
editStudentDescriptor.setSchool(ParserUtil.parseSchool(argMultimap.getValue(PREFIX_SCHOOL).get()));
}
if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) {
editStudentDescriptor.setClassVenue(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()));
if (argMultimap.getValue(PREFIX_YEAR).isPresent()) {
editStudentDescriptor.setYear(ParserUtil.parseYear(argMultimap.getValue(PREFIX_YEAR).get()));
}
parseTagsForEdit(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(editStudentDescriptor::setTags);

if (!editStudentDescriptor.isAnyFieldEdited()) {
throw new ParseException(EditCommand.MESSAGE_NOT_EDITED);
Expand Down