diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 5accb5fbf2db..3f4ce9f3c4d3 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -53,6 +53,7 @@ e.g. typing *`help`* and pressing kbd:[Enter] will open the help window. * Words in `UPPER_CASE` are the parameters to be supplied by the user e.g. in `adde n/NAME`, `NAME` is a parameter which can be used as `adde n/John Doe`. * Items in square brackets are optional e.g `n/NAME [t/TAG]` can be used as `n/John Doe t/mechanic` or as `n/John Doe`. * Items with `…`​ after them can be used multiple times including zero times e.g. `[t/TAG]...` can be used as `{nbsp}` (i.e. 0 times), `t/mechanic`, `t/technician` etc. +* Items with `+` after them can be used multiple times but has to be used **at least once** e.g. `w/ASSIGNED_EMPLOYEE_INDEX+` can be used as `w/4`, `w/5` etc. * Parameters can be in any order e.g. if the command specifies `n/NAME p/PHONE_NUMBER`, `p/PHONE_NUMBER n/NAME` is also acceptable. ==== @@ -63,12 +64,12 @@ Format: `help` === Adding an job entry: `addj` Adds a job entry to CarviciM + -Format: `addj n/NAME p/PHONE_NUMBER e/EMAIL v/VEHICLE_NUMBER w/EMPLOYEE_INDEX` +Format: `addj n/NAME p/PHONE_NUMBER e/EMAIL v/VEHICLE_NUMBER w/ASSIGNED_EMPLOYEE_INDEX+` Examples: -* `addj n/John Doe p/98765432 e/johnd@example.com v/bhj123 w/33` -* `addj n/Betsy Crowe p/93939393 e/betsycrowe@example.com v/ss888 w/2` +* `addj n/John Doe p/98765432 e/johnd@example.com v/bhj123 w/3` +* `addj n/Betsy Crowe p/93939393 e/betsycrowe@example.com v/ss888 w/2 w/3 w/5` === Closing a job entry: `closej` diff --git a/src/main/java/seedu/address/MainApp.java b/src/main/java/seedu/address/MainApp.java index 1b68152cbf10..41526ae15d58 100644 --- a/src/main/java/seedu/address/MainApp.java +++ b/src/main/java/seedu/address/MainApp.java @@ -25,6 +25,7 @@ import seedu.address.model.ModelManager; import seedu.address.model.ReadOnlyAddressBook; import seedu.address.model.UserPrefs; +import seedu.address.model.job.JobNumber; import seedu.address.model.util.SampleDataUtil; import seedu.address.storage.AddressBookStorage; import seedu.address.storage.JsonUserPrefsStorage; @@ -73,6 +74,9 @@ public void init() throws Exception { ui = new UiManager(logic, config, userPrefs); initEventsCenter(); + + //Initialize the job number + JobNumber.initialize("0"); } private String getApplicationParameter(String parameterName) { diff --git a/src/main/java/seedu/address/logic/Logic.java b/src/main/java/seedu/address/logic/Logic.java index c2ccc644c06e..5d95127e6543 100644 --- a/src/main/java/seedu/address/logic/Logic.java +++ b/src/main/java/seedu/address/logic/Logic.java @@ -4,6 +4,7 @@ import seedu.address.logic.commands.CommandResult; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.job.Job; import seedu.address.model.person.Employee; /** @@ -25,6 +26,9 @@ public interface Logic { /** Returns an unmodifiable view of the filtered list of persons */ ObservableList getFilteredPersonList(); + /** Returns an unmodifiable view of the filtered list of jobs */ + ObservableList getFilteredJobList(); + /** Returns the list of input entered by the user, encapsulated in a {@code ListElementPointer} object */ ListElementPointer getHistorySnapshot(); } diff --git a/src/main/java/seedu/address/logic/LogicManager.java b/src/main/java/seedu/address/logic/LogicManager.java index 63c14999a8c2..16728a15949f 100644 --- a/src/main/java/seedu/address/logic/LogicManager.java +++ b/src/main/java/seedu/address/logic/LogicManager.java @@ -11,6 +11,7 @@ import seedu.address.logic.parser.AddressBookParser; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.Model; +import seedu.address.model.job.Job; import seedu.address.model.person.Employee; /** @@ -54,6 +55,11 @@ public ObservableList getFilteredPersonList() { return model.getFilteredPersonList(); } + @Override + public ObservableList getFilteredJobList() { + return model.getFilteredJobList(); + } + @Override public ListElementPointer getHistorySnapshot() { return new ListElementPointer(history.getHistory()); diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index b353805d197f..6157dfa18078 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -1,7 +1,6 @@ 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; @@ -23,13 +22,11 @@ public class AddCommand extends UndoableCommand { + PREFIX_NAME + "NAME " + PREFIX_PHONE + "PHONE " + PREFIX_EMAIL + "EMAIL " - + PREFIX_ADDRESS + "ADDRESS " + "[" + 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_TAG + "friends " + PREFIX_TAG + "owesMoney"; diff --git a/src/main/java/seedu/address/logic/commands/AddJobCommand.java b/src/main/java/seedu/address/logic/commands/AddJobCommand.java new file mode 100644 index 000000000000..c6813af0e08f --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/AddJobCommand.java @@ -0,0 +1,60 @@ +package seedu.address.logic.commands; + +import static java.util.Objects.requireNonNull; +import static seedu.address.logic.parser.CliSyntax.PREFIX_ASSIGNED_EMPLOYEE; +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_VEHICLE_NUMBER; + +import seedu.address.model.job.Job; + +/** + * Adds a job to CarviciM + */ +public class AddJobCommand extends UndoableCommand { + + public static final String COMMAND_WORD = "addj"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Adds a job to the CarviciM. " + + "Parameters: " + + PREFIX_NAME + "CLIENT_NAME " + + PREFIX_PHONE + "PHONE " + + PREFIX_EMAIL + "EMAIL " + + PREFIX_VEHICLE_NUMBER + "VEHICLE_NUMBER " + + PREFIX_ASSIGNED_EMPLOYEE + "ASSIGNED_EMPLOYEE_INDEX+\n" + + "Example: " + COMMAND_WORD + " " + + PREFIX_NAME + "John Doe " + + PREFIX_PHONE + "98765432 " + + PREFIX_EMAIL + "johnd@example.com " + + PREFIX_VEHICLE_NUMBER + "SHG123A " + + PREFIX_ASSIGNED_EMPLOYEE + "3 " + + PREFIX_ASSIGNED_EMPLOYEE + "6 "; + + public static final String MESSAGE_SUCCESS = "New job added: %1$s"; + + private final Job toAdd; + + /** + * Creates an AddJobCommand to add the specified {@code Job} + */ + public AddJobCommand(Job job) { + requireNonNull(job); + toAdd = job; + } + + @Override + public CommandResult executeUndoableCommand() { + requireNonNull(model); + model.addJob(toAdd); + return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd)); + + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof AddJobCommand // instanceof handles nulls + && toAdd.equals(((AddJobCommand) other).toAdd)); + } +} diff --git a/src/main/java/seedu/address/logic/commands/CloseJobCommand.java b/src/main/java/seedu/address/logic/commands/CloseJobCommand.java new file mode 100644 index 000000000000..b31b6366c776 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/CloseJobCommand.java @@ -0,0 +1,7 @@ +package seedu.address.logic.commands; + +/** + * Closes an ongoing job in CarviciM + */ +public class CloseJobCommand { +} diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 6ba0ae6db8f6..13d3f3a2ed7f 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -1,7 +1,6 @@ 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; @@ -19,7 +18,6 @@ import seedu.address.commons.core.index.Index; import seedu.address.commons.util.CollectionUtil; import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Employee; import seedu.address.model.person.Name; @@ -42,7 +40,6 @@ public class EditCommand extends UndoableCommand { + "[" + PREFIX_NAME + "NAME] " + "[" + PREFIX_PHONE + "PHONE] " + "[" + PREFIX_EMAIL + "EMAIL] " - + "[" + PREFIX_ADDRESS + "ADDRESS] " + "[" + PREFIX_TAG + "TAG]...\n" + "Example: " + COMMAND_WORD + " 1 " + PREFIX_PHONE + "91234567 " @@ -105,10 +102,9 @@ private static Employee createEditedPerson(Employee employeeToEdit, EditPersonDe Name updatedName = editPersonDescriptor.getName().orElse(employeeToEdit.getName()); Phone updatedPhone = editPersonDescriptor.getPhone().orElse(employeeToEdit.getPhone()); Email updatedEmail = editPersonDescriptor.getEmail().orElse(employeeToEdit.getEmail()); - Address updatedAddress = editPersonDescriptor.getAddress().orElse(employeeToEdit.getAddress()); Set updatedTags = editPersonDescriptor.getTags().orElse(employeeToEdit.getTags()); - return new Employee(updatedName, updatedPhone, updatedEmail, updatedAddress, updatedTags); + return new Employee(updatedName, updatedPhone, updatedEmail, updatedTags); } @Override @@ -138,7 +134,6 @@ public static class EditPersonDescriptor { private Name name; private Phone phone; private Email email; - private Address address; private Set tags; public EditPersonDescriptor() {} @@ -151,7 +146,6 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { setName(toCopy.name); setPhone(toCopy.phone); setEmail(toCopy.email); - setAddress(toCopy.address); setTags(toCopy.tags); } @@ -159,7 +153,7 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { * Returns true if at least one field is edited. */ public boolean isAnyFieldEdited() { - return CollectionUtil.isAnyNonNull(this.name, this.phone, this.email, this.address, this.tags); + return CollectionUtil.isAnyNonNull(this.name, this.phone, this.email, this.tags); } public void setName(Name name) { @@ -186,14 +180,6 @@ public Optional getEmail() { return Optional.ofNullable(email); } - public void setAddress(Address address) { - this.address = address; - } - - public Optional
getAddress() { - return Optional.ofNullable(address); - } - /** * Sets {@code tags} to this object's {@code tags}. * A defensive copy of {@code tags} is used internally. @@ -229,7 +215,6 @@ public boolean equals(Object other) { return getName().equals(e.getName()) && getPhone().equals(e.getPhone()) && getEmail().equals(e.getEmail()) - && getAddress().equals(e.getAddress()) && getTags().equals(e.getTags()); } } diff --git a/src/main/java/seedu/address/logic/commands/RemarkCommand.java b/src/main/java/seedu/address/logic/commands/RemarkCommand.java new file mode 100644 index 000000000000..377ab1dae8be --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/RemarkCommand.java @@ -0,0 +1,7 @@ +package seedu.address.logic.commands; + +/** + * Adds a remark to a job in CarviciM + */ +public class RemarkCommand { +} diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java index ce204cf898e9..647ce038efd9 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddCommandParser.java @@ -1,7 +1,6 @@ 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.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; @@ -13,7 +12,6 @@ import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.logic.commands.AddCommand; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Employee; import seedu.address.model.person.Name; @@ -32,9 +30,9 @@ 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); + ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_TAG); - if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_EMAIL) + if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL) || !argMultimap.getPreamble().isEmpty()) { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE)); } @@ -43,10 +41,9 @@ public AddCommand parse(String args) throws ParseException { Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME)).get(); Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE)).get(); Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL)).get(); - Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS)).get(); Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); - Employee employee = new Employee(name, phone, email, address, tagList); + Employee employee = new Employee(name, phone, email, tagList); return new AddCommand(employee); } catch (IllegalValueException ive) { diff --git a/src/main/java/seedu/address/logic/parser/AddJobCommandParser.java b/src/main/java/seedu/address/logic/parser/AddJobCommandParser.java new file mode 100644 index 000000000000..c028cf4527c5 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/AddJobCommandParser.java @@ -0,0 +1,45 @@ +package seedu.address.logic.parser; + +import static seedu.address.logic.parser.CliSyntax.PREFIX_ASSIGNED_EMPLOYEE; +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_VEHICLE_NUMBER; + +import java.util.stream.Stream; + +import seedu.address.logic.commands.AddJobCommand; +import seedu.address.logic.parser.exceptions.ParseException; + +//@@author whenzei +/** + * Parses the input arguments and creates a new AddJobCommand object + */ +public class AddJobCommandParser implements Parser { + + /** + * Parses the given {@code String} of arguments in the context of the AddJobCommand + * and returns an AddJobCommand object for execution. + * @throws ParseException if the user input does not conform the expected format + */ + public AddJobCommand parse(String args) throws ParseException { + ArgumentMultimap argMultimap = + ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, + PREFIX_EMAIL, PREFIX_VEHICLE_NUMBER, PREFIX_ASSIGNED_EMPLOYEE); + + if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_PHONE, + PREFIX_EMAIL, PREFIX_VEHICLE_NUMBER, PREFIX_ASSIGNED_EMPLOYEE)) { + } + + //More to be added + return null; //Stub + } + + /** + * 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()); + } +} diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index 0f4188cbed6b..601dcdea5c06 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -7,6 +7,7 @@ import java.util.regex.Pattern; import seedu.address.logic.commands.AddCommand; +import seedu.address.logic.commands.AddJobCommand; import seedu.address.logic.commands.ClearCommand; import seedu.address.logic.commands.Command; import seedu.address.logic.commands.CommandWords; @@ -120,6 +121,9 @@ public Command parseCommand(String userInput) throws ParseException { case SetCommand.COMMAND_WORD: return new SetCommandParser().parse(arguments); + + case AddJobCommand.COMMAND_WORD: + return new AddJobCommandParser().parse(arguments); default: throw new ParseException(MESSAGE_UNKNOWN_COMMAND); } diff --git a/src/main/java/seedu/address/logic/parser/CliSyntax.java b/src/main/java/seedu/address/logic/parser/CliSyntax.java index b19e483c3ac0..de7b5602f539 100644 --- a/src/main/java/seedu/address/logic/parser/CliSyntax.java +++ b/src/main/java/seedu/address/logic/parser/CliSyntax.java @@ -11,5 +11,6 @@ public class CliSyntax { public static final Prefix PREFIX_EMAIL = new Prefix("e/"); public static final Prefix PREFIX_ADDRESS = new Prefix("a/"); public static final Prefix PREFIX_TAG = new Prefix("t/"); - + public static final Prefix PREFIX_VEHICLE_NUMBER = new Prefix("v/"); + public static final Prefix PREFIX_ASSIGNED_EMPLOYEE = new Prefix("w/"); } diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/seedu/address/logic/parser/EditCommandParser.java index c9cdbed26cf1..525ce4b85bd5 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/EditCommandParser.java @@ -2,7 +2,6 @@ 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.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; @@ -33,7 +32,7 @@ public class EditCommandParser implements Parser { 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, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_TAG); Index index; @@ -48,7 +47,6 @@ public EditCommand parse(String args) throws ParseException { ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME)).ifPresent(editPersonDescriptor::setName); ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE)).ifPresent(editPersonDescriptor::setPhone); ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL)).ifPresent(editPersonDescriptor::setEmail); - ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS)).ifPresent(editPersonDescriptor::setAddress); parseTagsForEdit(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(editPersonDescriptor::setTags); } catch (IllegalValueException ive) { throw new ParseException(ive.getMessage(), ive); diff --git a/src/main/java/seedu/address/logic/parser/ParserUtil.java b/src/main/java/seedu/address/logic/parser/ParserUtil.java index 0260010aa2ab..8d0c5b7feb7a 100644 --- a/src/main/java/seedu/address/logic/parser/ParserUtil.java +++ b/src/main/java/seedu/address/logic/parser/ParserUtil.java @@ -10,7 +10,7 @@ import seedu.address.commons.core.index.Index; import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.commons.util.StringUtil; -import seedu.address.model.person.Address; +import seedu.address.model.job.VehicleNumber; import seedu.address.model.person.Email; import seedu.address.model.person.Name; import seedu.address.model.person.Phone; @@ -110,30 +110,6 @@ public static Optional parsePhone(Optional phone) throws IllegalV return phone.isPresent() ? Optional.of(parsePhone(phone.get())) : Optional.empty(); } - /** - * Parses a {@code String address} into an {@code Address}. - * Leading and trailing whitespaces will be trimmed. - * - * @throws IllegalValueException if the given {@code address} is invalid. - */ - public static Address parseAddress(String address) throws IllegalValueException { - requireNonNull(address); - String trimmedAddress = address.trim(); - if (!Address.isValidAddress(trimmedAddress)) { - throw new IllegalValueException(Address.MESSAGE_ADDRESS_CONSTRAINTS); - } - return new Address(trimmedAddress); - } - - /** - * Parses a {@code Optional address} into an {@code Optional
} if {@code address} is present. - * See header comment of this class regarding the use of {@code Optional} parameters. - */ - public static Optional
parseAddress(Optional address) throws IllegalValueException { - requireNonNull(address); - return address.isPresent() ? Optional.of(parseAddress(address.get())) : Optional.empty(); - } - /** * Parses a {@code String email} into an {@code Email}. * Leading and trailing whitespaces will be trimmed. @@ -184,4 +160,33 @@ public static Set parseTags(Collection tags) throws IllegalValueExc } return tagSet; } + + + /** + * Parses a {@code String vehicleNumber} into a {@code VehicleNumber}. + * Leading and trailing whitespaces will be trimmed. + * + * @throws IllegalValueException if the given {@code vehicleNumber} is invalid. + */ + public static VehicleNumber parseVehicleNumber(String vehicleNumber) throws IllegalValueException { + requireNonNull(vehicleNumber); + String trimmedVehicleNumber = vehicleNumber.trim(); + if (!VehicleNumber.isValidVehicleNumber(trimmedVehicleNumber)) { + throw new IllegalValueException(VehicleNumber.MESSAGE_VEHICLE_ID_CONSTRAINTS); + } + return new VehicleNumber(vehicleNumber); + } + + /** + * Parses a {@code Optional vehicleNumber} into an {@code Optional} + * if {@code vehicleNumber} is present. + * + * See header comment of this class regarding the use of {@code Optional} parameters. + */ + public static Optional parseVehicleNumber( + Optional vehicleNumber) throws IllegalValueException { + + requireNonNull(vehicleNumber); + return vehicleNumber.isPresent() ? Optional.of(parseVehicleNumber(vehicleNumber.get())) : Optional.empty(); + } } diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 1dac5d847fd3..eb23d17402d7 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -12,6 +12,8 @@ import java.util.stream.Collectors; import javafx.collections.ObservableList; +import seedu.address.model.job.Job; +import seedu.address.model.job.JobList; import seedu.address.model.person.Employee; import seedu.address.model.person.UniqueEmployeeList; import seedu.address.model.person.exceptions.DuplicateEmployeeException; @@ -27,6 +29,7 @@ public class AddressBook implements ReadOnlyAddressBook { private final UniqueEmployeeList employees; private final UniqueTagList tags; + private final JobList jobs; /* * The 'unusual' code block below is an non-static initialization block, sometimes used to avoid duplication @@ -38,6 +41,7 @@ public class AddressBook implements ReadOnlyAddressBook { { employees = new UniqueEmployeeList(); tags = new UniqueTagList(); + jobs = new JobList(); } public AddressBook() {} @@ -56,6 +60,10 @@ public void setEmployees(List employees) throws DuplicateEmployeeExcep this.employees.setEmployees(employees); } + public void setJobs(List jobs) { + this.jobs.setJobs(jobs); + } + public void setTags(Set tags) { this.tags.setTags(tags); } @@ -77,6 +85,16 @@ public void resetData(ReadOnlyAddressBook newData) { } } + //// job-level operations + + //@@author whenzei + /** + * Adds a job to CarviciM. + */ + public void addJob(Job job) { + jobs.add(job); + } + //// employee-level operations /** @@ -133,7 +151,7 @@ private Employee syncWithMasterTagList(Employee employee) { final Set correctTagReferences = new HashSet<>(); employeeTags.forEach(tag -> correctTagReferences.add(masterTagObjects.get(tag))); return new Employee(employee.getName(), employee.getPhone(), employee.getEmail(), - employee.getAddress(), correctTagReferences); + correctTagReferences); } /** @@ -182,6 +200,11 @@ public ObservableList getEmployeeList() { return employees.asObservableList(); } + @Override + public ObservableList getJobList() { + return jobs.asObservableList(); + } + @Override public ObservableList getTagList() { return tags.asObservableList(); diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 4be9ee16beb2..a5b514167c5a 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -4,6 +4,8 @@ import javafx.collections.ObservableList; import seedu.address.logic.commands.CommandWords; +import seedu.address.model.job.Job; +import seedu.address.model.job.exceptions.JobNotFoundException; import seedu.address.model.person.Employee; import seedu.address.model.person.exceptions.DuplicateEmployeeException; import seedu.address.model.person.exceptions.EmployeeNotFoundException; @@ -28,6 +30,12 @@ public interface Model { /** Returns the AddressBook */ ReadOnlyAddressBook getAddressBook(); + /** Adds the given job */ + void addJob(Job job); + + /** Closes the given job */ + void closeJob(Job target) throws JobNotFoundException; + /** Deletes the given employee. */ void deletePerson(Employee target) throws EmployeeNotFoundException; @@ -55,4 +63,13 @@ void updatePerson(Employee target, Employee editedEmployee) * @throws NullPointerException if {@code predicate} is null. */ void updateFilteredPersonList(Predicate predicate); + + /** Returns an unmodifiable view of the filtered job list */ + ObservableList getFilteredJobList(); + + /** + * Updates the filter of the filtered job list to filter by the given {@code predicate}. + * @throws NullPointerException if {@code predicate} is null. + */ + void updateFilteredJobList(Predicate predicate); } diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 51c256b90197..a28ba0b89cdc 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -13,6 +13,8 @@ import seedu.address.commons.core.LogsCenter; import seedu.address.commons.events.model.AddressBookChangedEvent; import seedu.address.logic.commands.CommandWords; +import seedu.address.model.job.Job; +import seedu.address.model.job.exceptions.JobNotFoundException; import seedu.address.model.person.Employee; import seedu.address.model.person.exceptions.DuplicateEmployeeException; import seedu.address.model.person.exceptions.EmployeeNotFoundException; @@ -26,6 +28,7 @@ public class ModelManager extends ComponentManager implements Model { private final AddressBook addressBook; private final FilteredList filteredEmployees; + private final FilteredList filteredJobs; private final CommandWords commandWords; /** @@ -39,6 +42,7 @@ public ModelManager(ReadOnlyAddressBook addressBook, UserPrefs userPrefs) { this.addressBook = new AddressBook(addressBook); filteredEmployees = new FilteredList<>(this.addressBook.getEmployeeList()); + filteredJobs = new FilteredList<>(this.addressBook.getJobList()); this.commandWords = userPrefs.getCommandWords(); } @@ -76,6 +80,14 @@ private void indicateAddressBookChanged() { raise(new AddressBookChangedEvent(addressBook)); } + @Override + public synchronized void addJob(Job job) { + } + + @Override + public synchronized void closeJob(Job target) throws JobNotFoundException { + } + @Override public synchronized void deletePerson(Employee target) throws EmployeeNotFoundException { addressBook.removeEmployee(target); @@ -121,6 +133,23 @@ public void updateFilteredPersonList(Predicate predicate) { filteredEmployees.setPredicate(predicate); } + //=========== Filtered Job List Accessors ============================================================= + + /** + * Returns an unmodifiable view of the list of {@code Job} backed by the internal list of + * {@code addressBook} + */ + @Override + public ObservableList getFilteredJobList() { + return FXCollections.unmodifiableObservableList(filteredJobs); + } + + @Override + public void updateFilteredJobList(Predicate predicate) { + requireNonNull(predicate); + filteredJobs.setPredicate(predicate); + } + @Override public boolean equals(Object obj) { // short circuit if same object @@ -137,6 +166,7 @@ public boolean equals(Object obj) { ModelManager other = (ModelManager) obj; return addressBook.equals(other.addressBook) && filteredEmployees.equals(other.filteredEmployees) + && filteredJobs.equals(other.filteredJobs) && commandWords.equals(other.getCommandWords()); } diff --git a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java index 48de775b5b9e..2813ed6cc38b 100644 --- a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java +++ b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java @@ -1,6 +1,7 @@ package seedu.address.model; import javafx.collections.ObservableList; +import seedu.address.model.job.Job; import seedu.address.model.person.Employee; import seedu.address.model.tag.Tag; @@ -21,4 +22,8 @@ public interface ReadOnlyAddressBook { */ ObservableList getTagList(); + /** + * Returns an unmodifiable view of the jobs list. + */ + ObservableList getJobList(); } diff --git a/src/main/java/seedu/address/model/job/Date.java b/src/main/java/seedu/address/model/job/Date.java index 811928e0ba56..10c6f04e4415 100644 --- a/src/main/java/seedu/address/model/job/Date.java +++ b/src/main/java/seedu/address/model/job/Date.java @@ -3,6 +3,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; +//@@author whenzei /** * Represent the date of job creation in the servicing manager */ diff --git a/src/main/java/seedu/address/model/job/Job.java b/src/main/java/seedu/address/model/job/Job.java index 3b409d6dee93..3d7b52a2bd12 100644 --- a/src/main/java/seedu/address/model/job/Job.java +++ b/src/main/java/seedu/address/model/job/Job.java @@ -12,12 +12,12 @@ import seedu.address.model.remark.Remark; import seedu.address.model.remark.RemarkList; -//@author owzhenwei +//@@author whenzei /** * Represents a Job in the car servicing manager */ public class Job { - private final Person customer; + private final Person client; private final VehicleNumber vehicleNumber; private final JobNumber jobNumber; private final Date date; @@ -26,11 +26,11 @@ public class Job { private final UniqueEmployeeList assignedEmployees; private final RemarkList remarks; - public Job(Person customer, VehicleNumber vehicleNumber, JobNumber jobNumber, + public Job(Person client, VehicleNumber vehicleNumber, JobNumber jobNumber, Date date, UniqueEmployeeList assignedEmployees, Status status, RemarkList remarks) { - requireAllNonNull(customer, vehicleNumber, jobNumber, date, assignedEmployees, status); - this.customer = customer; + requireAllNonNull(client, vehicleNumber, jobNumber, date, assignedEmployees, status); + this.client = client; this.vehicleNumber = vehicleNumber; this.jobNumber = jobNumber; this.date = date; @@ -47,8 +47,8 @@ public VehicleNumber getVehicleNumber() { return vehicleNumber; } - public Person getCustomer() { - return customer; + public Person getClient() { + return client; } public Date getDate() { @@ -88,7 +88,7 @@ public boolean equals(Object other) { } Job otherJob = (Job) other; - return otherJob.getCustomer().equals(this.getCustomer()) + return otherJob.getClient().equals(this.getClient()) && otherJob.getVehicleNumber().equals(this.getVehicleNumber()) && otherJob.getJobNumber().equals(this.getJobNumber()) && otherJob.getDate().equals(this.getDate()) @@ -99,7 +99,7 @@ public boolean equals(Object other) { @Override public int hashCode() { - return Objects.hash(customer, vehicleNumber, jobNumber, date, + return Objects.hash(client, vehicleNumber, jobNumber, date, assignedEmployees, status, remarks); } @@ -114,8 +114,8 @@ public String toString() { .append(getDate()) .append(" Vehicle ID: ") .append(getVehicleNumber()) - .append(" Customer: ") - .append(getCustomer()) + .append(" Client: ") + .append(getClient()) .append(" Remarks: "); getRemarks().forEach(builder::append); builder.append(" Assigned Employees: "); diff --git a/src/main/java/seedu/address/model/job/JobList.java b/src/main/java/seedu/address/model/job/JobList.java index 24d035e02965..0bdbaae0da8b 100644 --- a/src/main/java/seedu/address/model/job/JobList.java +++ b/src/main/java/seedu/address/model/job/JobList.java @@ -1,13 +1,16 @@ package seedu.address.model.job; import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; import java.util.Iterator; +import java.util.List; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import seedu.address.model.job.exceptions.JobNotFoundException; +//@@author whenzei /** * A list of jobs that does not allow nulls */ @@ -23,6 +26,19 @@ public boolean contains(Job toCheck) { return internalList.contains(toCheck); } + public void setJobs(JobList replacement) { + this.internalList.setAll(replacement.internalList); + } + + public void setJobs(List jobs) { + requireAllNonNull(jobs); + final JobList replacement = new JobList(); + for (final Job job : jobs) { + replacement.add(job); + } + setJobs(replacement); + } + /** * Adds a job to the list * @@ -43,6 +59,13 @@ public boolean remove(Job toRemove) throws JobNotFoundException { return jobFoundAndDeleted; } + /** + * Returns the backing list as an unmodifiable {@code ObservableList}. + */ + public ObservableList asObservableList() { + return FXCollections.unmodifiableObservableList(internalList); + } + @Override public Iterator iterator() { return internalList.iterator(); diff --git a/src/main/java/seedu/address/model/job/JobNumber.java b/src/main/java/seedu/address/model/job/JobNumber.java index e89df8b5920b..6659336d5559 100644 --- a/src/main/java/seedu/address/model/job/JobNumber.java +++ b/src/main/java/seedu/address/model/job/JobNumber.java @@ -1,6 +1,6 @@ package seedu.address.model.job; -//@author owzhenwei +//@@author whenzei /** * Represent a job number in the servicing manager */ diff --git a/src/main/java/seedu/address/model/job/Status.java b/src/main/java/seedu/address/model/job/Status.java index 2b991c1630e5..bccc34d7702f 100644 --- a/src/main/java/seedu/address/model/job/Status.java +++ b/src/main/java/seedu/address/model/job/Status.java @@ -1,5 +1,6 @@ package seedu.address.model.job; +//@@author whenzei /** * Represents the status of a car servicing job */ diff --git a/src/main/java/seedu/address/model/job/VehicleNumber.java b/src/main/java/seedu/address/model/job/VehicleNumber.java index 5780717b58f9..9b54b95d5f95 100644 --- a/src/main/java/seedu/address/model/job/VehicleNumber.java +++ b/src/main/java/seedu/address/model/job/VehicleNumber.java @@ -3,7 +3,7 @@ import static java.util.Objects.requireNonNull; import static seedu.address.commons.util.AppUtil.checkArgument; -//@author owzhenwei +//@@author whenzei /** * Represents a Vehicle ID in the Job */ diff --git a/src/main/java/seedu/address/model/person/Employee.java b/src/main/java/seedu/address/model/person/Employee.java index 65cf63de0b22..6585c25723a7 100644 --- a/src/main/java/seedu/address/model/person/Employee.java +++ b/src/main/java/seedu/address/model/person/Employee.java @@ -20,9 +20,9 @@ public class Employee extends Person { /** * Every field must be present and not null. */ - public Employee(Name name, Phone phone, Email email, Address address, Set tags) { - super(name, phone, email, address); - requireAllNonNull(name, phone, email, address, tags); + public Employee(Name name, Phone phone, Email email, Set tags) { + super(name, phone, email); + requireAllNonNull(name, phone, email, tags); // protect internal tags from changes in the arg list this.tags = new UniqueTagList(tags); } @@ -48,14 +48,13 @@ public boolean equals(Object other) { Employee otherEmployee = (Employee) other; return otherEmployee.getName().equals(this.getName()) && otherEmployee.getPhone().equals(this.getPhone()) - && otherEmployee.getEmail().equals(this.getEmail()) - && otherEmployee.getAddress().equals(this.getAddress()); + && otherEmployee.getEmail().equals(this.getEmail()); } @Override public int hashCode() { // use this method for custom fields hashing instead of implementing your own - return Objects.hash(name, phone, email, address, tags); + return Objects.hash(name, phone, email, tags); } @Override @@ -66,8 +65,6 @@ public String toString() { .append(getPhone()) .append(" Email: ") .append(getEmail()) - .append(" Address: ") - .append(getAddress()) .append(" Tags: "); getTags().forEach(builder::append); return builder.toString(); diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index 85872fab3150..776e96f4abbd 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -11,17 +11,15 @@ public class Person { protected final Name name; protected final Phone phone; protected final Email email; - protected final Address address; /** * Every field must be present and not null. */ - public Person(Name name, Phone phone, Email email, Address address) { - requireAllNonNull(name, phone, email, address); + public Person(Name name, Phone phone, Email email) { + requireAllNonNull(name, phone, email); this.name = name; this.phone = phone; this.email = email; - this.address = address; } public Name getName() { @@ -36,9 +34,6 @@ public Email getEmail() { return email; } - public Address getAddress() { - return address; - } @Override public boolean equals(Object other) { @@ -53,14 +48,13 @@ public boolean equals(Object other) { Person otherPerson = (Person) other; return otherPerson.getName().equals(this.getName()) && otherPerson.getPhone().equals(this.getPhone()) - && otherPerson.getEmail().equals(this.getEmail()) - && otherPerson.getAddress().equals(this.getAddress()); + && otherPerson.getEmail().equals(this.getEmail()); } @Override public int hashCode() { // use this method for custom fields hashing instead of implementing your own - return Objects.hash(name, phone, email, address); + return Objects.hash(name, phone, email); } @Override @@ -70,9 +64,7 @@ public String toString() { .append(" Phone: ") .append(getPhone()) .append(" Email: ") - .append(getEmail()) - .append(" Address: ") - .append(getAddress()); + .append(getEmail()); return builder.toString(); } } diff --git a/src/main/java/seedu/address/model/remark/Remark.java b/src/main/java/seedu/address/model/remark/Remark.java index 0042a66b1429..bb130d99951a 100644 --- a/src/main/java/seedu/address/model/remark/Remark.java +++ b/src/main/java/seedu/address/model/remark/Remark.java @@ -3,6 +3,7 @@ import static java.util.Objects.requireNonNull; import static seedu.address.commons.util.AppUtil.checkArgument; +//@@author whenzei /** * Represents a remark for a job in the car servicing manager */ @@ -18,7 +19,7 @@ public class Remark { public final String value; /** - * Constructs an {@code Address}. + * Constructs a {@code Remark}. * * @param remark A valid remark. */ diff --git a/src/main/java/seedu/address/model/remark/RemarkList.java b/src/main/java/seedu/address/model/remark/RemarkList.java index c2e263fbb6ae..1264ae78cd20 100644 --- a/src/main/java/seedu/address/model/remark/RemarkList.java +++ b/src/main/java/seedu/address/model/remark/RemarkList.java @@ -9,6 +9,7 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; +//@@author whenzei /** * Represents a list of remarks that enforces no nulls */ diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java index 63c10efaffac..0db10472d555 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -5,7 +5,6 @@ import seedu.address.model.AddressBook; import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Employee; import seedu.address.model.person.Name; @@ -20,22 +19,16 @@ public class SampleDataUtil { public static Employee[] getSamplePersons() { return new Employee[] { new Employee(new Name("Alex Yeoh"), new Phone("87438807"), new Email("alexyeoh@example.com"), - new Address("Blk 30 Geylang Street 29, #06-40"), getTagSet("friends")), new Employee(new Name("Bernice Yu"), new Phone("99272758"), new Email("berniceyu@example.com"), - new Address("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), getTagSet("colleagues", "friends")), new Employee(new Name("Charlotte Oliveiro"), new Phone("93210283"), new Email("charlotte@example.com"), - new Address("Blk 11 Ang Mo Kio Street 74, #11-04"), getTagSet("neighbours")), new Employee(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"), - new Address("Blk 436 Serangoon Gardens Street 26, #16-43"), getTagSet("family")), new Employee(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"), - new Address("Blk 47 Tampines Street 20, #17-35"), getTagSet("classmates")), new Employee(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"), - new Address("Blk 45 Aljunied Street 85, #11-31"), getTagSet("colleagues")) }; } diff --git a/src/main/java/seedu/address/storage/XmlAdaptedEmployee.java b/src/main/java/seedu/address/storage/XmlAdaptedEmployee.java index e5c63fbcb8cd..0c13a5c99135 100644 --- a/src/main/java/seedu/address/storage/XmlAdaptedEmployee.java +++ b/src/main/java/seedu/address/storage/XmlAdaptedEmployee.java @@ -9,7 +9,6 @@ import javax.xml.bind.annotation.XmlElement; import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Employee; import seedu.address.model.person.Name; @@ -29,8 +28,6 @@ public class XmlAdaptedEmployee { private String phone; @XmlElement(required = true) private String email; - @XmlElement(required = true) - private String address; @XmlElement private List tagged = new ArrayList<>(); @@ -44,11 +41,10 @@ public XmlAdaptedEmployee() {} /** * Constructs an {@code XmlAdaptedEmployee} with the given employee details. */ - public XmlAdaptedEmployee(String name, String phone, String email, String address, List tagged) { + public XmlAdaptedEmployee(String name, String phone, String email, List tagged) { this.name = name; this.phone = phone; this.email = email; - this.address = address; if (tagged != null) { this.tagged = new ArrayList<>(tagged); } @@ -63,7 +59,6 @@ public XmlAdaptedEmployee(Employee source) { name = source.getName().fullName; phone = source.getPhone().value; email = source.getEmail().value; - address = source.getAddress().value; tagged = new ArrayList<>(); for (Tag tag : source.getTags()) { tagged.add(new XmlAdaptedTag(tag)); @@ -105,16 +100,8 @@ public Employee toModelType() throws IllegalValueException { } final Email email = new Email(this.email); - if (this.address == null) { - throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName())); - } - if (!Address.isValidAddress(this.address)) { - throw new IllegalValueException(Address.MESSAGE_ADDRESS_CONSTRAINTS); - } - final Address address = new Address(this.address); - final Set tags = new HashSet<>(personTags); - return new Employee(name, phone, email, address, tags); + return new Employee(name, phone, email, tags); } @Override @@ -131,7 +118,6 @@ public boolean equals(Object other) { return Objects.equals(name, otherPerson.name) && Objects.equals(phone, otherPerson.phone) && Objects.equals(email, otherPerson.email) - && Objects.equals(address, otherPerson.address) && tagged.equals(otherPerson.tagged); } } diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index 39af57073444..b3f429a4c94c 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -33,8 +33,6 @@ public class PersonCard extends UiPart { @FXML private Label phone; @FXML - private Label address; - @FXML private Label email; @FXML private FlowPane tags; @@ -45,7 +43,6 @@ public PersonCard(Employee employee, int displayedIndex) { id.setText(displayedIndex + ". "); name.setText(employee.getName().fullName); phone.setText(employee.getPhone().value); - address.setText(employee.getAddress().value); email.setText(employee.getEmail().value); employee.getTags().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 f08ea32ad558..caabf9f89c8c 100644 --- a/src/main/resources/view/PersonListCard.fxml +++ b/src/main/resources/view/PersonListCard.fxml @@ -7,30 +7,33 @@ + - + - + - + - + + + diff --git a/src/test/java/guitests/guihandles/PersonCardHandle.java b/src/test/java/guitests/guihandles/PersonCardHandle.java index 490bc6a004f9..000d28d40e2d 100644 --- a/src/test/java/guitests/guihandles/PersonCardHandle.java +++ b/src/test/java/guitests/guihandles/PersonCardHandle.java @@ -13,14 +13,12 @@ public class PersonCardHandle extends NodeHandle { private static final String ID_FIELD_ID = "#id"; private static final String NAME_FIELD_ID = "#name"; - private static final String ADDRESS_FIELD_ID = "#address"; private static final String PHONE_FIELD_ID = "#phone"; private static final String EMAIL_FIELD_ID = "#email"; private static final String TAGS_FIELD_ID = "#tags"; private final Label idLabel; private final Label nameLabel; - private final Label addressLabel; private final Label phoneLabel; private final Label emailLabel; private final List