diff --git a/.idea/misc.xml b/.idea/misc.xml index fdc35ea..17e9c2e 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/pom.xml b/pom.xml index fad9976..a31152c 100644 --- a/pom.xml +++ b/pom.xml @@ -14,4 +14,29 @@ UTF-8 + + + org.junit.jupiter + junit-jupiter + 5.10.2 + test + + + org.testng + testng + RELEASE + compile + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + + + + \ No newline at end of file diff --git a/src/main/java/org/codedifferently/Main.java b/src/main/java/org/codedifferently/Main.java index 435139b..351adbe 100644 --- a/src/main/java/org/codedifferently/Main.java +++ b/src/main/java/org/codedifferently/Main.java @@ -1,17 +1,79 @@ package org.codedifferently; -//TIP To Run code, press or -// click the icon in the gutter. +import java.util.Scanner; + public class Main { + public static void main(String[] args) { - //TIP Press with your caret at the highlighted text - // to see how IntelliJ IDEA suggests fixing it. - System.out.printf("Hello and welcome!"); - - for (int i = 1; i <= 5; i++) { - //TIP Press to start debugging your code. We have set one breakpoint - // for you, but you can always add more by pressing . - System.out.println("i = " + i); + + Scanner scanner = new Scanner(System.in); + MaintenanceOffice office = new MaintenanceOffice(); + + // Level 1 — Pre-created requests + MaintenanceRequest r1 = new MaintenanceRequest("John Smith", 101, "Plumbing", 2); + MaintenanceRequest r2 = new MaintenanceRequest("Lisa Ray", 204, "Electrical", 5); + MaintenanceRequest r3 = new MaintenanceRequest("Mark Lee", 305, "Heating", 4); + + System.out.println("---- INITIAL REQUESTS ----"); + + MaintenanceRequest[] initial = {r1, r2, r3}; + + for (MaintenanceRequest r : initial) { + System.out.println(r); + + if (r.getSeverity() >= 4) { + System.out.println("HIGH PRIORITY"); + } + + office.addRequest(r); + } + + // Level 2 — User Intake + while (true) { + + System.out.println("\nEnter tenant name (or type 'done'):"); + String name = scanner.nextLine(); + + if (name.equalsIgnoreCase("done")) { + break; + } + + System.out.println("Apartment number:"); + int apt = Integer.parseInt(scanner.nextLine()); + + System.out.println("Issue type:"); + String issue = scanner.nextLine(); + + System.out.println("Severity (1-5):"); + int severity = Integer.parseInt(scanner.nextLine()); + + MaintenanceRequest request = new MaintenanceRequest(name, apt, issue, severity); + + office.addRequest(request); + + System.out.println("Request logged successfully."); + + if (issue.equalsIgnoreCase("Electrical") && severity >= 4) { + System.out.println("⚠ Electrical High Severity Warning!"); + } + + if (severity == 5) { + System.out.println("Dispatching technician immediately!"); + office.assignTechnician(request); + } + } + + // ===== Cancel Option ===== + System.out.println("\nEnter tenant name to cancel (or press Enter to skip):"); + String cancelName = scanner.nextLine(); + + if (!cancelName.isBlank()) { + office.cancelRequestByTenantName(cancelName); } + + // ===== Daily Report ===== + office.generateDailyReport(); + + scanner.close(); } } \ No newline at end of file diff --git a/src/main/java/org/codedifferently/MaintenanceOffice.java b/src/main/java/org/codedifferently/MaintenanceOffice.java new file mode 100644 index 0000000..41521dd --- /dev/null +++ b/src/main/java/org/codedifferently/MaintenanceOffice.java @@ -0,0 +1,138 @@ +package org.codedifferently; + +import java.util.ArrayList; + +public class MaintenanceOffice { + + private ArrayList requests; + + public MaintenanceOffice() { + requests = new ArrayList<>(); + } + + public void addRequest(MaintenanceRequest request) { + requests.add(request); + } + + public void cancelRequest(MaintenanceRequest request) { + + if (request.getStatus().equals("DONE")) { + System.out.println("Cannot cancel a completed request."); + return; + } + + if (request.getStatus().equals("CANCELLED")) { + System.out.println("Request is already cancelled."); + return; + } + + request.setStatus("CANCELLED"); + request.setAssignedTech("None"); + System.out.println("Request cancelled successfully."); + } + + public void assignTechnician(MaintenanceRequest request) { + + if (request.getSeverity() >= 4) { + request.setAssignedTech("Senior Tech Mike"); + } else if (request.getSeverity() == 3) { + request.setAssignedTech("Tech Sarah"); + } else { + request.setAssignedTech("Junior Tech Alex"); + } + + request.setStatus("IN_PROGRESS"); + } + + public void closeRequest(MaintenanceRequest request) { + if (request.getStatus().equals("DONE")) { + System.out.println("Request closed successfully."); + } else { + System.out.println("Cannot close request unless status is DONE."); + } + } + + public void generateDailyReport() { + + int total = requests.size(); + int open = 0; + int closed = 0; + int low = 0; + int medium = 0; + int high = 0; + int cancelled = 0; + + ArrayList issueTypes = new ArrayList<>(); + + for (MaintenanceRequest r : requests) { + + // Status counts + if (r.getStatus().equals("DONE")) { + closed++; + } else if (r.getStatus().equals("CANCELLED")) { + cancelled++; + closed++; + } else { + open++; + } + + // Severity counts + if (r.getSeverity() <= 2) { + low++; + } else if (r.getSeverity() == 3) { + medium++; + } else { + high++; + } + + // Track issue types + issueTypes.add(r.getIssueType()); + } + + // Find most common issue type + String mostCommon = ""; + int maxCount = 0; + + for (String type : issueTypes) { + int count = 0; + + for (String t : issueTypes) { + if (t.equalsIgnoreCase(type)) { + count++; + } + } + + if (count > maxCount) { + maxCount = count; + mostCommon = type; + } + } + + System.out.println("\n---- DAILY REPORT ----"); + System.out.println("Total Requests: " + total); + System.out.println("Open: " + open); + System.out.println("Closed: " + closed); + System.out.println("Cancelled: " + cancelled); + System.out.println("Low Severity: " + low); + System.out.println("Medium Severity: " + medium); + System.out.println("High Severity: " + high); + System.out.println("Most Common Issue Type: " + mostCommon); + + if (high > 3) { + System.out.println("⚠ OVERLOAD WARNING: Too many high priority requests!"); + } + } + + public void cancelRequestByTenantName(String name) { + + for (MaintenanceRequest r : requests) { + if (r.getTenantName().equalsIgnoreCase(name)) { + cancelRequest(r); + return; + } + } + + System.out.println("Request not found."); + } +} + diff --git a/src/main/java/org/codedifferently/MaintenanceRequest.java b/src/main/java/org/codedifferently/MaintenanceRequest.java new file mode 100644 index 0000000..478190a --- /dev/null +++ b/src/main/java/org/codedifferently/MaintenanceRequest.java @@ -0,0 +1,83 @@ +package org.codedifferently; + +public class MaintenanceRequest { + + private final String tenantName; + private final int apartmentNumber; + private final String issueType; + private final int severity; // 1–5 + private String status; // NEW, IN_PROGRESS, DONE + private String assignedTech; + + // Default Constructor + public MaintenanceRequest() { + this.tenantName = ""; + this.apartmentNumber = 0; + this.issueType = ""; + this.severity = 1; + this.status = "NEW"; + this.assignedTech = "Unassigned"; + } + + // Parameterized Constructor + public MaintenanceRequest(String tenantName, int apartmentNumber, String issueType, int severity) { + this.tenantName = tenantName; + this.apartmentNumber = apartmentNumber; + this.issueType = issueType; + this.severity = severity; + this.status = "NEW"; + this.assignedTech = "Unassigned"; + } + + // Getters + public String getTenantName() { + return tenantName; + } + + public int getApartmentNumber() { + return apartmentNumber; + } + + public String getIssueType() { + return issueType; + } + + public int getSeverity() { + return severity; + } + + public String getStatus() { + return status; + } + + public String getAssignedTech() { + return assignedTech; + } + + // Setters + public void setStatus(String status) { + if (status.equals("NEW") || + status.equals("IN_PROGRESS") || + status.equals("DONE") || + status.equals("CANCELLED")) { + + this.status = status; + } else { + System.out.println("Invalid status update."); + } + } + + public void setAssignedTech(String assignedTech) { + this.assignedTech = assignedTech; + } + + @Override + public String toString() { + return "Tenant: " + tenantName + + " | Apt: " + apartmentNumber + + " | Issue: " + issueType + + " | Severity: " + severity + + " | Status: " + status + + " | Tech: " + assignedTech; + } +} \ No newline at end of file