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
85 changes: 75 additions & 10 deletions src/main/java/org/codedifferently/Main.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,82 @@
package org.codedifferently;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
//TIP Press <shortcut actionId="ShowIntentionActions"/> 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 <shortcut actionId="Debug"/> to start debugging your code. We have set one <icon src="AllIcons.Debugger.Db_set_breakpoint"/> breakpoint
// for you, but you can always add more by pressing <shortcut actionId="ToggleLineBreakpoint"/>.
System.out.println("i = " + i);

// Initialize office and technicians
ArrayList<Technician> techs = new ArrayList<>();
techs.add(new Technician("ELECTRICAL", "Wilson Fisk"));
techs.add(new Technician("PLUMBING", "Steve Rogers"));
techs.add(new Technician("HVAC", "Frank Castle"));
techs.add(new Technician("APPLIANCE", "Luke Cage"));

ArrayList<MaintenanceRequest> requests = new ArrayList<>();
MaintenanceOffice office = new MaintenanceOffice(techs, requests);

// Level 1: create at least 3 requests
MaintenanceRequest r1 = new MaintenanceRequest("Alice", 101, "ELECTRICAL", 3);
MaintenanceRequest r2 = new MaintenanceRequest("Bob", 202, "PLUMBING", 2);
MaintenanceRequest r3 = new MaintenanceRequest("Charlie", 303, "HVAC", 4);

office.addRequest(r1);
office.addRequest(r2);
office.assignTechnician(r2);
//mark a request as done
r2.setStatus("DONE");
office.addRequest(r3);
office.assignTechnician(r3);

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

// level 2 and 3: intake from user and assign and update
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("Enter tenant name (or 'done' to finish):");
String tenantName = scanner.nextLine();
if (tenantName.equalsIgnoreCase("done")) {
break;
}

System.out.println("Enter apartment number:");
String aptNum = scanner.nextLine().toUpperCase();

System.out.println("Enter issue type (Electrical, Plumbing, HVAC, Appliance):");
String issueType = scanner.nextLine().toUpperCase();

System.out.println("Enter severity (1-5):");
int severity;
try {
severity = Integer.parseInt(scanner.nextLine());
if (severity < 1 || severity > 5) {
System.out.println("Invalid severity. Must be 1-5. Defaulting to 3.");
severity = 3;
}
} catch (NumberFormatException e) {
System.out.println("Invalid number. Defaulting to 3.");
severity = 3;
}

MaintenanceRequest newRequest = new MaintenanceRequest(tenantName, Integer.parseInt(aptNum), issueType, severity);
office.addRequest(newRequest);
// Print confirmation
office.assignTechnician(newRequest);
System.out.println("Request added: " + newRequest);
}

//level 4: daily report
office.generateDailyReport();

scanner.close();
}
}
162 changes: 162 additions & 0 deletions src/main/java/org/codedifferently/MaintenanceOffice.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
package org.codedifferently;
import java.util.ArrayList;

public class MaintenanceOffice {
//private fields for the maintenance office
private ArrayList<Technician> technicians;
private ArrayList<MaintenanceRequest> requests;

//constructor
public MaintenanceOffice(ArrayList<Technician> technicians, ArrayList<MaintenanceRequest> requests) {
this.technicians = technicians;
this.requests = requests;
}

//getters and setters to access private instance variables
public ArrayList<Technician> getTechnicians() {
return technicians;
}

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

//adds a request to the request lists
public void addRequest(MaintenanceRequest request){
requests.add(request);
}

//adds a tech to the list of technicians
public void addTechnician(Technician technician){
technicians.add(technician);
}

//assigns a technician to the request that's being passed in
public void assignTechnician(MaintenanceRequest request){
//electrical high severity warning
if (request.getIssueType().equals("ELECTRICAL")
&& request.getSeverity() >= 4) {

System.out.println("WARNING: High severity electrical issue!");
}

// immediate dispatch for severity 5
if (request.getSeverity() == 5) {
System.out.println("DISPATCH IMMEDIATELY!");
}

for (Technician technician : technicians){
if(technician.getType().equals(request.getIssueType())) {
request.setAssignedTechnician(technician);
updateRequestStatus(request,"IN_PROGRESS");
return;
}
}
System.out.println("No technician available for this issue.");
}

//updates the request status of the request passed in
public void updateRequestStatus(MaintenanceRequest request, String newStatus) {
request.setStatus(newStatus);
}

//closes the request
public void closeRequest(MaintenanceRequest request){
System.out.println("Request closed successfully.");
}

//displays detailed info about the requests that come in
public void generateDailyReport() {
int open = countOpenRequests();
int closed = countClosedRequests();
int[] severityCounts = countSeverity(); // [low, medium, high]
int low = severityCounts[0];
int medium = severityCounts[1];
int high = severityCounts[2];

String mostCommonIssueType = getMostCommonIssueType();
int highPriorityCount = high; // high severity = severity 4-5

// Print report
System.out.println("***** DAILY MAINTENANCE REPORT *****");
System.out.println("Total Requests: " + requests.size());
System.out.println("Open Requests: " + open);
System.out.println("Closed Requests: " + closed);

System.out.println("Severity Breakdown:");
System.out.println("Low (1-2): " + low);
System.out.println("Medium (3): " + medium);
System.out.println("High (4-5): " + high);

System.out.println("Most Common Issue Type: " + mostCommonIssueType);

if (highPriorityCount > 3) {
System.out.println("OVERLOAD WARNING: Too many high priority requests!");
}
}

// helper methods for the daily report method
//gets the total amount of the open requests
private int countOpenRequests() {
int count = 0;
for (MaintenanceRequest request : requests) {
if (!request.getStatus().equals("DONE")) {
count++;
}
}
return count;
}

//gets the total amount of closed requests
private int countClosedRequests() {
int count = 0;
for (MaintenanceRequest r : requests) {
if (r.getStatus().equals("DONE")) {
count++;
}
}
return count;
}

private int[] countSeverity() {
int low = 0, medium = 0, high = 0;
for (MaintenanceRequest request : requests) {
if (request.getSeverity()<= 2) {
low++;
} else if (request.getSeverity() == 3) {
medium++;
} else {
high++;
}
}
return new int[]{low, medium, high};
}

//gets the type that appears the most in the list of the requests
private String getMostCommonIssueType() {
String mostCommonType = "";
int highestCount = 0;
ArrayList<String> checked = new ArrayList<>();

for (MaintenanceRequest request : requests) {
String type = request.getIssueType();

// only count this issue type if we haven’t already processed it
if (!checked.contains(type)) {
int count = 0;
for (MaintenanceRequest r : requests) {
if (r.getIssueType().equals(type)) {
count++;
}
}
//max pattern
if (count > highestCount) {
highestCount = count;
mostCommonType = type;
}
checked.add(type);
}
}
return mostCommonType;
}
}
86 changes: 86 additions & 0 deletions src/main/java/org/codedifferently/MaintenanceRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package org.codedifferently;

public class MaintenanceRequest {
//fields of a maintenance request
private String tenantName;
private int apartmentNumber;
private String issueType;
private int severity;
private String status;
private Technician assignedTechnician;

//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";
}

//getters and setters to access private instance variables
public String getTenantName() {
return tenantName;
}

public void setTenantName(String tenantName) {
this.tenantName = tenantName;
}

public int getApartmentNumber() {
return apartmentNumber;
}

public void setApartmentNumber(int 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) {
//checks to see if the severity is valid or not
if (severity >= 1 && severity <= 5) {
this.severity = severity;
} else {
System.out.println("Invalid severity.");
}
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public Technician getAssignedTechnician() {
return assignedTechnician;
}

public void setAssignedTechnician(Technician assignedTechnician) {
this.assignedTechnician = assignedTechnician;
}

//displays the info of the request
@Override
public String toString() {
String techName = (assignedTechnician != null) ? assignedTechnician.getName() : "None";
return "Tenant: " + tenantName +
" | Apt: " + apartmentNumber +
" | Issue: " + issueType +
" | Severity: " + severity +
" | Status: " + status +
" | Assigned Technician: " + techName;
}
}
30 changes: 30 additions & 0 deletions src/main/java/org/codedifferently/Technician.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package org.codedifferently;

public class Technician {
//private fields of a technician
private String type;
private String name;

//constructor
public Technician(String type, String name){
this.type = type;
this.name = name;
}

//getters and setters for the private fields
public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}