private void parseSolutionsAndAddToResponse(List<List<Label.Transition>> solutions, PointList waypoints) { for (List<Label.Transition> solution : solutions) { final List<Trip.Leg> legs = tripFromLabel.getTrip(translation, graphExplorer, accessEgressWeighting, solution); final PathWrapper pathWrapper = tripFromLabel.createPathWrapper(translation, waypoints, legs); pathWrapper.setImpossible(solution.stream().anyMatch(t -> t.label.impossible)); pathWrapper.setTime((solution.get(solution.size()-1).label.currentTime - solution.get(0).label.currentTime)); response.add(pathWrapper); } Comparator<PathWrapper> c = Comparator.comparingInt(p -> (p.isImpossible() ? 1 : 0)); Comparator<PathWrapper> d = Comparator.comparingDouble(PathWrapper::getTime); response.getAll().sort(c.thenComparing(d)); }
@Override public GHResponse route(GHRequest request) { ResponseBody rspBody = null; try { Request okRequest = createRequest(request); rspBody = getClientForRequest(request).newCall(okRequest).execute().body(); JsonNode json = objectMapper.reader().readTree(rspBody.byteStream()); GHResponse res = new GHResponse(); res.addErrors(readErrors(json)); if (res.hasErrors()) return res; JsonNode paths = json.get("paths"); boolean tmpElevation = request.getHints().getBool("elevation", elevation); boolean tmpTurnDescription = request.getHints().getBool("turn_description", true); for (JsonNode path : paths) { PathWrapper altRsp = createPathWrapper(path, tmpElevation, tmpTurnDescription); res.add(altRsp); } return res; } catch (Exception ex) { throw new RuntimeException("Problem while fetching path " + request.getPoints() + ": " + ex.getMessage(), ex); } finally { Helper.close(rspBody); } }
@Override public boolean isReady(PathMerger pathMerger, Translation tr) { if (ghRequest.getPoints().size() - 1 != pathList.size()) throw new RuntimeException("There should be exactly one more points than paths. points:" + ghRequest.getPoints().size() + ", paths:" + pathList.size()); altResponse.setWaypoints(getWaypoints()); ghResponse.add(altResponse); pathMerger.doWork(altResponse, pathList, tr); return true; }
@Override public boolean isReady(PathMerger pathMerger, Translation tr) { if (pathList.isEmpty()) throw new RuntimeException("Empty paths for alternative route calculation not expected"); // if alternative route calculation was done then create the responses from single paths PointList wpList = getWaypoints(); altResponse.setWaypoints(wpList); ghResponse.add(altResponse); pathMerger.doWork(altResponse, Collections.singletonList(pathList.get(0)), tr); for (int index = 1; index < pathList.size(); index++) { PathWrapper tmpAltRsp = new PathWrapper(); tmpAltRsp.setWaypoints(wpList); ghResponse.add(tmpAltRsp); pathMerger.doWork(tmpAltRsp, Collections.singletonList(pathList.get(index)), tr); } return true; } }
@Override public boolean isReady(PathMerger pathMerger, Translation tr) { altResponse = new PathWrapper(); altResponse.setWaypoints(getWaypoints()); ghResponse.add(altResponse); pathMerger.doWork(altResponse, pathList, tr); // with potentially retrying, including generating new route points, for now disabled return true; }
@Override public boolean isReady( PathMerger pathMerger, Translation tr ) { if (ghRequest.getPoints().size() - 1 != pathList.size()) throw new RuntimeException("There should be exactly one more points than paths. points:" + ghRequest.getPoints().size() + ", paths:" + pathList.size()); altResponse.setWaypoints(getWaypoints()); ghResponse.add(altResponse); pathMerger.doWork(altResponse, pathList, tr); return true; }
@Override public boolean isReady(PathMerger pathMerger, Translation tr) { if (ghRequest.getPoints().size() - 1 != pathList.size()) throw new RuntimeException("There should be exactly one more points than paths. points:" + ghRequest.getPoints().size() + ", paths:" + pathList.size()); altResponse.setWaypoints(getWaypoints()); ghResponse.add(altResponse); pathMerger.doWork(altResponse, pathList, tr); return true; }
@Override public boolean isReady(PathMerger pathMerger, Translation tr) { if (ghRequest.getPoints().size() - 1 != pathList.size()) throw new RuntimeException("There should be exactly one more points than paths. points:" + ghRequest.getPoints().size() + ", paths:" + pathList.size()); altResponse.setWaypoints(getWaypoints()); ghResponse.add(altResponse); pathMerger.doWork(altResponse, pathList, tr); return true; }
@Override public boolean isReady( PathMerger pathMerger, Translation tr ) { if (pathList.isEmpty()) throw new RuntimeException("Empty paths for alternative route calculation not expected"); // if alternative route calculation was done then create the responses from single paths PointList wpList = getWaypoints(); altResponse.setWaypoints(wpList); ghResponse.add(altResponse); pathMerger.doWork(altResponse, Collections.singletonList(pathList.get(0)), tr); for (int index = 1; index < pathList.size(); index++) { PathWrapper tmpAltRsp = new PathWrapper(); tmpAltRsp.setWaypoints(wpList); ghResponse.add(tmpAltRsp); pathMerger.doWork(tmpAltRsp, Collections.singletonList(pathList.get(index)), tr); } return true; } }
@Override public boolean isReady(PathMerger pathMerger, Translation tr) { if (pathList.isEmpty()) throw new RuntimeException("Empty paths for alternative route calculation not expected"); // if alternative route calculation was done then create the responses from single paths PointList wpList = getWaypoints(); altResponse.setWaypoints(wpList); ghResponse.add(altResponse); pathMerger.doWork(altResponse, Collections.singletonList(pathList.get(0)), tr); for (int index = 1; index < pathList.size(); index++) { PathWrapper tmpAltRsp = new PathWrapper(); tmpAltRsp.setWaypoints(wpList); ghResponse.add(tmpAltRsp); pathMerger.doWork(tmpAltRsp, Collections.singletonList(pathList.get(index)), tr); } return true; } }
@Override public boolean isReady(PathMerger pathMerger, Translation tr) { if (pathList.isEmpty()) throw new RuntimeException("Empty paths for alternative route calculation not expected"); // if alternative route calculation was done then create the responses from single paths PointList wpList = getWaypoints(); altResponse.setWaypoints(wpList); ghResponse.add(altResponse); pathMerger.doWork(altResponse, Collections.singletonList(pathList.get(0)), tr); for (int index = 1; index < pathList.size(); index++) { PathWrapper tmpAltRsp = new PathWrapper(); tmpAltRsp.setWaypoints(wpList); ghResponse.add(tmpAltRsp); pathMerger.doWork(tmpAltRsp, Collections.singletonList(pathList.get(index)), tr); } return true; } }
@Override public boolean isReady( PathMerger pathMerger, Translation tr ) { altResponse = new PathWrapper(); altResponse.setWaypoints(getWaypoints()); ghResponse.add(altResponse); pathMerger.doWork(altResponse, pathList, tr); // with potentially retrying, including generating new route points, for now disabled return true; }
@Override public boolean isReady(PathMerger pathMerger, Translation tr) { altResponse = new PathWrapper(); altResponse.setWaypoints(getWaypoints()); ghResponse.add(altResponse); pathMerger.doWork(altResponse, pathList, tr); // with potentially retrying, including generating new route points, for now disabled return true; }
@Override public boolean isReady(PathMerger pathMerger, Translation tr) { altResponse = new PathWrapper(); altResponse.setWaypoints(getWaypoints()); ghResponse.add(altResponse); pathMerger.doWork(altResponse, pathList, tr); // with potentially retrying, including generating new route points, for now disabled return true; }
rsp.add(pathWrapper);