From 984a406df3f3b33c75a675e44a6bbf2ff5b9435b Mon Sep 17 00:00:00 2001 From: kaboomzxc Date: Wed, 2 Oct 2024 22:42:17 +0800 Subject: [PATCH] Update "find" implementation --- src/main/java/BookBob/Main.java | 4 ++ src/main/java/BookBob/entity/Patient.java | 7 ++ src/main/java/BookBob/entity/Records.java | 2 - .../functions/CommandAttributeType.java | 21 ++++++ .../BookBob/functions/CommandHandler.java | 31 ++++++++ src/main/java/BookBob/functions/Find.java | 72 +++++++++++-------- .../BookBob/functions/FindAttributeCheck.java | 8 +++ 7 files changed, 115 insertions(+), 30 deletions(-) create mode 100644 src/main/java/BookBob/functions/CommandAttributeType.java create mode 100644 src/main/java/BookBob/functions/FindAttributeCheck.java diff --git a/src/main/java/BookBob/Main.java b/src/main/java/BookBob/Main.java index 1d5191dd83..bb71645752 100644 --- a/src/main/java/BookBob/Main.java +++ b/src/main/java/BookBob/Main.java @@ -42,6 +42,10 @@ public static void main(String[] args) { } break; + case "find": + commandHandler.find(input, records); + break; + case "help": commandHandler.help(); break; diff --git a/src/main/java/BookBob/entity/Patient.java b/src/main/java/BookBob/entity/Patient.java index f4bd0752cb..eda5510af3 100644 --- a/src/main/java/BookBob/entity/Patient.java +++ b/src/main/java/BookBob/entity/Patient.java @@ -91,4 +91,11 @@ public List getMedication() { public void setMedication(List medication) { this.medication = medication; } + + @Override + public String toString() { + return "Name: " + getName() + ", NRIC: " + getNric() + ", DOB: " + getDateOfBirth() + + ", Phone: " + getPhoneNumber() + ", Address: " + getHomeAddress() + + ", Diagnosis: " + getDiagnosis() + ", Medication: " + getMedication(); + } } diff --git a/src/main/java/BookBob/entity/Records.java b/src/main/java/BookBob/entity/Records.java index 0a268e8afa..35344363c2 100644 --- a/src/main/java/BookBob/entity/Records.java +++ b/src/main/java/BookBob/entity/Records.java @@ -13,9 +13,7 @@ public Records() { // add a patient to records public void addPatient(Patient patient) { - List patients = this.getPatients(); patients.add(patient); - this.setPatients(patients); } // setter and getters diff --git a/src/main/java/BookBob/functions/CommandAttributeType.java b/src/main/java/BookBob/functions/CommandAttributeType.java new file mode 100644 index 0000000000..83526afdaa --- /dev/null +++ b/src/main/java/BookBob/functions/CommandAttributeType.java @@ -0,0 +1,21 @@ +package BookBob.functions; + +public enum CommandAttributeType { + NAME("NAME"), + NRIC("NRIC"), + DATE_OF_BIRTH("DATE_OF_BIRTH"), + PHONE_NUMBER("PHONE_NUMBER"), + HOME_ADDRESS("HOME_ADDRESS"), + DIAGNOSIS("DIAGNOSIS"), + MEDICATION("MEDICATION"); + + private final String label; + + CommandAttributeType(String label) { + this.label = label; + } + + public String getLabel() { + return label; + } +} diff --git a/src/main/java/BookBob/functions/CommandHandler.java b/src/main/java/BookBob/functions/CommandHandler.java index 1e499782ac..3872d60e5b 100644 --- a/src/main/java/BookBob/functions/CommandHandler.java +++ b/src/main/java/BookBob/functions/CommandHandler.java @@ -114,6 +114,37 @@ public void delete(String nric, Records records) { } } + public void find(String input, Records records) { + String[] inputArr = input.split("\\s+", 3); + + CommandAttributeType commandAttributeType = null; + + for (CommandAttributeType t : CommandAttributeType.values()) { + if (t.getLabel().equals(inputArr[1])) { + commandAttributeType = t; + break; + } + } + + if (commandAttributeType == null) { + System.out.println("Invalid find"); + return; + } + + String[] keywords = inputArr[2].split("\\s+"); + + List findList = Find.findPatients(commandAttributeType, records, keywords); + + if (findList.isEmpty()) { + System.out.println("No patients found"); + return; + } + + for (Patient patient : findList) { + System.out.println(patient); + } + } + // Takes in an input string and determines whether to exit the program public void exit(String input) { if(input.equalsIgnoreCase("exit")) { diff --git a/src/main/java/BookBob/functions/Find.java b/src/main/java/BookBob/functions/Find.java index 5d64d5e22f..462c0fb4d4 100644 --- a/src/main/java/BookBob/functions/Find.java +++ b/src/main/java/BookBob/functions/Find.java @@ -9,53 +9,69 @@ import java.util.List; public class Find { - public List findPatientsByAttribute(Records records, String[] keywords, - FindPatientAttributeCheck attributeCheck) { - List findList = new ArrayList<>(); - - for (Patient p : records.getPatients()) { - for (String keyword : keywords) { - if (attributeCheck.test(p, keyword)) { - findList.add(p); - break; // To avoid adding the same patient multiple times - } - } - } - - return findList; + public static List findPatients(CommandAttributeType commandAttributeType, Records records, String[] keywords) { + return switch (commandAttributeType) { + case NAME -> findPatientsByName(records, keywords); + case NRIC -> findPatientsByNric(records, keywords); + case DATE_OF_BIRTH -> findPatientsByDateOfBirth(records, keywords); + case PHONE_NUMBER -> findPatientsByPhoneNumber(records, keywords); + case HOME_ADDRESS -> findPatientsByHomeAddress(records, keywords); + case DIAGNOSIS -> findPatientsByDiagnosis(records, keywords); + case MEDICATION -> findPatientsByMedication(records, keywords); + }; } - public List findPatientsByName(Records records, String[] keywords) { - return findPatientsByAttribute(records, keywords, (p, keyword) -> p.getName().contains(keyword)); + public static List findPatientsByName(Records records, String[] keywords) { + return findPatientsByAttribute(records, keywords, (p, keyword) -> + p.getName().toLowerCase().contains(keyword.toLowerCase())); } - public List findPatientsByNric(Records records, String[] keywords) { - return findPatientsByAttribute(records, keywords, (p, keyword) -> p.getNric().contains(keyword)); + public static List findPatientsByNric(Records records, String[] keywords) { + return findPatientsByAttribute(records, keywords, (p, keyword) -> + p.getNric().toLowerCase().contains(keyword.toLowerCase())); } - public List findPatientsByDateOfBirth(Records records, String[] keywords) { + public static List findPatientsByDateOfBirth(Records records, String[] keywords) { return findPatientsByAttribute(records, keywords, (p, keyword) -> { DateTimeFormatter dateInputFormatter = DateTimeFormatter.ofPattern("ddMMyyyy"); LocalDate searchDate = LocalDate.parse(keyword, dateInputFormatter); LocalDate patientDateOfBirth = LocalDate.parse(p.getDateOfBirth(), dateInputFormatter); return patientDateOfBirth.equals(searchDate); - }); } - public List findPatientsByPhoneNumber(Records records, String[] keywords) { - return findPatientsByAttribute(records, keywords, (p, keyword) -> p.getPhoneNumber().contains(keyword)); + public static List findPatientsByPhoneNumber(Records records, String[] keywords) { + return findPatientsByAttribute(records, keywords, (p, keyword) -> + p.getPhoneNumber().toLowerCase().contains(keyword.toLowerCase())); } - public List findPatientsByHomeAddress(Records records, String[] keywords) { - return findPatientsByAttribute(records, keywords, (p, keyword) -> p.getHomeAddress().contains(keyword)); + public static List findPatientsByHomeAddress(Records records, String[] keywords) { + return findPatientsByAttribute(records, keywords, (p, keyword) -> + p.getHomeAddress().toLowerCase().contains(keyword.toLowerCase())); } - public List findPatientsByDiagnosis(Records records, String[] keywords) { - return findPatientsByAttribute(records, keywords, (p, keyword) -> p.getDiagnosis().contains(keyword)); + public static List findPatientsByDiagnosis(Records records, String[] keywords) { + return findPatientsByAttribute(records, keywords, (p, keyword) -> + p.getDiagnosis().toLowerCase().contains(keyword.toLowerCase())); } - public List findPatientsByMedication(Records records, String[] keywords) { - return findPatientsByAttribute(records,keywords, (p, keyword) -> p.getMedication().contains(keyword)); + public static List findPatientsByMedication(Records records, String[] keywords) { + return findPatientsByAttribute(records, keywords, (p, keyword) -> p.getMedication().contains(keyword)); + } + + public static List findPatientsByAttribute(Records records, String[] keywords, + FindAttributeCheck attributeCheck) { + List findList = new ArrayList<>(); + + for (Patient p : records.getPatients()) { + for (String keyword : keywords) { + if (attributeCheck.test(p, keyword)) { + findList.add(p); + break; // To avoid adding the same patient multiple times + } + } + } + + return findList; } } diff --git a/src/main/java/BookBob/functions/FindAttributeCheck.java b/src/main/java/BookBob/functions/FindAttributeCheck.java new file mode 100644 index 0000000000..5175cd6d4b --- /dev/null +++ b/src/main/java/BookBob/functions/FindAttributeCheck.java @@ -0,0 +1,8 @@ +package BookBob.functions; + +import BookBob.entity.Patient; + +@FunctionalInterface +public interface FindAttributeCheck { + boolean test(Patient patient, String keyword); +}