diff options
| author | Tharre <tharre3@gmail.com> | 2018-05-24 14:44:57 +0200 | 
|---|---|---|
| committer | Tharre <tharre3@gmail.com> | 2018-05-24 15:44:18 +0200 | 
| commit | 81ce4fe6d5cebff6054b70620b7b8130e9b8ad10 (patch) | |
| tree | 901568dafb87a496bcb9333e1207289c280d42aa /src/main/java/at | |
| parent | e594ae7ee261bd3359d8cce55deda989bcb33206 (diff) | |
| download | sepm-groupproject-81ce4fe6d5cebff6054b70620b7b8130e9b8ad10.tar.gz sepm-groupproject-81ce4fe6d5cebff6054b70620b7b8130e9b8ad10.tar.xz sepm-groupproject-81ce4fe6d5cebff6054b70620b7b8130e9b8ad10.zip  | |
Implement rankVehicles from Andi #25963
Diffstat (limited to 'src/main/java/at')
| -rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java | 67 | 
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  | 
