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 bda9b1859..5e2a9a7fb 100644 --- a/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java +++ b/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java @@ -365,6 +365,26 @@ ResponseEntity getRouteDetails( @RequestParam(value = "tripPattern", required = false) String tripPatternId); + /** + * Handles the "routesDetails" command for specified stop ID. Provides detailed information for a route includes all + * stops and paths. + * + * @param stdParameters + * + * @return + */ + @GetMapping(value = "/command/routesDetailsByStopId", + produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) + @Operation( + summary = "Provides detailed information for a route.", + description = "Provides detailed information for a route includes specified stop Id " + + "and paths such that it can be drawn in a map.", + tags = {"base data", "route"}) + ResponseEntity getRouteDetailsByStopId( + StandardParameters stdParameters, + @Parameter(description = "Stop id") @RequestParam(value = "id") + String stopId); + /** * Handles the "stops" command. Returns all stops associated with a route, grouped by direction. * Useful for creating a UI where user needs to select a stop from a list. diff --git a/app/src/main/java/org/transitclock/api/resources/TransitimeResource.java b/app/src/main/java/org/transitclock/api/resources/TransitimeResource.java index b784711d3..e8c31cd29 100644 --- a/app/src/main/java/org/transitclock/api/resources/TransitimeResource.java +++ b/app/src/main/java/org/transitclock/api/resources/TransitimeResource.java @@ -386,7 +386,20 @@ public ResponseEntity getRouteDetails( // ApiRoutesDetails object ApiRoutesDetailsResponse routeData = new ApiRoutesDetailsResponse(ipcRoutes, agencies.get(0)); return stdParameters.createResponse(routeData); + } + @Override + public ResponseEntity getRouteDetailsByStopId( + StandardParameters stdParameters, + String stopId) { + // Get agency info so can also return agency name + List agencies = configService.getAgencies(); + // Retrieve filtered routs + var ipcRoutes = configService.getRoutesByStopId(stopId); + // Take the IpcRoute data array and create and return + // ApiRoutesDetails object + ApiRoutesDetailsResponse routeData = new ApiRoutesDetailsResponse(ipcRoutes, agencies.get(0)); + return stdParameters.createResponse(routeData); } @Override diff --git a/libs/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java b/libs/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java index 2edfe723e..f33dad3e4 100644 --- a/libs/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java +++ b/libs/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java @@ -1,9 +1,11 @@ /* (C)2023 */ package org.transitclock.service; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + import org.transitclock.core.dataCache.PredictionDataCache; import org.transitclock.core.dataCache.VehicleDataCache; import org.transitclock.domain.structs.Agency; @@ -28,10 +30,9 @@ import org.transitclock.service.dto.IpcTripPattern; import org.transitclock.service.dto.IpcVehicleComplete; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * Implements ConfigInterface to serve up configuration information to RMI clients. @@ -372,4 +373,20 @@ public List getBlockIds(String serviceId) { .distinct() .collect(Collectors.toList()); } -} + + /* (non-Javadoc) + * @see org.transitclock.ipc.interfaces.ConfigInterface#getRoutesByStopId() + */ + @Override + public List getRoutesByStopId(String stopId) { + return dbConfig.getRoutesForStop(stopId) + .stream() + .map(dbRoute -> new IpcRoute(dbRoute, + dbConfig, + null, + null, + null, + null)) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/libs/core/src/main/java/org/transitclock/service/contract/ConfigService.java b/libs/core/src/main/java/org/transitclock/service/contract/ConfigService.java index 0d72fdee2..68dad043b 100644 --- a/libs/core/src/main/java/org/transitclock/service/contract/ConfigService.java +++ b/libs/core/src/main/java/org/transitclock/service/contract/ConfigService.java @@ -176,4 +176,12 @@ IpcRoute getRoute(String routeIdOrShortName, String directionId, String stopId, * @return vehicle IDs */ List getBlockIds(String serviceId); + + /** + * Obtains list of routes which contained stops with following stop ID + * + * @param stopId + * @return list of IpcRoute + */ + List getRoutesByStopId(String stopId); }