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
1 change: 0 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,29 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
</plugin>
</plugins>
</build>

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

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();
}
}
138 changes: 138 additions & 0 deletions src/main/java/org/codedifferently/MaintenanceOffice.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package org.codedifferently;

import java.util.ArrayList;

public class MaintenanceOffice {

private ArrayList<MaintenanceRequest> 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<String> 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.");
}
}

83 changes: 83 additions & 0 deletions src/main/java/org/codedifferently/MaintenanceRequest.java
Original file line number Diff line number Diff line change
@@ -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;
}
}