Skip to content
Open
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
77 changes: 77 additions & 0 deletions src/main/java/org/codedifferently/michaelmoss/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package org.codedifferently.michaelmoss;

import java.util.Scanner;

public class Main {


public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);
MaintenanceOffice office = new MaintenanceOffice();

// Level 1 — Preloaded Requests
MaintenanceRequest r1 = new MaintenanceRequest("John Smith", "101", "Plumbing", 2);
MaintenanceRequest r2 = new MaintenanceRequest("Lisa Brown", "204", "Electrical", 5);
MaintenanceRequest r3 = new MaintenanceRequest("Mark Lee", "305", "HVAC", 4);

office.addRequest(r1);
office.addRequest(r2);
office.addRequest(r3);

System.out.println("Initial Requests:");
for (MaintenanceRequest r : office.getRequests()) {
System.out.println(r);
if (r.getSeverity() >= 4) {
System.out.println("HIGH PRIORITY");
}
}

// Level 2 — User Intake
System.out.println("\nEnter new maintenance requests (type 'done' to stop)");

while (true) {
System.out.print("Tenant name: ");
String name = scanner.nextLine();
if (name.equalsIgnoreCase("done"))
break;

System.out.print("Apartment number: ");
String apt = scanner.nextLine();

System.out.print("Issue type: ");
String issue = scanner.nextLine();

System.out.print("Severity (1-5): ");
int severity = Integer.parseInt(scanner.nextLine());

MaintenanceRequest newRequest = new MaintenanceRequest(name, apt, issue, severity);
office.addRequest(newRequest);

System.out.println("Request logged successfully.");

// Rules
if (issue.equalsIgnoreCase("Electrical") && severity >= 4) {
System.out.println("WARNING: High-risk electrical issue!");
}

if (severity == 5) {
System.out.println("Dispatching technician immediately.");
office.assignTech(newRequest);
}
}

// Level 3 — Mark some requests done for demo
if (!office.getRequests().isEmpty()) {
MaintenanceRequest first = office.getRequests().get(0);
first.setStatus("DONE");
office.closeRequest(first);
}

// Level 4 — Report
office.printDailyReport();

scanner.close();
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package org.codedifferently.michaelmoss;

import java.util.ArrayList;

public class MaintenanceOffice {

private ArrayList<MaintenanceRequest> requests;

public MaintenanceOffice() {
requests = new ArrayList<>();
}

public void addRequest(MaintenanceRequest request) {
requests.add(request);
}

// Assign tech based on severity
public void assignTech(MaintenanceRequest request) {
if (request.getSeverity() >= 4) {
System.out.println("Assigned Senior Technician to Apt " + request.getApartmentNumber());
} else {
System.out.println("Assigned General Technician to Apt " + request.getApartmentNumber());
}
request.setStatus("IN_PROGRESS");
}

// Close request only if DONE
public void closeRequest(MaintenanceRequest request) {
if (request.getStatus().equals("DONE")) {
System.out.println("Request for Apt " + request.getApartmentNumber() + " is now CLOSED.");
} else {
System.out.println("Cannot close. Request is not marked DONE.");
}
}

// Daily Report (Level 4)
public void printDailyReport() {
int total = requests.size();
int open = 0;
int closed = 0;
int low = 0, medium = 0, high = 0;

java.util.HashMap<String, Integer> issueCount = new java.util.HashMap<>();

for (MaintenanceRequest r : requests) {

if (r.getStatus().equals("DONE"))
closed++;
else
open++;

if (r.getSeverity() <= 2)
low++;
else if (r.getSeverity() == 3)
medium++;
else
high++;

issueCount.put(r.getIssueType(),
issueCount.getOrDefault(r.getIssueType(), 0) + 1);
}

// Find most common issue
String commonIssue = "None";
int max = 0;
for (String issue : issueCount.keySet()) {
if (issueCount.get(issue) > max) {
max = issueCount.get(issue);
commonIssue = issue;
}
}

System.out.println("\n--- Daily Maintenance Report ---");
System.out.println("Total Requests: " + total);
System.out.println("Open: " + open + " | Closed: " + closed);
System.out.println("Low: " + low + " | Medium: " + medium + " | High: " + high);
System.out.println("Most Common Issue: " + commonIssue);

if (high > 3) {
System.out.println("WARNING: High priority overload!");
}
}

public ArrayList<MaintenanceRequest> getRequests() {
return requests;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package org.codedifferently.michaelmoss;

public class MaintenanceRequest {

private String tenantName;
private String apartmentNumber;
private String issueType;
private int severity; // 1–5
private String status;

// Default constructor
public MaintenanceRequest() {
this.tenantName = "";
this.apartmentNumber = "";
this.issueType = "";
this.severity = 1;
this.status = "NEW";
}

// Parameterized constructor
public MaintenanceRequest(String tenantName, String apartmentNumber, String issueType, int severity) {
this.tenantName = tenantName;
this.apartmentNumber = apartmentNumber;
this.issueType = issueType;
this.severity = severity;
this.status = "NEW";
}

// 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) {
if (severity >= 1 && severity <= 5) {
this.severity = severity;
}
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
if (status.equals("NEW") || status.equals("IN_PROGRESS") || status.equals("DONE")) {
this.status = status;
} else {
System.out.println("Invalid status.");
}
}

@Override
public String toString() {
return "Tenant: " + tenantName +
", Apt: " + apartmentNumber +
", Issue: " + issueType +
", Severity: " + severity +
", Status: " + status;
}
}