From 28f089939e49e6f52b84240cea3e93d91ac1c2f4 Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu Date: Fri, 19 Apr 2024 14:50:28 +0200 Subject: [PATCH 1/2] add a new method getRoutesByStopId --- .../service/ConfigServiceImpl.java | 43 +++++++++++-------- .../service/contract/ConfigInterface.java | 18 ++++---- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java b/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java index 79abb0cd0..0a6d35353 100644 --- a/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java +++ b/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java @@ -4,23 +4,10 @@ import lombok.extern.slf4j.Slf4j; import org.transitclock.Core; import org.transitclock.core.dataCache.VehicleDataCache; -import org.transitclock.domain.structs.Agency; -import org.transitclock.domain.structs.Block; -import org.transitclock.domain.structs.Calendar; -import org.transitclock.domain.structs.Route; -import org.transitclock.domain.structs.Trip; -import org.transitclock.domain.structs.TripPattern; -import org.transitclock.domain.structs.VehicleConfig; +import org.transitclock.domain.structs.*; import org.transitclock.gtfs.DbConfig; import org.transitclock.service.contract.ConfigInterface; -import org.transitclock.service.dto.IpcBlock; -import org.transitclock.service.dto.IpcCalendar; -import org.transitclock.service.dto.IpcDirectionsForRoute; -import org.transitclock.service.dto.IpcRoute; -import org.transitclock.service.dto.IpcRouteSummary; -import org.transitclock.service.dto.IpcSchedule; -import org.transitclock.service.dto.IpcTrip; -import org.transitclock.service.dto.IpcTripPattern; +import org.transitclock.service.dto.*; import java.util.ArrayList; import java.util.Collection; @@ -49,7 +36,7 @@ public static ConfigInterface instance() { * automatically cause the object to continue to run and serve requests. * * @return the singleton ConfigServer object. Usually does not need to used since the server - * will be fully running. + * will be fully running. */ public static ConfigServiceImpl start() { if (singleton == null) { @@ -99,8 +86,7 @@ public Collection getRoutes() { * @see org.transitclock.ipc.interfaces.ConfigInterface#getRoute(java.lang.String) */ @Override - public IpcRoute getRoute(String routeIdOrShortName, String directionId, String stopId, String tripPatternId) - { + public IpcRoute getRoute(String routeIdOrShortName, String directionId, String stopId, String tripPatternId) { // Determine the route Route dbRoute = getRoute(routeIdOrShortName); if (dbRoute == null) { @@ -363,7 +349,7 @@ public List getBlockIds(String serviceId) { } /* (non-Javadoc) - * @see org.transitclock.ipc.interfaces.ConfigInterface#getBlockIds() + * @see org.transitclock.ipc.interfaces.ConfigInterface#getServiceIdsWithBlockIds() */ @Override public Map> getServiceIdsWithBlockIds() { @@ -371,4 +357,23 @@ public Map> getServiceIdsWithBlockIds() { .getDbConfig() .getBlockIdsForAllServiceIds(); } + + /* (non-Javadoc) + * @see org.transitclock.ipc.interfaces.ConfigInterface#getRoutesByStopId() + */ + @Override + public List getRoutesByStopId(String stopId) { + List routes = new ArrayList<>(); + if (stopId != null) { + DbConfig dbConfig = Core.getInstance().getDbConfig(); + if (dbConfig == null) return routes; + + routes = dbConfig.getRoutes().stream() + .filter(dbRoute -> dbRoute.getStops().stream() + .anyMatch(stop -> stop.getId().equals(stopId))) + .map(dbRoute -> new IpcRoute(dbRoute, null, null, null)) + .collect(Collectors.toList()); + } + return routes; + } } diff --git a/core/src/main/java/org/transitclock/service/contract/ConfigInterface.java b/core/src/main/java/org/transitclock/service/contract/ConfigInterface.java index d8e59e759..abb727a04 100644 --- a/core/src/main/java/org/transitclock/service/contract/ConfigInterface.java +++ b/core/src/main/java/org/transitclock/service/contract/ConfigInterface.java @@ -2,14 +2,7 @@ package org.transitclock.service.contract; import org.transitclock.domain.structs.Agency; -import org.transitclock.service.dto.IpcBlock; -import org.transitclock.service.dto.IpcCalendar; -import org.transitclock.service.dto.IpcDirectionsForRoute; -import org.transitclock.service.dto.IpcRoute; -import org.transitclock.service.dto.IpcRouteSummary; -import org.transitclock.service.dto.IpcSchedule; -import org.transitclock.service.dto.IpcTrip; -import org.transitclock.service.dto.IpcTripPattern; +import org.transitclock.service.dto.*; import java.util.Collection; import java.util.List; @@ -182,4 +175,13 @@ IpcRoute getRoute(String routeIdOrShortName, String directionId, String stopId, * @return Map of service IDs with belong block IDs */ Map> getServiceIdsWithBlockIds(); + + + /** + * Obtains list of routes which contained stops with following stop ID + * + * @param stopId + * @return list of IpcRoute + */ + List getRoutesByStopId(String stopId); } From d3e12572b5566099e6114853757d8c88d0f36d6c Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu Date: Fri, 19 Apr 2024 15:47:36 +0200 Subject: [PATCH 2/2] fix /command/routesDetails parameter stopId --- .../org/transitclock/api/resources/TransitimeApi.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java b/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java index d87b2dabb..6ce2ebf57 100644 --- a/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java +++ b/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java @@ -1032,6 +1032,15 @@ public Response getRouteDetails( ipcRoutes = new ArrayList(); ipcRoutes.add(route); + } if (stopId != null) { + + ipcRoutes = inter.getRoutesByStopId(stopId); + + // If the stop doesn't exist then throw exception such that + // Bad Request with an appropriate message is returned. + if (ipcRoutes == null || ipcRoutes.isEmpty()) + throw WebUtils.badRequestException("Routes for stop ID= " + stopId + " does not exist."); + } else { // Multiple routes specified ipcRoutes = inter.getRoutes(routeIdsOrShortNames);