From b2f552df6ab53eae659a38e8c4c521ad56371248 Mon Sep 17 00:00:00 2001 From: qwlai Date: Wed, 7 Feb 2018 00:17:18 +0800 Subject: [PATCH 1/2] Modified String[] to HashMap to store a person's details --- src/seedu/addressbook/AddressBook.java | 119 +++++++++++++------------ 1 file changed, 60 insertions(+), 59 deletions(-) diff --git a/src/seedu/addressbook/AddressBook.java b/src/seedu/addressbook/AddressBook.java index 5a158b67..cfb8d284 100644 --- a/src/seedu/addressbook/AddressBook.java +++ b/src/seedu/addressbook/AddressBook.java @@ -18,6 +18,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.Optional; import java.util.Scanner; @@ -136,14 +137,14 @@ public class AddressBook { private static final String DIVIDER = "==================================================="; - /* We use a String array to store details of a single person. + /* We use a HashMap to store details of a single person. * The constants given below are the indexes for the different data elements of a person - * used by the internal String[] storage format. - * For example, a person's name is stored as the 0th element in the array. + * used by the internal HashMap storage format. + * For example, a person's name is stored as the PERSON_PROPERTY_NAME in the HashMap. */ - private static final int PERSON_DATA_INDEX_NAME = 0; - private static final int PERSON_DATA_INDEX_PHONE = 1; - private static final int PERSON_DATA_INDEX_EMAIL = 2; + private static final String PERSON_PROPERTY_NAME = "name"; + private static final String PERSON_PROPERTY_PHONE = "phone"; + private static final String PERSON_PROPERTY_EMAIL = "email"; /** * The number of data elements for a single person. @@ -170,8 +171,8 @@ public class AddressBook { /* * NOTE : ============================================================================================= - * Note that the type of the variable below can also be declared as List, as follows: - * private static final List ALL_PERSONS = new ArrayList<>() + * Note that the type of the variable below can also be declared as List>, as follows: + * private static final List ALL_PERSONS = new ArrayList<>() * That is because List is an interface implemented by the ArrayList class. * In this code we use ArrayList instead because we wanted to to stay away from advanced concepts * such as interface inheritance. @@ -181,14 +182,14 @@ public class AddressBook { /** * List of all persons in the address book. */ - private static final ArrayList ALL_PERSONS = new ArrayList<>(); + private static final ArrayList> ALL_PERSONS = new ArrayList<>(); /** * Stores the most recent list of persons shown to the user as a result of a user command. * This is a subset of the full list. Deleting persons in the pull list does not delete * those persons from this list. */ - private static ArrayList latestPersonListingView = getAllPersonsInAddressBook(); // initial view is of all + private static ArrayList> latestPersonListingView = getAllPersonsInAddressBook(); // initial view is of all /** * The path to the file used for storing person data. @@ -417,7 +418,7 @@ private static String getMessageForInvalidCommandInput(String userCommand, Strin */ private static String executeAddPerson(String commandArgs) { // try decoding a person from the raw args - final Optional decodeResult = decodePersonFromString(commandArgs); + final Optional> decodeResult = decodePersonFromString(commandArgs); // checks if args are valid (decode result will not be present if the person is invalid) if (!decodeResult.isPresent()) { @@ -425,7 +426,7 @@ private static String executeAddPerson(String commandArgs) { } // add the person as specified - final String[] personToAdd = decodeResult.get(); + final HashMap personToAdd = decodeResult.get(); addPersonToAddressBook(personToAdd); return getMessageForSuccessfulAddPerson(personToAdd); } @@ -437,7 +438,7 @@ private static String executeAddPerson(String commandArgs) { * @param addedPerson person who was successfully added * @return successful add person feedback message */ - private static String getMessageForSuccessfulAddPerson(String[] addedPerson) { + private static String getMessageForSuccessfulAddPerson(HashMap addedPerson) { return String.format(MESSAGE_ADDED, getNameFromPerson(addedPerson), getPhoneFromPerson(addedPerson), getEmailFromPerson(addedPerson)); } @@ -451,7 +452,7 @@ private static String getMessageForSuccessfulAddPerson(String[] addedPerson) { */ private static String executeFindPersons(String commandArgs) { final Set keywords = extractKeywordsFromFindPersonArgs(commandArgs); - final ArrayList personsFound = getPersonsWithNameContainingAnyKeyword(keywords); + final ArrayList> personsFound = getPersonsWithNameContainingAnyKeyword(keywords); showToUser(personsFound); return getMessageForPersonsDisplayedSummary(personsFound); } @@ -462,7 +463,7 @@ private static String executeFindPersons(String commandArgs) { * @param personsDisplayed used to generate summary * @return summary message for persons displayed */ - private static String getMessageForPersonsDisplayedSummary(ArrayList personsDisplayed) { + private static String getMessageForPersonsDisplayedSummary(ArrayList> personsDisplayed) { return String.format(MESSAGE_PERSONS_FOUND_OVERVIEW, personsDisplayed.size()); } @@ -482,9 +483,9 @@ private static Set extractKeywordsFromFindPersonArgs(String findPersonCo * @param keywords for searching * @return list of persons in full model with name containing some of the keywords */ - private static ArrayList getPersonsWithNameContainingAnyKeyword(Collection keywords) { - final ArrayList matchedPersons = new ArrayList<>(); - for (String[] person : getAllPersonsInAddressBook()) { + private static ArrayList> getPersonsWithNameContainingAnyKeyword(Collection keywords) { + final ArrayList> matchedPersons = new ArrayList<>(); + for (HashMap person : getAllPersonsInAddressBook()) { final Set wordsInName = new HashSet<>(splitByWhitespace(getNameFromPerson(person))); if (!Collections.disjoint(wordsInName, keywords)) { matchedPersons.add(person); @@ -507,7 +508,7 @@ private static String executeDeletePerson(String commandArgs) { if (!isDisplayIndexValidForLastPersonListingView(targetVisibleIndex)) { return MESSAGE_INVALID_PERSON_DISPLAYED_INDEX; } - final String[] targetInModel = getPersonByLastVisibleIndex(targetVisibleIndex); + final HashMap targetInModel = getPersonByLastVisibleIndex(targetVisibleIndex); return deletePersonFromAddressBook(targetInModel) ? getMessageForSuccessfulDelete(targetInModel) // success : MESSAGE_PERSON_NOT_IN_ADDRESSBOOK; // not found } @@ -554,7 +555,7 @@ private static boolean isDisplayIndexValidForLastPersonListingView(int index) { * @param deletedPerson successfully deleted * @return successful delete person feedback message */ - private static String getMessageForSuccessfulDelete(String[] deletedPerson) { + private static String getMessageForSuccessfulDelete(HashMap deletedPerson) { return String.format(MESSAGE_DELETE_PERSON_SUCCESS, getMessageForFormattedPersonData(deletedPerson)); } @@ -574,7 +575,7 @@ private static String executeClearAddressBook() { * @return feedback display message for the operation result */ private static String executeListAllPersonsInAddressBook() { - ArrayList toBeDisplayed = getAllPersonsInAddressBook(); + ArrayList> toBeDisplayed = getAllPersonsInAddressBook(); showToUser(toBeDisplayed); return getMessageForPersonsDisplayedSummary(toBeDisplayed); } @@ -629,7 +630,7 @@ private static void showToUser(String... message) { * The list will be indexed, starting from 1. * */ - private static void showToUser(ArrayList persons) { + private static void showToUser(ArrayList> persons) { String listAsString = getDisplayString(persons); showToUser(listAsString); updateLatestViewedPersonListing(persons); @@ -638,10 +639,10 @@ private static void showToUser(ArrayList persons) { /** * Returns the display string representation of the list of persons. */ - private static String getDisplayString(ArrayList persons) { + private static String getDisplayString(ArrayList> persons) { final StringBuilder messageAccumulator = new StringBuilder(); for (int i = 0; i < persons.size(); i++) { - final String[] person = persons.get(i); + final HashMap person = persons.get(i); final int displayIndex = i + DISPLAYED_INDEX_OFFSET; messageAccumulator.append('\t') .append(getIndexedPersonListElementMessage(displayIndex, person)) @@ -657,7 +658,7 @@ private static String getDisplayString(ArrayList persons) { * @param person to show * @return formatted listing message with index */ - private static String getIndexedPersonListElementMessage(int visibleIndex, String[] person) { + private static String getIndexedPersonListElementMessage(int visibleIndex, HashMap person) { return String.format(MESSAGE_DISPLAY_LIST_ELEMENT_INDEX, visibleIndex) + getMessageForFormattedPersonData(person); } @@ -667,7 +668,7 @@ private static String getIndexedPersonListElementMessage(int visibleIndex, Strin * @param person to show * @return formatted message showing internal state */ - private static String getMessageForFormattedPersonData(String[] person) { + private static String getMessageForFormattedPersonData(HashMap person) { return String.format(MESSAGE_DISPLAY_PERSON_DATA, getNameFromPerson(person), getPhoneFromPerson(person), getEmailFromPerson(person)); } @@ -677,7 +678,7 @@ private static String getMessageForFormattedPersonData(String[] person) { * * @param newListing the new listing of persons */ - private static void updateLatestViewedPersonListing(ArrayList newListing) { + private static void updateLatestViewedPersonListing(ArrayList> newListing) { // clone to insulate from future changes to arg list latestPersonListingView = new ArrayList<>(newListing); } @@ -688,7 +689,7 @@ private static void updateLatestViewedPersonListing(ArrayList newListi * @param lastVisibleIndex displayed index from last shown person listing * @return the actual person object in the last shown person listing */ - private static String[] getPersonByLastVisibleIndex(int lastVisibleIndex) { + private static HashMap getPersonByLastVisibleIndex(int lastVisibleIndex) { return latestPersonListingView.get(lastVisibleIndex - DISPLAYED_INDEX_OFFSET); } @@ -728,8 +729,8 @@ private static void createFileIfMissing(String filePath) { * @param filePath file to load from * @return the list of decoded persons */ - private static ArrayList loadPersonsFromFile(String filePath) { - final Optional> successfullyDecoded = decodePersonsFromStrings(getLinesInFile(filePath)); + private static ArrayList> loadPersonsFromFile(String filePath) { + final Optional>> successfullyDecoded = decodePersonsFromStrings(getLinesInFile(filePath)); if (!successfullyDecoded.isPresent()) { showToUser(MESSAGE_INVALID_STORAGE_FILE_CONTENT); exitProgram(); @@ -760,7 +761,7 @@ private static ArrayList getLinesInFile(String filePath) { * * @param filePath file for saving */ - private static void savePersonsToFile(ArrayList persons, String filePath) { + private static void savePersonsToFile(ArrayList> persons, String filePath) { final ArrayList linesToWrite = encodePersonsToStrings(persons); try { Files.write(Paths.get(storageFilePath), linesToWrite); @@ -782,7 +783,7 @@ private static void savePersonsToFile(ArrayList persons, String filePa * * @param person to add */ - private static void addPersonToAddressBook(String[] person) { + private static void addPersonToAddressBook(HashMap person) { ALL_PERSONS.add(person); savePersonsToFile(getAllPersonsInAddressBook(), storageFilePath); } @@ -793,7 +794,7 @@ private static void addPersonToAddressBook(String[] person) { * @param exactPerson the actual person inside the address book (exactPerson == the person to delete in the full list) * @return true if the given person was found and deleted in the model */ - private static boolean deletePersonFromAddressBook(String[] exactPerson) { + private static boolean deletePersonFromAddressBook(HashMap exactPerson) { final boolean changed = ALL_PERSONS.remove(exactPerson); if (changed) { savePersonsToFile(getAllPersonsInAddressBook(), storageFilePath); @@ -804,7 +805,7 @@ private static boolean deletePersonFromAddressBook(String[] exactPerson) { /** * Returns all persons in the address book */ - private static ArrayList getAllPersonsInAddressBook() { + private static ArrayList> getAllPersonsInAddressBook() { return ALL_PERSONS; } @@ -821,7 +822,7 @@ private static void clearAddressBook() { * * @param persons list of persons to initialise the model with */ - private static void initialiseAddressBookModel(ArrayList persons) { + private static void initialiseAddressBookModel(ArrayList> persons) { ALL_PERSONS.clear(); ALL_PERSONS.addAll(persons); } @@ -838,8 +839,8 @@ private static void initialiseAddressBookModel(ArrayList persons) { * * @param person whose name you want */ - private static String getNameFromPerson(String[] person) { - return person[PERSON_DATA_INDEX_NAME]; + private static String getNameFromPerson(HashMap person) { + return person.get(PERSON_PROPERTY_NAME); } /** @@ -847,8 +848,8 @@ private static String getNameFromPerson(String[] person) { * * @param person whose phone number you want */ - private static String getPhoneFromPerson(String[] person) { - return person[PERSON_DATA_INDEX_PHONE]; + private static String getPhoneFromPerson(HashMap person) { + return person.get(PERSON_PROPERTY_PHONE); } /** @@ -856,8 +857,8 @@ private static String getPhoneFromPerson(String[] person) { * * @param person whose email you want */ - private static String getEmailFromPerson(String[] person) { - return person[PERSON_DATA_INDEX_EMAIL]; + private static String getEmailFromPerson(HashMap person) { + return person.get(PERSON_PROPERTY_EMAIL); } /** @@ -868,11 +869,11 @@ private static String getEmailFromPerson(String[] person) { * @param email without data prefix * @return constructed person */ - private static String[] makePersonFromData(String name, String phone, String email) { - final String[] person = new String[PERSON_DATA_COUNT]; - person[PERSON_DATA_INDEX_NAME] = name; - person[PERSON_DATA_INDEX_PHONE] = phone; - person[PERSON_DATA_INDEX_EMAIL] = email; + private static HashMap makePersonFromData(String name, String phone, String email) { + final HashMap person = new HashMap<>(); + person.put(PERSON_PROPERTY_NAME, name); + person.put(PERSON_PROPERTY_PHONE, phone); + person.put(PERSON_PROPERTY_EMAIL, email); return person; } @@ -882,7 +883,7 @@ private static String[] makePersonFromData(String name, String phone, String ema * @param person to be encoded * @return encoded string */ - private static String encodePersonToString(String[] person) { + private static String encodePersonToString(HashMap person) { return String.format(PERSON_STRING_REPRESENTATION, getNameFromPerson(person), getPhoneFromPerson(person), getEmailFromPerson(person)); } @@ -893,9 +894,9 @@ private static String encodePersonToString(String[] person) { * @param persons to be encoded * @return encoded strings */ - private static ArrayList encodePersonsToStrings(ArrayList persons) { + private static ArrayList encodePersonsToStrings(ArrayList> persons) { final ArrayList encoded = new ArrayList<>(); - for (String[] person : persons) { + for (HashMap person : persons) { encoded.add(encodePersonToString(person)); } return encoded; @@ -915,12 +916,12 @@ private static ArrayList encodePersonsToStrings(ArrayList pers * @return if cannot decode: empty Optional * else: Optional containing decoded person */ - private static Optional decodePersonFromString(String encoded) { + private static Optional> decodePersonFromString(String encoded) { // check that we can extract the parts of a person from the encoded string if (!isPersonDataExtractableFrom(encoded)) { return Optional.empty(); } - final String[] decodedPerson = makePersonFromData( + final HashMap decodedPerson = makePersonFromData( extractNameFromPersonString(encoded), extractPhoneFromPersonString(encoded), extractEmailFromPersonString(encoded) @@ -936,10 +937,10 @@ private static Optional decodePersonFromString(String encoded) { * @return if cannot decode any: empty Optional * else: Optional containing decoded persons */ - private static Optional> decodePersonsFromStrings(ArrayList encodedPersons) { - final ArrayList decodedPersons = new ArrayList<>(); + private static Optional>> decodePersonsFromStrings(ArrayList encodedPersons) { + final ArrayList> decodedPersons = new ArrayList<>(); for (String encodedPerson : encodedPersons) { - final Optional decodedPerson = decodePersonFromString(encodedPerson); + final Optional> decodedPerson = decodePersonFromString(encodedPerson); if (!decodedPerson.isPresent()) { return Optional.empty(); } @@ -1026,12 +1027,12 @@ private static String extractEmailFromPersonString(String encoded) { /** * Returns true if the given person's data fields are valid * - * @param person String array representing the person (used in internal data) + * @param person HashMap representing the person (used in internal data) */ - private static boolean isPersonDataValid(String[] person) { - return isPersonNameValid(person[PERSON_DATA_INDEX_NAME]) - && isPersonPhoneValid(person[PERSON_DATA_INDEX_PHONE]) - && isPersonEmailValid(person[PERSON_DATA_INDEX_EMAIL]); + private static boolean isPersonDataValid(HashMap person) { + return isPersonNameValid(person.get(PERSON_PROPERTY_NAME)) + && isPersonPhoneValid(person.get(PERSON_PROPERTY_PHONE)) + && isPersonEmailValid(person.get(PERSON_PROPERTY_EMAIL)); } /* From 292af8dceee7ba76112875186781cb7a5f4be018 Mon Sep 17 00:00:00 2001 From: qwlai Date: Wed, 7 Feb 2018 00:24:41 +0800 Subject: [PATCH 2/2] Used enum for the properties of a person --- src/seedu/addressbook/AddressBook.java | 111 ++++++++++++------------- 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/src/seedu/addressbook/AddressBook.java b/src/seedu/addressbook/AddressBook.java index cfb8d284..72dba399 100644 --- a/src/seedu/addressbook/AddressBook.java +++ b/src/seedu/addressbook/AddressBook.java @@ -140,11 +140,10 @@ public class AddressBook { /* We use a HashMap to store details of a single person. * The constants given below are the indexes for the different data elements of a person * used by the internal HashMap storage format. - * For example, a person's name is stored as the PERSON_PROPERTY_NAME in the HashMap. + * For example, a person's name is stored as the PersonProperty.NAME in the HashMap. */ - private static final String PERSON_PROPERTY_NAME = "name"; - private static final String PERSON_PROPERTY_PHONE = "phone"; - private static final String PERSON_PROPERTY_EMAIL = "email"; + private enum PersonProperty {NAME, EMAIL, PHONE}; + /** * The number of data elements for a single person. @@ -171,8 +170,8 @@ public class AddressBook { /* * NOTE : ============================================================================================= - * Note that the type of the variable below can also be declared as List>, as follows: - * private static final List ALL_PERSONS = new ArrayList<>() + * Note that the type of the variable below can also be declared as List>, as follows: + * private static final List ALL_PERSONS = new ArrayList<>() * That is because List is an interface implemented by the ArrayList class. * In this code we use ArrayList instead because we wanted to to stay away from advanced concepts * such as interface inheritance. @@ -182,14 +181,14 @@ public class AddressBook { /** * List of all persons in the address book. */ - private static final ArrayList> ALL_PERSONS = new ArrayList<>(); + private static final ArrayList> ALL_PERSONS = new ArrayList<>(); /** * Stores the most recent list of persons shown to the user as a result of a user command. * This is a subset of the full list. Deleting persons in the pull list does not delete * those persons from this list. */ - private static ArrayList> latestPersonListingView = getAllPersonsInAddressBook(); // initial view is of all + private static ArrayList> latestPersonListingView = getAllPersonsInAddressBook(); // initial view is of all /** * The path to the file used for storing person data. @@ -418,7 +417,7 @@ private static String getMessageForInvalidCommandInput(String userCommand, Strin */ private static String executeAddPerson(String commandArgs) { // try decoding a person from the raw args - final Optional> decodeResult = decodePersonFromString(commandArgs); + final Optional> decodeResult = decodePersonFromString(commandArgs); // checks if args are valid (decode result will not be present if the person is invalid) if (!decodeResult.isPresent()) { @@ -426,7 +425,7 @@ private static String executeAddPerson(String commandArgs) { } // add the person as specified - final HashMap personToAdd = decodeResult.get(); + final HashMap personToAdd = decodeResult.get(); addPersonToAddressBook(personToAdd); return getMessageForSuccessfulAddPerson(personToAdd); } @@ -438,7 +437,7 @@ private static String executeAddPerson(String commandArgs) { * @param addedPerson person who was successfully added * @return successful add person feedback message */ - private static String getMessageForSuccessfulAddPerson(HashMap addedPerson) { + private static String getMessageForSuccessfulAddPerson(HashMap addedPerson) { return String.format(MESSAGE_ADDED, getNameFromPerson(addedPerson), getPhoneFromPerson(addedPerson), getEmailFromPerson(addedPerson)); } @@ -452,7 +451,7 @@ private static String getMessageForSuccessfulAddPerson(HashMap a */ private static String executeFindPersons(String commandArgs) { final Set keywords = extractKeywordsFromFindPersonArgs(commandArgs); - final ArrayList> personsFound = getPersonsWithNameContainingAnyKeyword(keywords); + final ArrayList> personsFound = getPersonsWithNameContainingAnyKeyword(keywords); showToUser(personsFound); return getMessageForPersonsDisplayedSummary(personsFound); } @@ -463,7 +462,7 @@ private static String executeFindPersons(String commandArgs) { * @param personsDisplayed used to generate summary * @return summary message for persons displayed */ - private static String getMessageForPersonsDisplayedSummary(ArrayList> personsDisplayed) { + private static String getMessageForPersonsDisplayedSummary(ArrayList> personsDisplayed) { return String.format(MESSAGE_PERSONS_FOUND_OVERVIEW, personsDisplayed.size()); } @@ -483,9 +482,9 @@ private static Set extractKeywordsFromFindPersonArgs(String findPersonCo * @param keywords for searching * @return list of persons in full model with name containing some of the keywords */ - private static ArrayList> getPersonsWithNameContainingAnyKeyword(Collection keywords) { - final ArrayList> matchedPersons = new ArrayList<>(); - for (HashMap person : getAllPersonsInAddressBook()) { + private static ArrayList> getPersonsWithNameContainingAnyKeyword(Collection keywords) { + final ArrayList> matchedPersons = new ArrayList<>(); + for (HashMap person : getAllPersonsInAddressBook()) { final Set wordsInName = new HashSet<>(splitByWhitespace(getNameFromPerson(person))); if (!Collections.disjoint(wordsInName, keywords)) { matchedPersons.add(person); @@ -508,7 +507,7 @@ private static String executeDeletePerson(String commandArgs) { if (!isDisplayIndexValidForLastPersonListingView(targetVisibleIndex)) { return MESSAGE_INVALID_PERSON_DISPLAYED_INDEX; } - final HashMap targetInModel = getPersonByLastVisibleIndex(targetVisibleIndex); + final HashMap targetInModel = getPersonByLastVisibleIndex(targetVisibleIndex); return deletePersonFromAddressBook(targetInModel) ? getMessageForSuccessfulDelete(targetInModel) // success : MESSAGE_PERSON_NOT_IN_ADDRESSBOOK; // not found } @@ -555,7 +554,7 @@ private static boolean isDisplayIndexValidForLastPersonListingView(int index) { * @param deletedPerson successfully deleted * @return successful delete person feedback message */ - private static String getMessageForSuccessfulDelete(HashMap deletedPerson) { + private static String getMessageForSuccessfulDelete(HashMap deletedPerson) { return String.format(MESSAGE_DELETE_PERSON_SUCCESS, getMessageForFormattedPersonData(deletedPerson)); } @@ -575,7 +574,7 @@ private static String executeClearAddressBook() { * @return feedback display message for the operation result */ private static String executeListAllPersonsInAddressBook() { - ArrayList> toBeDisplayed = getAllPersonsInAddressBook(); + ArrayList> toBeDisplayed = getAllPersonsInAddressBook(); showToUser(toBeDisplayed); return getMessageForPersonsDisplayedSummary(toBeDisplayed); } @@ -630,7 +629,7 @@ private static void showToUser(String... message) { * The list will be indexed, starting from 1. * */ - private static void showToUser(ArrayList> persons) { + private static void showToUser(ArrayList> persons) { String listAsString = getDisplayString(persons); showToUser(listAsString); updateLatestViewedPersonListing(persons); @@ -639,10 +638,10 @@ private static void showToUser(ArrayList> persons) { /** * Returns the display string representation of the list of persons. */ - private static String getDisplayString(ArrayList> persons) { + private static String getDisplayString(ArrayList> persons) { final StringBuilder messageAccumulator = new StringBuilder(); for (int i = 0; i < persons.size(); i++) { - final HashMap person = persons.get(i); + final HashMap person = persons.get(i); final int displayIndex = i + DISPLAYED_INDEX_OFFSET; messageAccumulator.append('\t') .append(getIndexedPersonListElementMessage(displayIndex, person)) @@ -658,7 +657,7 @@ private static String getDisplayString(ArrayList> person * @param person to show * @return formatted listing message with index */ - private static String getIndexedPersonListElementMessage(int visibleIndex, HashMap person) { + private static String getIndexedPersonListElementMessage(int visibleIndex, HashMap person) { return String.format(MESSAGE_DISPLAY_LIST_ELEMENT_INDEX, visibleIndex) + getMessageForFormattedPersonData(person); } @@ -668,7 +667,7 @@ private static String getIndexedPersonListElementMessage(int visibleIndex, HashM * @param person to show * @return formatted message showing internal state */ - private static String getMessageForFormattedPersonData(HashMap person) { + private static String getMessageForFormattedPersonData(HashMap person) { return String.format(MESSAGE_DISPLAY_PERSON_DATA, getNameFromPerson(person), getPhoneFromPerson(person), getEmailFromPerson(person)); } @@ -678,7 +677,7 @@ private static String getMessageForFormattedPersonData(HashMap p * * @param newListing the new listing of persons */ - private static void updateLatestViewedPersonListing(ArrayList> newListing) { + private static void updateLatestViewedPersonListing(ArrayList> newListing) { // clone to insulate from future changes to arg list latestPersonListingView = new ArrayList<>(newListing); } @@ -689,7 +688,7 @@ private static void updateLatestViewedPersonListing(ArrayList getPersonByLastVisibleIndex(int lastVisibleIndex) { + private static HashMap getPersonByLastVisibleIndex(int lastVisibleIndex) { return latestPersonListingView.get(lastVisibleIndex - DISPLAYED_INDEX_OFFSET); } @@ -729,8 +728,8 @@ private static void createFileIfMissing(String filePath) { * @param filePath file to load from * @return the list of decoded persons */ - private static ArrayList> loadPersonsFromFile(String filePath) { - final Optional>> successfullyDecoded = decodePersonsFromStrings(getLinesInFile(filePath)); + private static ArrayList> loadPersonsFromFile(String filePath) { + final Optional>> successfullyDecoded = decodePersonsFromStrings(getLinesInFile(filePath)); if (!successfullyDecoded.isPresent()) { showToUser(MESSAGE_INVALID_STORAGE_FILE_CONTENT); exitProgram(); @@ -761,7 +760,7 @@ private static ArrayList getLinesInFile(String filePath) { * * @param filePath file for saving */ - private static void savePersonsToFile(ArrayList> persons, String filePath) { + private static void savePersonsToFile(ArrayList> persons, String filePath) { final ArrayList linesToWrite = encodePersonsToStrings(persons); try { Files.write(Paths.get(storageFilePath), linesToWrite); @@ -783,7 +782,7 @@ private static void savePersonsToFile(ArrayList> persons * * @param person to add */ - private static void addPersonToAddressBook(HashMap person) { + private static void addPersonToAddressBook(HashMap person) { ALL_PERSONS.add(person); savePersonsToFile(getAllPersonsInAddressBook(), storageFilePath); } @@ -794,7 +793,7 @@ private static void addPersonToAddressBook(HashMap person) { * @param exactPerson the actual person inside the address book (exactPerson == the person to delete in the full list) * @return true if the given person was found and deleted in the model */ - private static boolean deletePersonFromAddressBook(HashMap exactPerson) { + private static boolean deletePersonFromAddressBook(HashMap exactPerson) { final boolean changed = ALL_PERSONS.remove(exactPerson); if (changed) { savePersonsToFile(getAllPersonsInAddressBook(), storageFilePath); @@ -805,7 +804,7 @@ private static boolean deletePersonFromAddressBook(HashMap exact /** * Returns all persons in the address book */ - private static ArrayList> getAllPersonsInAddressBook() { + private static ArrayList> getAllPersonsInAddressBook() { return ALL_PERSONS; } @@ -822,7 +821,7 @@ private static void clearAddressBook() { * * @param persons list of persons to initialise the model with */ - private static void initialiseAddressBookModel(ArrayList> persons) { + private static void initialiseAddressBookModel(ArrayList> persons) { ALL_PERSONS.clear(); ALL_PERSONS.addAll(persons); } @@ -839,8 +838,8 @@ private static void initialiseAddressBookModel(ArrayList * * @param person whose name you want */ - private static String getNameFromPerson(HashMap person) { - return person.get(PERSON_PROPERTY_NAME); + private static String getNameFromPerson(HashMap person) { + return person.get(PersonProperty.NAME); } /** @@ -848,8 +847,8 @@ private static String getNameFromPerson(HashMap person) { * * @param person whose phone number you want */ - private static String getPhoneFromPerson(HashMap person) { - return person.get(PERSON_PROPERTY_PHONE); + private static String getPhoneFromPerson(HashMap person) { + return person.get(PersonProperty.PHONE); } /** @@ -857,8 +856,8 @@ private static String getPhoneFromPerson(HashMap person) { * * @param person whose email you want */ - private static String getEmailFromPerson(HashMap person) { - return person.get(PERSON_PROPERTY_EMAIL); + private static String getEmailFromPerson(HashMap person) { + return person.get(PersonProperty.EMAIL); } /** @@ -869,11 +868,11 @@ private static String getEmailFromPerson(HashMap person) { * @param email without data prefix * @return constructed person */ - private static HashMap makePersonFromData(String name, String phone, String email) { - final HashMap person = new HashMap<>(); - person.put(PERSON_PROPERTY_NAME, name); - person.put(PERSON_PROPERTY_PHONE, phone); - person.put(PERSON_PROPERTY_EMAIL, email); + private static HashMap makePersonFromData(String name, String phone, String email) { + final HashMap person = new HashMap<>(); + person.put(PersonProperty.NAME, name); + person.put(PersonProperty.PHONE, phone); + person.put(PersonProperty.EMAIL, email); return person; } @@ -883,7 +882,7 @@ private static HashMap makePersonFromData(String name, String ph * @param person to be encoded * @return encoded string */ - private static String encodePersonToString(HashMap person) { + private static String encodePersonToString(HashMap person) { return String.format(PERSON_STRING_REPRESENTATION, getNameFromPerson(person), getPhoneFromPerson(person), getEmailFromPerson(person)); } @@ -894,9 +893,9 @@ private static String encodePersonToString(HashMap person) { * @param persons to be encoded * @return encoded strings */ - private static ArrayList encodePersonsToStrings(ArrayList> persons) { + private static ArrayList encodePersonsToStrings(ArrayList> persons) { final ArrayList encoded = new ArrayList<>(); - for (HashMap person : persons) { + for (HashMap person : persons) { encoded.add(encodePersonToString(person)); } return encoded; @@ -916,12 +915,12 @@ private static ArrayList encodePersonsToStrings(ArrayList> decodePersonFromString(String encoded) { + private static Optional> decodePersonFromString(String encoded) { // check that we can extract the parts of a person from the encoded string if (!isPersonDataExtractableFrom(encoded)) { return Optional.empty(); } - final HashMap decodedPerson = makePersonFromData( + final HashMap decodedPerson = makePersonFromData( extractNameFromPersonString(encoded), extractPhoneFromPersonString(encoded), extractEmailFromPersonString(encoded) @@ -937,10 +936,10 @@ private static Optional> decodePersonFromString(String e * @return if cannot decode any: empty Optional * else: Optional containing decoded persons */ - private static Optional>> decodePersonsFromStrings(ArrayList encodedPersons) { - final ArrayList> decodedPersons = new ArrayList<>(); + private static Optional>> decodePersonsFromStrings(ArrayList encodedPersons) { + final ArrayList> decodedPersons = new ArrayList<>(); for (String encodedPerson : encodedPersons) { - final Optional> decodedPerson = decodePersonFromString(encodedPerson); + final Optional> decodedPerson = decodePersonFromString(encodedPerson); if (!decodedPerson.isPresent()) { return Optional.empty(); } @@ -1029,10 +1028,10 @@ private static String extractEmailFromPersonString(String encoded) { * * @param person HashMap representing the person (used in internal data) */ - private static boolean isPersonDataValid(HashMap person) { - return isPersonNameValid(person.get(PERSON_PROPERTY_NAME)) - && isPersonPhoneValid(person.get(PERSON_PROPERTY_PHONE)) - && isPersonEmailValid(person.get(PERSON_PROPERTY_EMAIL)); + private static boolean isPersonDataValid(HashMap person) { + return isPersonNameValid(person.get(PersonProperty.NAME)) + && isPersonPhoneValid(person.get(PersonProperty.PHONE)) + && isPersonEmailValid(person.get(PersonProperty.EMAIL)); } /*