package Team5.SmartTowns.placeswithcoordinates; import Team5.SmartTowns.data.Location; import Team5.SmartTowns.data.LocationRepository; import Team5.SmartTowns.data.Trail; import Team5.SmartTowns.data.TrailsRepository; import jakarta.validation.constraints.Max; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import java.util.*; @Controller public class PlacesController { @Autowired private PlacesCoordinatesRepository placeRepo; @Autowired private LocationRepository locationRepo; @Autowired private TrailsRepository trailsRepo; @GetMapping("/towns") public ModelAndView getTownPages(){ ModelAndView modelAndView = new ModelAndView("towns/townsPageList.html"); List<TownWithTrails> townsList = placeRepo.getAllTownCoords(); List<Trail> trailslocations = trailsRepo.getAllTrails(); modelAndView.addObject("trails", trailslocations); modelAndView.addObject("towns", townsList); return modelAndView; } @RequestMapping(value="/town", method= RequestMethod.POST) public String sendHtmlFragmentTown(Model map) { map.addAttribute("foo", "bar"); return "checkpoint/checkpoint"; } @GetMapping("/towns/{town}") public ModelAndView getResultBySearchKeyTowns(@PathVariable String town) { List<TownWithTrails> townsList = placeRepo.getAllTownCoords(); List<Trail> trailslocations = trailsRepo.getAllTrails(); List<Trail> correctTrails = new ArrayList<>(); String townNamee=""; int indexTown=999; for (int i=0;i<townsList.size();i++){ if (Objects.equals(townsList.get(i).getTownName(), town)){ indexTown=i; townNamee=town; } } if (indexTown!=999){ int townIDFromTable= placeRepo.getTownIDFromName(townNamee); for (int i=0;i<trailslocations.size();i++){ int trailID = trailsRepo.getTrailIDFromTrailName(trailslocations.get(i).getTrailName()); if ((trailID>100)&&(trailID<200)){ correctTrails.add(trailslocations.get(i)); } if ((trailID>200)&&(trailID<300)){ correctTrails.add(trailslocations.get(i)); } if ((trailID>300)&&(trailID<400)){ correctTrails.add(trailslocations.get(i)); } } } ModelAndView modelAndView= new ModelAndView("fragments/townsPageFrags :: townSection"); modelAndView.addObject("town", townsList.get(indexTown)); modelAndView.addObject("trails", correctTrails); return modelAndView; } @GetMapping("/checkpoints") public ModelAndView getLocationPages(){ ModelAndView modelAndView = new ModelAndView("landmarks/locationPage.html"); List<LocationsCoordinates> locCoords = placeRepo.getAllLocationCoords(); List<Location> approvedLocations = locationRepo.getAllApprovedLocations(); modelAndView.addObject("location", approvedLocations); modelAndView.addObject("locationCoords", locCoords); return modelAndView; } @RequestMapping(value="/location", method= RequestMethod.POST) public String sendHtmlFragmentLocation(Model map) { map.addAttribute("foo", "bar"); return "checkpoint/checkpoint"; } @GetMapping("/checkpoints/{location}") public ModelAndView getResultBySearchKeyLocation(@PathVariable String location) { List<LocationsCoordinates> locCoords = reorderCoordsWRTLocations(placeRepo.getAllLocationCoords()); List<Location> approvedLocations = locationRepo.getAllApprovedLocations(); int locationID = 999; for (int i=0;i<approvedLocations.size();i++){ if ( (approvedLocations.get(i).getLocationName().replace(' ', '-').trim().equals(location)) ){ locationID= i; } } String trailName=trailsRepo.getTrailNameWithID(approvedLocations.get(locationID).getLocationTrailID()).replace(' ', '-').trim(); ModelAndView modelAndView= new ModelAndView("fragments/locationPageFrags :: locationSection"); modelAndView.addObject("locCoord", locCoords.get(locationID)); modelAndView.addObject("trail", trailName); modelAndView.addObject("location", approvedLocations.get(locationID)); return modelAndView; } /// Trail webpage mapping @GetMapping("/trails") public ModelAndView getTrailsPage(){ ModelAndView modelAndView = new ModelAndView("landmarks/trailsPage.html"); List<LocationsCoordinates> locCoords = placeRepo.getAllLocationCoords(); List<Location> approvedLocations = locationRepo.getAllApprovedLocations(); List<Trail> trailslocations = trailsRepo.getAllTrails(); List<Location> locationCoordsWorkaround = new ArrayList<Location>(); modelAndView.addObject("trails", trailslocations); modelAndView.addObject("locations", approvedLocations); modelAndView.addObject("locationCoords", reorderCoordsWRTLocations(locCoords)); return modelAndView; } @RequestMapping(value="/trail", method= RequestMethod.POST) public String sendHtmlFragmentTrail(Model map) { map.addAttribute("foo", "bar"); return "trail/trail"; } @GetMapping("/trails/{trail}") public ModelAndView getResultBySearchKeyTrails(@PathVariable String trail) { List<LocationsCoordinates> locCoords = placeRepo.getAllLocationCoords(); List<Location> approvedLocations = locationRepo.getAllApprovedLocations(); List<Trail> trailslocations = trailsRepo.getAllTrails(); int trailID = 999;// otherwise cases errors e.g. null used. 999 unlikely to be used so safe until then for (int i=0;i<trailslocations.size();i++){ if (trailslocations.get(i).getTrailName().replace(' ', '-').trim().equals(trail)){ trailID=i; break;} } List<LocationsCoordinates> aa=reorderCoordsWRTLocations(locCoords); ModelAndView modelAndView= new ModelAndView("fragments/trailsPageFrags :: trailsSection"); modelAndView.addObject("trail", trailslocations.get(trailID)); modelAndView.addObject("locCoords", aa); modelAndView.addObject("locations", approvedLocations); return modelAndView; } // public List<LocationsCoordinates> reorderCoordsWRTLocations(List<LocationsCoordinates> locCoords){ // List<Location> approvedList = locationRepo.getAllLocation(); //// List<LocationsCoordinates> locCoords = placeRepo.getAllLocationCoords(); // List<Integer> locationID= new ArrayList<Integer>(); // System.out.println(locCoords); // System.out.println("///////"); // Collections.swap(locCoords,0,10); // for(int i=0;i<locCoords.size();i++){ // if (i==locCoords.size()-1){ // if (locCoords.get(i).getLocationID()<locCoords.get(i-1).getLocationID()){ // Collections.swap(locCoords,i,i--); // i=0; // } // // } // if (locCoords.get(i).getLocationID()>locCoords.get(i++).getLocationID()){ // System.out.println("ASDSADASD"); // Collections.swap(locCoords,i,i++); // i=0; // } // // } System.out.println(locCoords); // return locCoords; // // // // } // When adding to the locationsCoordinates table, the order is not based on LocationID order, therefore it is needed to rearrange this list to // follow ascending locationID so that any new coordinates match up with their intended locations. public List<LocationsCoordinates> reorderCoordsWRTLocations(List<LocationsCoordinates> locCoords){ Collections.sort(locCoords, Comparator.comparingInt(LocationsCoordinates::getLocationID)); System.out.println(locCoords); return locCoords; } }