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

Implement "find" methods #20

Merged
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/main/java/BookBob/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ public static void main(String[] args) {
}
break;

case "find":
commandHandler.find(input, records);
break;

case "help":
commandHandler.help();
break;
Expand Down
86 changes: 47 additions & 39 deletions src/main/java/BookBob/entity/Patient.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,37 @@

public class Patient {
private String name;
private String NRIC;
private String diagnosis;
private ArrayList<String> medication;
private int phoneNumber;
private String nric;
private String dateOfBirth;
private String phoneNumber;
private String homeAddress;
private String diagnosis;
private List<String> medication;

//default constructor only takes in name and NRIC
public Patient(String name, String NRIC) {
// default constructor only takes in name and NRIC
public Patient(String name, String nric) {
this.name = name;
this.NRIC = NRIC;
this.phoneNumber = 0;
this.nric = nric;
this.dateOfBirth = "";
this.phoneNumber = "";
this.homeAddress = "";
this.medication = new ArrayList<>();
this.diagnosis = "";
this.dateOfBirth = "";
this.medication = new ArrayList<>();
}

//constructor used in retrieving data
public Patient(String name, String NRIC, String phoneNumber, String dateOfBirth, String homeAddress, String diagnosis, ArrayList<String> medications) {
// constructor used in retrieving data
public Patient(String name, String nric, String dateOfBirth, String phoneNumber, String homeAddress,
String diagnosis, List<String> medications) {
this.name = name;
this.NRIC = NRIC;
this.phoneNumber = Integer.parseInt(phoneNumber);
this.nric = nric;
this.dateOfBirth = dateOfBirth;
this.phoneNumber = phoneNumber;
this.homeAddress = homeAddress;
this.diagnosis = diagnosis;
this.medication = medications;
}

//getters and setters
// getters and setters
public String getName() {
return name;
}
Expand All @@ -43,51 +44,58 @@ public void setName(String name) {
this.name = name;
}

public String getNRIC() {
return NRIC;
public String getNric() {
return nric;
}

public void setNRIC(String NRIC) {
this.NRIC = NRIC;
public void setNric(String nric) {
this.nric = nric;
}

public String getDiagnosis() {
return diagnosis;
public String getDateOfBirth() {
return dateOfBirth;
}

public void setDiagnosis(String diagnosis) {
this.diagnosis = diagnosis;
public void setDateOfBirth(String dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}

public ArrayList<String> getMedication() {
return medication;
public String getPhoneNumber() {
return phoneNumber;
}

public void setMedication(ArrayList<String> medication) {
this.medication = medication;
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}

public int getPhoneNumber() {
return phoneNumber;
public String getHomeAddress() {
return homeAddress;
}

public void setPhoneNumber(int phoneNumber) {
this.phoneNumber = phoneNumber;
public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
}

public String getDateOfBirth() {
return dateOfBirth;
public String getDiagnosis() {
return diagnosis;
}

public void setDateOfBirth(String dateOfBirth) {
this.dateOfBirth = dateOfBirth;
public void setDiagnosis(String diagnosis) {
this.diagnosis = diagnosis;
}

public String getHomeAddress() {
return homeAddress;
public List<String> getMedication() {
return medication;
}

public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
public void setMedication(List<String> medication) {
this.medication = medication;
}

@Override
public String toString() {
return "Name: " + getName() + ", NRIC: " + getNric() + ", DOB: " + getDateOfBirth() +
", Phone: " + getPhoneNumber() + ", Address: " + getHomeAddress() +
", Diagnosis: " + getDiagnosis() + ", Medication: " + getMedication();
}
}
19 changes: 8 additions & 11 deletions src/main/java/BookBob/entity/Records.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,27 @@
package BookBob.entity;

import java.util.ArrayList;
import java.util.List;

public class Records {
private List<Patient> patients;

public ArrayList<Patient> patients;

//default constructor: empty
// default constructor: empty
public Records() {
ArrayList<Patient> patients = new ArrayList<>();
this.patients = patients;
this.patients = new ArrayList<>();
}

//add a patient to records
// add a patient to records
public void addPatient(Patient patient) {
ArrayList<Patient> patients = this.getPatients();
patients.add(patient);
this.setPatients(patients);
}

//setter and getters
public ArrayList<Patient> getPatients() {
// setter and getters
public List<Patient> getPatients() {
return patients;
}

public void setPatients(ArrayList<Patient> patients) {
public void setPatients(List<Patient> patients) {
this.patients = patients;
}
}
21 changes: 21 additions & 0 deletions src/main/java/BookBob/functions/CommandAttributeType.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
56 changes: 44 additions & 12 deletions src/main/java/BookBob/functions/CommandHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import BookBob.entity.Records;

import java.util.ArrayList;
import java.util.List;

public class CommandHandler {

Expand Down Expand Up @@ -43,19 +44,19 @@ public void add(String input, Records records) {
String[] inputParts = input.split(" ");
String name = "";
String NRIC = "";
int phoneNumber = 0;
String diagnosis = "";
ArrayList<String> medications = new ArrayList<>();
String homeAddress = "";
String dateOfBirth = "";
String phoneNumber = "";
String homeAddress = "";
String diagnosis = "";
List<String> medications = new ArrayList<>();

for (String part : inputParts) {
if (part.startsWith("n/")) {
name = part.substring(2);
} else if (part.startsWith("ic/")) {
NRIC = part.substring(3);
} else if (part.startsWith("p/")) {
phoneNumber = Integer.parseInt(part.substring(2));
phoneNumber = part.substring(2);
} else if (part.startsWith("d/")) {
diagnosis = part.substring(2);
} else if (part.startsWith("m/")) {
Expand All @@ -79,37 +80,68 @@ public void add(String input, Records records) {
}

public void list(Records records) {
ArrayList<Patient> patients = records.getPatients();
List<Patient> patients = records.getPatients();
if (patients.isEmpty()) {
System.out.println("No patients found.");
return;
}
for (Patient patient : patients) {
System.out.println("Name: " + patient.getName() + ", NRIC: " + patient.getNRIC() +
System.out.println("Name: " + patient.getName() + ", NRIC: " + patient.getNric() +
", Phone: " + patient.getPhoneNumber() + ", Diagnosis: " + patient.getDiagnosis() +
", Medication: " + patient.getMedication() + ", Address: " + patient.getHomeAddress() +
", DOB: " + patient.getDateOfBirth());
}
}

public void delete(String NRIC, Records records) {
ArrayList<Patient> patients = records.patients;
public void delete(String nric, Records records) {
List<Patient> patients = records.getPatients();
int initialPatientSize = patients.size();
if (initialPatientSize == 0) {
System.out.println("There are no patients in the record currently.");
return;
}
for (int i = 0; i < patients.size(); i++) {
Patient currentPatient = patients.get(i);
String patientNRIC = currentPatient.getNRIC();
if (patientNRIC.equals(NRIC)) {
String patientNRIC = currentPatient.getNric();
if (patientNRIC.equals(nric)) {
patients.remove(i);
System.out.println("Patient " + currentPatient.getName() + ", " + patientNRIC + ", has been deleted.");
break;
}
}
if (patients.size() == initialPatientSize) {
System.out.println("Patient " + NRIC + " not found");
System.out.println("Patient " + nric + " not found");
}
}

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<Patient> findList = Find.findPatients(commandAttributeType, records, keywords);

if (findList.isEmpty()) {
System.out.println("No patients found");
return;
}

for (Patient patient : findList) {
System.out.println(patient);
}
}

Expand Down
78 changes: 78 additions & 0 deletions src/main/java/BookBob/functions/Find.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package BookBob.functions;

import BookBob.entity.Patient;
import BookBob.entity.Records;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

public class Find {
public static List<Patient> 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 static List<Patient> findPatientsByName(Records records, String[] keywords) {
return findPatientsByAttribute(records, keywords, (p, keyword) ->
p.getName().toLowerCase().contains(keyword.toLowerCase()));
}

public static List<Patient> findPatientsByNric(Records records, String[] keywords) {
return findPatientsByAttribute(records, keywords, (p, keyword) ->
p.getNric().toLowerCase().contains(keyword.toLowerCase()));
}

public static List<Patient> 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 static List<Patient> findPatientsByPhoneNumber(Records records, String[] keywords) {
return findPatientsByAttribute(records, keywords, (p, keyword) ->
p.getPhoneNumber().toLowerCase().contains(keyword.toLowerCase()));
}

public static List<Patient> findPatientsByHomeAddress(Records records, String[] keywords) {
return findPatientsByAttribute(records, keywords, (p, keyword) ->
p.getHomeAddress().toLowerCase().contains(keyword.toLowerCase()));
}

public static List<Patient> findPatientsByDiagnosis(Records records, String[] keywords) {
return findPatientsByAttribute(records, keywords, (p, keyword) ->
p.getDiagnosis().toLowerCase().contains(keyword.toLowerCase()));
}

public static List<Patient> findPatientsByMedication(Records records, String[] keywords) {
return findPatientsByAttribute(records, keywords, (p, keyword) -> p.getMedication().contains(keyword));
}

public static List<Patient> findPatientsByAttribute(Records records, String[] keywords,
FindAttributeCheck attributeCheck) {
List<Patient> 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;
}
}
Loading
Loading