From f61e697640fb97610c00661f4229d30a35666838 Mon Sep 17 00:00:00 2001 From: mesheikbrown Date: Sun, 1 Mar 2026 12:32:35 -0500 Subject: [PATCH 1/6] Classes Set --- src/main/java/mesheikbrown/Main.java | 13 +++++++++++++ src/main/java/mesheikbrown/MaintenanceOffice.java | 4 ++++ src/main/java/mesheikbrown/MaintenanceRequest.java | 4 ++++ 3 files changed, 21 insertions(+) create mode 100644 src/main/java/mesheikbrown/Main.java create mode 100644 src/main/java/mesheikbrown/MaintenanceOffice.java create mode 100644 src/main/java/mesheikbrown/MaintenanceRequest.java diff --git a/src/main/java/mesheikbrown/Main.java b/src/main/java/mesheikbrown/Main.java new file mode 100644 index 0000000..f661980 --- /dev/null +++ b/src/main/java/mesheikbrown/Main.java @@ -0,0 +1,13 @@ +package mesheikbrown; + +public class Main { + + public static void main(String[] args) { + + } + + + + + +}// ends class diff --git a/src/main/java/mesheikbrown/MaintenanceOffice.java b/src/main/java/mesheikbrown/MaintenanceOffice.java new file mode 100644 index 0000000..62340e7 --- /dev/null +++ b/src/main/java/mesheikbrown/MaintenanceOffice.java @@ -0,0 +1,4 @@ +package mesheikbrown; + +public class MaintenanceOffice { +} diff --git a/src/main/java/mesheikbrown/MaintenanceRequest.java b/src/main/java/mesheikbrown/MaintenanceRequest.java new file mode 100644 index 0000000..c3bedec --- /dev/null +++ b/src/main/java/mesheikbrown/MaintenanceRequest.java @@ -0,0 +1,4 @@ +package mesheikbrown; + +public class MaintenanceRequest { +} From 100569c02af37c4afd46d893a88a112fc91445bf Mon Sep 17 00:00:00 2001 From: mesheikbrown Date: Sun, 1 Mar 2026 13:24:01 -0500 Subject: [PATCH 2/6] UML and MaintenanceRequest Class done --- src/main/java/mesheikbrown/Layout.puml | 70 ++++++++++++++++++ .../java/mesheikbrown/MaintenanceRequest.java | 71 ++++++++++++++++++- 2 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 src/main/java/mesheikbrown/Layout.puml diff --git a/src/main/java/mesheikbrown/Layout.puml b/src/main/java/mesheikbrown/Layout.puml new file mode 100644 index 0000000..7047754 --- /dev/null +++ b/src/main/java/mesheikbrown/Layout.puml @@ -0,0 +1,70 @@ + +@startuml +title Apartment Maintenance Request Tracker - Class Diagram + +'======================== +' MaintenanceRequest +'======================== +class MaintenanceRequest { + -tenantName: String + -apartmentNumber: String + -issueType: String + -severity: int + -status: String + -assignedTech: String + + +MaintenanceRequest() + +MaintenanceRequest(tenantName: String, apartmentNumber: String, issueType: String, severity: int) + + +getTenantName(): String + +setTenantName(tenantName: String): void + + +getApartmentNumber(): String + +setApartmentNumber(apartmentNumber: String): void + + +getIssueType(): String + +setIssueType(issueType: String): void + + +getSeverity(): int + +setSeverity(severity: int): void + + +getStatus(): String + +setStatus(status: String): boolean + + +getAssignedTech(): String + +setAssignedTech(assignedTech: String): void + + +toString(): String +} + +'======================== +' MaintenanceOffice +'======================== +class MaintenanceOffice { + -requests: List + + +MaintenanceOffice() + + +logRequest(request: MaintenanceRequest): void + +assignTech(request: MaintenanceRequest): void + +updateStatus(request: MaintenanceRequest, newStatus: String): boolean + +closeRequest(request: MaintenanceRequest): boolean + + +printDailyReport(): void + -getMostCommonIssueType(): String +} + +'======================== +' Main +'======================== +class Main { + +main(args: String[]): void +} + +'======================== +' Relationships +'======================== +MaintenanceOffice "1" o-- "*" MaintenanceRequest : stores +Main --> MaintenanceOffice : uses + +@enduml \ No newline at end of file diff --git a/src/main/java/mesheikbrown/MaintenanceRequest.java b/src/main/java/mesheikbrown/MaintenanceRequest.java index c3bedec..37ca99b 100644 --- a/src/main/java/mesheikbrown/MaintenanceRequest.java +++ b/src/main/java/mesheikbrown/MaintenanceRequest.java @@ -1,4 +1,73 @@ package mesheikbrown; public class MaintenanceRequest { -} + + private String tenantName; + private String apartmentNumber; + private String issueType; + private int severity; + private String status; + private String assignedTech; + + //Default Constructor + MaintenanceRequest(){ + } + + //Parameterized Constructor + public MaintenanceRequest(String tenantName,String apartmentNumber,String issueType,int severity,String status,String assignedTech){ + this.tenantName = tenantName; + this.apartmentNumber = apartmentNumber; + this.issueType = issueType; + this.severity = severity; + this.status = status; + this.assignedTech = assignedTech; + } + + //Getters and Setters + public String getTenantName() { + return tenantName; + } + public void setTenantName(String tenantName) { + this.tenantName = tenantName; + } + + public String getApartmentNumber() { + return apartmentNumber; + } + public void setApartmentNumber(String apartmentNumber) { + this.apartmentNumber = apartmentNumber; + } + + public String getIssueType() { + return issueType; + } + public void setIssueType(String issueType) { + this.issueType = issueType; + } + + public int getSeverity() { + return severity; + } + public void setSeverity(int severity) { + this.severity = severity; + } + + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + public String getAssignedTech() { + return assignedTech; + } + public void setAssignedTech(String assignedTech) { + this.assignedTech = assignedTech; + } + + @Override + public String toString() { + return super.toString(); + } +}//ends Class From a78785ba1f9977300bb6a3e301ac5e207ebcd10a Mon Sep 17 00:00:00 2001 From: mesheikbrown Date: Sun, 1 Mar 2026 13:46:47 -0500 Subject: [PATCH 3/6] Update to MaintenanceRequest Class done --- .../java/mesheikbrown/MaintenanceRequest.java | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/main/java/mesheikbrown/MaintenanceRequest.java b/src/main/java/mesheikbrown/MaintenanceRequest.java index 37ca99b..c7bed7c 100644 --- a/src/main/java/mesheikbrown/MaintenanceRequest.java +++ b/src/main/java/mesheikbrown/MaintenanceRequest.java @@ -9,8 +9,10 @@ public class MaintenanceRequest { private String status; private String assignedTech; - //Default Constructor - MaintenanceRequest(){ + // Default Constructor + public MaintenanceRequest() { + this.status = "NEW"; + this.assignedTech = "UNASSIGNED"; } //Parameterized Constructor @@ -19,8 +21,8 @@ public MaintenanceRequest(String tenantName,String apartmentNumber,String issueT this.apartmentNumber = apartmentNumber; this.issueType = issueType; this.severity = severity; - this.status = status; - this.assignedTech = assignedTech; + this.status = "NEW"; + this.assignedTech = "UNASSIGNED"; } //Getters and Setters @@ -49,14 +51,24 @@ public int getSeverity() { return severity; } public void setSeverity(int severity) { - this.severity = severity; + if (severity >= 1 && severity <= 5) { + this.severity = severity; + } else { + System.out.println("Severity must be between 1 and 5."); + } } - public String getStatus() { return status; } - public void setStatus(String status) { - this.status = status; + public boolean setStatus(String status) { + if (status.equals("NEW") || + status.equals("IN_PROGRESS") || + status.equals("DONE")) { + this.status = status; + return true; + } + System.out.println("Invalid status."); + return false; } public String getAssignedTech() { @@ -66,8 +78,17 @@ public void setAssignedTech(String assignedTech) { this.assignedTech = assignedTech; } + + + + @Override public String toString() { - return super.toString(); + return "Tenant: " + tenantName + + " | Apt: " + apartmentNumber + + " | Issue: " + issueType + + " | Severity: " + severity + + " | Status: " + status + + " | Tech: " + assignedTech; } }//ends Class From 3abb4094e000b3b02f95547b5d7d7b6e84e59bca Mon Sep 17 00:00:00 2001 From: mesheikbrown Date: Sun, 1 Mar 2026 14:46:35 -0500 Subject: [PATCH 4/6] Project is done --- src/main/java/mesheikbrown/Main.java | 78 ++++++++- .../java/mesheikbrown/MaintenanceOffice.java | 163 +++++++++++++++++- .../java/mesheikbrown/MaintenanceRequest.java | 48 +++--- 3 files changed, 264 insertions(+), 25 deletions(-) diff --git a/src/main/java/mesheikbrown/Main.java b/src/main/java/mesheikbrown/Main.java index f661980..53fd8b8 100644 --- a/src/main/java/mesheikbrown/Main.java +++ b/src/main/java/mesheikbrown/Main.java @@ -1,13 +1,87 @@ package mesheikbrown; +import java.util.ArrayList; +import java.util.Scanner; + public class Main { public static void main(String[] args) { - } + Scanner scan = new Scanner(System.in); + MaintenanceOffice office = new MaintenanceOffice(); + + // LEVEL 1 — Create 3 requests and print with loop + MaintenanceRequest r1 = new MaintenanceRequest("Jordan", "2B", "Plumbing", 3); + MaintenanceRequest r2 = new MaintenanceRequest("Coreye", "4A", "Electrical", 5); + MaintenanceRequest r3 = new MaintenanceRequest("Mesheik", "1C", "Heating", 4); + + office.logRequest(r1); + office.logRequest(r2); + office.logRequest(r3); + + System.out.println("\n--- LEVEL 1: REQUESTS ---"); + for (MaintenanceRequest r : office.getRequests()) { + System.out.println(r); + if (r.getSeverity() >= 4) { + System.out.println("HIGH PRIORITY"); + } + } + + // LEVEL 2 — User intake loop (stop when "done") + System.out.println("\n--- LEVEL 2: ENTER REQUESTS ---"); + + while (true) { + + System.out.print("Tenant name (or type 'done'): "); + String tenantName = scan.nextLine(); + if (tenantName.equalsIgnoreCase("done")) { + break; + } + + System.out.print("Apartment number: "); + String apt = scan.nextLine(); + System.out.print("Issue type: "); + String issueType = scan.nextLine(); + System.out.print("Severity (1-5): "); + int severity = Integer.parseInt(scan.nextLine()); + MaintenanceRequest newReq = new MaintenanceRequest(tenantName,apt, issueType, severity); + // Level 2 rules (prints only) + if (issueType.equalsIgnoreCase("Electrical") && severity >= 4) { + System.out.println(" WARNING: High severity ELECTRICAL issue!"); + } + if (severity == 5) { + System.out.println(" DISPATCH IMMEDIATELY: Severity 5 request!"); + } -}// ends class + office.logRequest(newReq); + System.out.println("Request logged: " + newReq); + System.out.println(); + } + + ArrayList all = office.getRequests(); + + if (all.size() > 0) { + MaintenanceRequest first = all.get(0); + + System.out.println("\n--- LEVEL 3: STATUS UPDATE DEMO ---"); + System.out.println("Before: " + first); + + office.updateStatus(first, "IN_PROGRESS"); + office.updateStatus(first, "DONE"); + + // close only allowed if DONE + office.closeRequest(first); + + System.out.println("After: " + first); + } + + // LEVEL 4 — Daily report + office.printDailyReport(); + + scan.close(); + } +} \ No newline at end of file diff --git a/src/main/java/mesheikbrown/MaintenanceOffice.java b/src/main/java/mesheikbrown/MaintenanceOffice.java index 62340e7..c936f6a 100644 --- a/src/main/java/mesheikbrown/MaintenanceOffice.java +++ b/src/main/java/mesheikbrown/MaintenanceOffice.java @@ -1,4 +1,165 @@ package mesheikbrown; +import java.util.ArrayList; + public class MaintenanceOffice { -} + + // Store all maintenance requests here + private ArrayList requests; + + // Constructor + public MaintenanceOffice() { + requests = new ArrayList<>(); + } + + + // LEVEL 3 + // Add request and assign tech automatically + public void logRequest(MaintenanceRequest request) { + assignTech(request); + requests.add(request); + System.out.println("Request logged successfully."); + } + + // Assign tech based on severity + public void assignTech(MaintenanceRequest request) { + + int severity = request.getSeverity(); + + if (severity <= 2) { + request.setAssignedTech("General Maintenance"); + } + else if (severity <= 4) { + request.setAssignedTech("Senior Technician"); + } + else { // severity == 5 + request.setAssignedTech("Emergency On-Call"); + } + } + + // Update status (ONLY allow valid statuses) + public void updateStatus(MaintenanceRequest request, String newStatus) { + + newStatus = newStatus.toUpperCase(); + + if (newStatus.equals("NEW") || + newStatus.equals("IN_PROGRESS") || + newStatus.equals("DONE")) { + + request.setStatus(newStatus); + System.out.println("Status updated."); + } + else { + System.out.println("Invalid status. Must be NEW, IN_PROGRESS, or DONE."); + } + } + + + + + // Close request only if DONE + public void closeRequest(MaintenanceRequest request) { + + if (request.getStatus().equals("DONE")) { + System.out.println("Request is officially CLOSED."); + } else { + System.out.println("Cannot close request unless status is DONE."); + } + } + + // Print all requests + public void printAllRequests() { + for (MaintenanceRequest request : requests) { + System.out.println(request); + + if (request.getSeverity() >= 4) { + System.out.println("HIGH PRIORITY"); + } + } + } + + // LEVEL 4 – DAILY REPORT + public void printDailyReport() { + + int total = requests.size(); + int open = 0; + int closed = 0; + + int low = 0; + int medium = 0; + int high = 0; + + int highPriorityOpen = 0; + + // For most common issue + String mostCommonIssue = ""; + int highestCount = 0; + + for (int i = 0; i < requests.size(); i++) { + + MaintenanceRequest current = requests.get(i); + + // Open vs Closed + if (current.getStatus().equals("DONE")) { + closed++; + } else { + open++; + } + + // Severity categories + int sev = current.getSeverity(); + + if (sev <= 2) { + low++; + } + else if (sev == 3) { + medium++; + } + else { + high++; + } + + if (sev >= 4 && !current.getStatus().equals("DONE")) { + highPriorityOpen++; + } + + // Count how many times this issue appears + int count = 0; + + for (int j = 0; j < requests.size(); j++) { + if (requests.get(j).getIssueType() + .equalsIgnoreCase(current.getIssueType())) { + count++; + } + } + + if (count > highestCount) { + highestCount = count; + mostCommonIssue = current.getIssueType(); + } + } + + // Print Report + System.out.println("\n===== DAILY REPORT ====="); + System.out.println("Total Requests: " + total); + System.out.println("Open Requests: " + open); + System.out.println("Closed Requests: " + closed); + + System.out.println("\nSeverity Breakdown:"); + System.out.println("Low (1-2): " + low); + System.out.println("Medium (3): " + medium); + System.out.println("High (4-5): " + high); + + System.out.println("\nMost Common Issue: " + mostCommonIssue); + + if (highPriorityOpen > 3) { + System.out.println(" OVERLOAD WARNING: Too many high priority open requests!"); + } + + System.out.println("========================\n"); + } + + public ArrayList getRequests() { + return requests; + } +} \ No newline at end of file diff --git a/src/main/java/mesheikbrown/MaintenanceRequest.java b/src/main/java/mesheikbrown/MaintenanceRequest.java index c7bed7c..2bccb2d 100644 --- a/src/main/java/mesheikbrown/MaintenanceRequest.java +++ b/src/main/java/mesheikbrown/MaintenanceRequest.java @@ -5,30 +5,31 @@ public class MaintenanceRequest { private String tenantName; private String apartmentNumber; private String issueType; - private int severity; - private String status; + private int severity; // 1–5 + private String status; // default NEW private String assignedTech; - // Default Constructor + // Default constructor (required) public MaintenanceRequest() { this.status = "NEW"; this.assignedTech = "UNASSIGNED"; } - //Parameterized Constructor - public MaintenanceRequest(String tenantName,String apartmentNumber,String issueType,int severity,String status,String assignedTech){ + // Parameterized constructor (required) + public MaintenanceRequest(String tenantName, String apartmentNumber, String issueType, int severity) { this.tenantName = tenantName; this.apartmentNumber = apartmentNumber; this.issueType = issueType; - this.severity = severity; + setSeverity(severity); // validation this.status = "NEW"; this.assignedTech = "UNASSIGNED"; } - //Getters and Setters + // Getters & Setters public String getTenantName() { return tenantName; } + public void setTenantName(String tenantName) { this.tenantName = tenantName; } @@ -36,6 +37,7 @@ public void setTenantName(String tenantName) { public String getApartmentNumber() { return apartmentNumber; } + public void setApartmentNumber(String apartmentNumber) { this.apartmentNumber = apartmentNumber; } @@ -43,6 +45,7 @@ public void setApartmentNumber(String apartmentNumber) { public String getIssueType() { return issueType; } + public void setIssueType(String issueType) { this.issueType = issueType; } @@ -50,45 +53,46 @@ public void setIssueType(String issueType) { public int getSeverity() { return severity; } + public void setSeverity(int severity) { if (severity >= 1 && severity <= 5) { this.severity = severity; } else { - System.out.println("Severity must be between 1 and 5."); + // keep it simple: clamp invalid values to 1 + this.severity = 1; } } + public String getStatus() { return status; } + + // Status updates must be restricted (Level 3 rule) public boolean setStatus(String status) { - if (status.equals("NEW") || - status.equals("IN_PROGRESS") || - status.equals("DONE")) { - this.status = status; + String s = status.toUpperCase(); + + if (s.equals("NEW") || s.equals("IN_PROGRESS") || s.equals("DONE")) { + this.status = s; return true; - } - System.out.println("Invalid status."); + } return false; } public String getAssignedTech() { return assignedTech; } + public void setAssignedTech(String assignedTech) { this.assignedTech = assignedTech; } - - - - + // toString() (required) @Override public String toString() { - return "Tenant: " + tenantName + - " | Apt: " + apartmentNumber + - " | Issue: " + issueType + + return issueType + " | Apt " + apartmentNumber + + " | Tenant: " + tenantName + " | Severity: " + severity + " | Status: " + status + " | Tech: " + assignedTech; } -}//ends Class +} \ No newline at end of file From d7027d0a7d32828c8231c1e6ca868b30c038816e Mon Sep 17 00:00:00 2001 From: mesheikbrown Date: Sun, 1 Mar 2026 14:58:22 -0500 Subject: [PATCH 5/6] Project is done --- src/main/java/mesheikbrown/Main.java | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/main/java/mesheikbrown/Main.java b/src/main/java/mesheikbrown/Main.java index 53fd8b8..68f53e9 100644 --- a/src/main/java/mesheikbrown/Main.java +++ b/src/main/java/mesheikbrown/Main.java @@ -15,13 +15,21 @@ public static void main(String[] args) { MaintenanceRequest r2 = new MaintenanceRequest("Coreye", "4A", "Electrical", 5); MaintenanceRequest r3 = new MaintenanceRequest("Mesheik", "1C", "Heating", 4); + // Instead of storing requests directly in Main, + // we send them to the MaintenanceOffice. + // This keeps business logic OUT of Main. office.logRequest(r1); office.logRequest(r2); office.logRequest(r3); System.out.println("\n--- LEVEL 1: REQUESTS ---"); + // We loop through ALL stored requests using a for-each loop. + // This demonstrates loop usage. for (MaintenanceRequest r : office.getRequests()) { + System.out.println(r); + + // If severity is 4 or 5, mark as HIGH PRIORITY if (r.getSeverity() >= 4) { System.out.println("HIGH PRIORITY"); } @@ -30,10 +38,13 @@ public static void main(String[] args) { // LEVEL 2 — User intake loop (stop when "done") System.out.println("\n--- LEVEL 2: ENTER REQUESTS ---"); + // This loop continues until user types "done" while (true) { System.out.print("Tenant name (or type 'done'): "); String tenantName = scan.nextLine(); + + // If user types "done", stop the loop if (tenantName.equalsIgnoreCase("done")) { break; } @@ -49,39 +60,52 @@ public static void main(String[] args) { MaintenanceRequest newReq = new MaintenanceRequest(tenantName,apt, issueType, severity); - // Level 2 rules (prints only) + // LEVEL 2 RULES + // If issue is Electrical AND severity >= 4 + // Print warning message if (issueType.equalsIgnoreCase("Electrical") && severity >= 4) { System.out.println(" WARNING: High severity ELECTRICAL issue!"); } + // If severity is 5 → dispatch immediately if (severity == 5) { System.out.println(" DISPATCH IMMEDIATELY: Severity 5 request!"); } + // Send request to MaintenanceOffice to store and assign tech office.logRequest(newReq); System.out.println("Request logged: " + newReq); System.out.println(); } + // We grab all stored requests from the office. ArrayList all = office.getRequests(); + // If at least one request exists, + // demonstrate updating and closing. if (all.size() > 0) { MaintenanceRequest first = all.get(0); System.out.println("\n--- LEVEL 3: STATUS UPDATE DEMO ---"); System.out.println("Before: " + first); + // Update status to IN_PROGRESS office.updateStatus(first, "IN_PROGRESS"); + + // Update status to DONE office.updateStatus(first, "DONE"); - // close only allowed if DONE + // Attempt to close (only works if status is DONE) office.closeRequest(first); System.out.println("After: " + first); } // LEVEL 4 — Daily report + // Generate full system report + // This demonstrates loops + conditionals inside the office class. office.printDailyReport(); + // Close scanner to prevent memory leak warning scan.close(); } } \ No newline at end of file From 5b580554e9752ae03d664f5c75d2dbee72939b13 Mon Sep 17 00:00:00 2001 From: mesheikbrown Date: Sun, 1 Mar 2026 14:59:18 -0500 Subject: [PATCH 6/6] Project is done --- src/main/java/mesheikbrown/Main.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/mesheikbrown/Main.java b/src/main/java/mesheikbrown/Main.java index 68f53e9..9a77072 100644 --- a/src/main/java/mesheikbrown/Main.java +++ b/src/main/java/mesheikbrown/Main.java @@ -11,9 +11,9 @@ public static void main(String[] args) { MaintenanceOffice office = new MaintenanceOffice(); // LEVEL 1 — Create 3 requests and print with loop - MaintenanceRequest r1 = new MaintenanceRequest("Jordan", "2B", "Plumbing", 3); - MaintenanceRequest r2 = new MaintenanceRequest("Coreye", "4A", "Electrical", 5); - MaintenanceRequest r3 = new MaintenanceRequest("Mesheik", "1C", "Heating", 4); + MaintenanceRequest r1 = new MaintenanceRequest("Jordan", "3B", "Plumbing", 3); + MaintenanceRequest r2 = new MaintenanceRequest("Coreye", "5A", "Electrical", 5); + MaintenanceRequest r3 = new MaintenanceRequest("Mesheik", "2C", "Heating", 4); // Instead of storing requests directly in Main, // we send them to the MaintenanceOffice.