aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java67
1 files changed, 65 insertions, 2 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java
index e1d6f29..a89e3b1 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java
@@ -6,6 +6,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation;
import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity;
import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status;
import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType;
import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException;
import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException;
import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException;
@@ -13,12 +14,17 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
import java.lang.invoke.MethodHandles;
import java.time.Instant;
+import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@@ -30,10 +36,13 @@ public class OperationServiceImpl implements OperationService {
private final OperationDAO operationDAO;
private final VehicleDAO vehicleDAO;
+ private final VehicleService vehicleService;
- public OperationServiceImpl(OperationDAO operationDAO, VehicleDAO vehicleDAO) {
+ public OperationServiceImpl(
+ OperationDAO operationDAO, VehicleDAO vehicleDAO, VehicleService vehicleService) {
this.operationDAO = operationDAO;
this.vehicleDAO = vehicleDAO;
+ this.vehicleService = vehicleService;
}
@Override
@@ -124,7 +133,61 @@ public class OperationServiceImpl implements OperationService {
@Override
public SortedSet<Vehicle> rankVehicles(String opCode)
throws InvalidOperationException, ServiceException {
- throw new UnsupportedOperationException();
+ Set<Vehicle> vehicles =
+ vehicleService.list(EnumSet.complementOf(EnumSet.of(Vehicle.Status.ABGEMELDET)));
+
+ List<Predicate<Vehicle>> priorities = new ArrayList<>();
+ Predicate<Vehicle> ktw = v -> v.type() == VehicleType.KTW;
+ Predicate<Vehicle> rtwNoNEF = v -> v.type() == VehicleType.RTW && !v.hasNef();
+ Predicate<Vehicle> rtwNEF = v -> v.type() == VehicleType.RTW && v.hasNef();
+ Predicate<Vehicle> nef = v -> v.type() == VehicleType.NEF;
+ Predicate<Vehicle> nah = v -> v.type() == VehicleType.NAH;
+
+ switch (extractSeverityFromOpCode(opCode)) {
+ case A:
+ // fallthrough
+ case B:
+ // fallthrough
+ case O:
+ priorities.add(ktw);
+ priorities.add(rtwNoNEF);
+ priorities.add(rtwNEF);
+ break;
+ case C:
+ priorities.add(rtwNEF);
+ priorities.add(rtwNoNEF);
+ priorities.add(ktw);
+ break;
+ case D:
+ priorities.add(rtwNEF);
+ priorities.add(nef);
+ priorities.add(nah);
+ priorities.add(rtwNoNEF);
+ priorities.add(ktw);
+ break;
+ case E:
+ priorities.add(nah);
+ priorities.add(nef);
+ priorities.add(rtwNEF);
+ priorities.add(rtwNoNEF);
+ priorities.add(ktw);
+ break;
+ }
+
+ return vehicles.stream()
+ .sorted(
+ (v1, v2) -> {
+ for (Predicate<Vehicle> priority : priorities) {
+ if (priority.test(v1)) {
+ return -1;
+ }
+ if (priority.test(v2)) {
+ return +1;
+ }
+ }
+ return 0;
+ })
+ .collect(Collectors.toCollection(TreeSet::new));
}
@Override