diff --git a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java index 6e4bbb1..1b0d3b1 100644 --- a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java +++ b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java @@ -141,20 +141,20 @@ public class Controller { Cache cache = cacheOptional.get(); bearbeitet.setCache(cache); - Station startStation = cache.getStartStation(); - bearbeitet.setAktuelleStation(startStation); - } else { - return ResponseEntity.status(404).body("Couldnt find Cache " + cacheID); - } + Station startStation = cache.getStationen().get(0); + bearbeitet.setAktuelleStation(startStation); + } else { + return ResponseEntity.status(404).body("Couldnt find Cache " + cacheID); + } - Optional cacheAccesDefinitionOptional = - cacheAccesDefinitionRepository.findById(0); // angefangen - if (cacheAccesDefinitionOptional.isPresent()) { - CacheAccesDefinition cacheAccesDefinition = cacheAccesDefinitionOptional.get(); - bearbeitet.setCacheAccesDefinition(cacheAccesDefinition); - } else { - return ResponseEntity.status(404).body("There is no cacheAccesDefinition with the ID " + 0); - } + Optional cacheAccesDefinitionOptional = + cacheAccesDefinitionRepository.findById(0); // angefangen + if (cacheAccesDefinitionOptional.isPresent()) { + CacheAccesDefinition cacheAccesDefinition = cacheAccesDefinitionOptional.get(); + bearbeitet.setCacheAccesDefinition(cacheAccesDefinition); + } else { + return ResponseEntity.status(404).body("There is no cacheAccesDefinition with the ID " + 0); + } bearbeitetRepository.save(bearbeitet); @@ -194,52 +194,94 @@ public class Controller { } @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose - @RequestMapping("/api/createStation") + @RequestMapping("/api/createCache") @ResponseBody - public ResponseEntity createStation(@RequestParam String description, - @RequestParam String latitude, - @RequestParam String longitude, - @RequestParam String solution) { + public ResponseEntity createCache(@RequestBody Cache cache) { - if (description.length() == 0 || latitude.length() == 0 || longitude.length() == 0 || solution.length() == 0) { - return ResponseEntity.status(400).body("At least one Argument was empty"); - } - - double latti; - double longi; - - try { - latti = Double.valueOf(latitude); - if (latti < -90 || latti > 90) { - return ResponseEntity.status(400).body("Latitude has to be between -90 and 90 Degree"); + // Stationen werden in die Datenbank eingetragen + for (Station station : cache.getStationen()) { + ResponseEntity response = createStation(station); + if (response.getStatusCodeValue() == 400) { + deleteStationen(cache); + return response; } - } catch (NumberFormatException e) { - return ResponseEntity.status(400).body("Latitude has to be a decimal"); } - try { - longi = Double.valueOf(longitude); - if (longi < -180 || longi > 180) { - return ResponseEntity.status(400).body("Longitude has to be in the range of -180 to 180 degrees"); + // Caches werden in die Datenbank eingetragen + if (cache.getDescription().length() == 0 || cache.getName().length() == 0 || cache.getRankingPoints() == 0.0 || cache.getStationen().size() == 0) { + deleteStationen(cache); + return ResponseEntity.status(400).body("cache fields can´t be empty"); + } + + for (Cache cache1 : cacheRepository.findAll()) { + if (cache1.getName().equals(cache.getName())) { + deleteStationen(cache); + return ResponseEntity.status(400).body("name is already taken"); } - } catch (NumberFormatException e) { - return ResponseEntity.status(400).body("Longitude has to be a decimal number"); } - Station station = new Station(); - station.setDescription(description); - station.setLattitude(latti); - station.setLongitude(longi); - station.setSolution(solution); + if (cache.getRankingPoints() < 0) { + deleteStationen(cache); + return ResponseEntity.status(400).body("Ranking points has to be a positive number"); + } + + cacheRepository.save(cache); + + for (int i = 0; i + 1 < cache.getStationen().size(); i++) { + StationReihenfolge stationReihenfolge = new StationReihenfolge(); + stationReihenfolge.setCache(cache); + stationReihenfolge.setStation(cache.getStationen().get(i)); + stationReihenfolge.setNachfolgeStation(cache.getStationen().get(i + 1)); + stationReihenfolgeRepository.save(stationReihenfolge); + } + + return ResponseEntity.status(200).body(new Gson().toJson(cache)); + } + + public ResponseEntity createStation(Station station) { + + if (station.getDescription().length() == 0 || station.getLattitude() == 0.0 || station.getLongitude() == 0.0 || station.getSolution().length() == 0) { + return ResponseEntity.status(400).body("station fields can´t be empty"); + } + + if (station.getLattitude() < -90 || station.getLattitude() > 90) { + return ResponseEntity.status(400).body("Lattitude has to be between -90 and 90 Degree"); + } + + if (station.getLongitude() < -180 || station.getLongitude() > 180) { + return ResponseEntity.status(400).body("Longitude has to be in the range of -180 to 180 degrees"); + } + Random r = new Random(); int low = 100000; int high = 1000000; - int code = r.nextInt(high - low) + low; + int code = 0; + boolean unique = false; + while (!unique) { + code = r.nextInt(high - low) + low; + unique = true; + for (Station station1 : stationRepository.findAll()) { + if (station1.getCode() == code) { + unique = false; + } + } + } + station.setCode(code); stationRepository.save(station); - return ResponseEntity.status(201).body(new Gson().toJson(station)); + return ResponseEntity.status(200).body(new Gson().toJson(station)); + } + + public void deleteStationen(Cache cache) { + for (Station station : cache.getStationen()) { + try { + stationRepository.delete(station); + } catch (IllegalArgumentException e) { // station is null + // do nothing + } + } } @@ -280,60 +322,6 @@ public class Controller { return ResponseEntity.status(200).body(new Gson().toJson(stationRepository.findAll())); } - @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose - @RequestMapping("/api/createCache") - @ResponseBody - public ResponseEntity createCache(@RequestParam String description, - @RequestParam String name, - @RequestParam String rankingPoints, - @RequestParam(value = "rewardID", defaultValue = "-1") String rewardID, - @RequestParam List stationen) { - - if (description.length() == 0 || name.length() == 0 || rankingPoints.length() == 0 || stationen.size() == 0) { - return ResponseEntity.status(400).body("Fields can´t be empty"); - } - - for (Cache cache : cacheRepository.findAll()) { - if (cache.getName().equals(name)) { - return ResponseEntity.status(400).body("name is already taken"); - } - } - - int points; - - try { - points = Integer.valueOf(rankingPoints); - if (points < 0) { - return ResponseEntity.status(400).body("Ranking points has to be a positive number"); - } - } catch (NumberFormatException e) { - return ResponseEntity.status(400).body("Ranking points has to be an integer"); - } - - Optional rewardOptional = rewardRepository.findById(Integer.valueOf(rewardID)); - Reward reward = rewardOptional.orElse(null); - - Cache cache = new Cache(); - cache.setDescription(description); - cache.setName(name); - cache.setRankingPoints(Integer.valueOf(rankingPoints)); - cache.setReward(reward); - cache.setStartStation(stationen.get(0)); - cache.setStationen(stationen); - - cacheRepository.save(cache); - - for (int i = 0; i + 1 < stationen.size(); i++) { - StationReihenfolge stationReihenfolge = new StationReihenfolge(); - stationReihenfolge.setCache(cache); - stationReihenfolge.setStation(stationen.get(i)); - stationReihenfolge.setNachfolgeStation(stationen.get(i + 1)); - stationReihenfolgeRepository.save(stationReihenfolge); - } - - return ResponseEntity.status(200).body(new Gson().toJson(cache)); - } - @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose @RequestMapping("/api/deleteCache") @ResponseBody diff --git a/src/main/java/hhn/labsw/bugageocaching/entities/Cache.java b/src/main/java/hhn/labsw/bugageocaching/entities/Cache.java index 6846b04..465b2cc 100644 --- a/src/main/java/hhn/labsw/bugageocaching/entities/Cache.java +++ b/src/main/java/hhn/labsw/bugageocaching/entities/Cache.java @@ -23,9 +23,6 @@ public class Cache { @ManyToOne private Reward reward; - @ManyToOne - private Station startStation; - public Cache() { } @@ -68,7 +65,7 @@ public class Cache { public void setStationen(List stationen) { this.stationen = stationen; } - + public Reward getReward() { return reward; } @@ -76,12 +73,4 @@ public class Cache { public void setReward(Reward reward) { this.reward = reward; } - - public Station getStartStation() { - return startStation; - } - - public void setStartStation(Station startStation) { - this.startStation = startStation; - } }