@Override @Transactional public LocalizationResponse localize(MeasurementContainer container) { User user = userRepository.findByUsername(container.getUsername()); List<Fingerprint> userPrints = container.getFingerprints(); // We sort the prints to make matching easier Collections.sort(userPrints); List<Place> places = placeRepository.findAll(); // If there are no places we won't do anything if (places.isEmpty()) { return new LocalizationResponse(); } Place leastErraneousPlace = localizationAlgorithms.get(container.getType()).localize(places, userPrints); cutDownHistoryOccurrencesTo9(user.getHistory()); saveAsHistoryOccurrence(leastErraneousPlace, user); LocalizationResponse response = new LocalizationResponse(); response.setPlaceName(leastErraneousPlace.getName()); response.setAuthenticationSuccessful(true); return response; }