From e73e2f4432e0dffeae2cf642a321ec504dd5ff1f Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu Date: Thu, 16 May 2024 13:46:09 +0200 Subject: [PATCH 1/3] add endpoint /command/serviceIdsWithBlocks with implementations --- .../transitclock/api/data/ApiServiceId.java | 25 ++++++++++++++++ .../api/data/ApiServiceIdResponse.java | 30 +++++++++++++++++++ .../api/resources/TransitimeApi.java | 18 +++++++++++ .../api/resources/TransitimeResource.java | 15 ++++++++++ .../java/org/transitclock/gtfs/DbConfig.java | 17 +++++++++++ .../service/ConfigServiceImpl.java | 10 +++++++ .../service/contract/ConfigService.java | 11 ++++++- 7 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/transitclock/api/data/ApiServiceId.java create mode 100644 app/src/main/java/org/transitclock/api/data/ApiServiceIdResponse.java diff --git a/app/src/main/java/org/transitclock/api/data/ApiServiceId.java b/app/src/main/java/org/transitclock/api/data/ApiServiceId.java new file mode 100644 index 000000000..57a8136f2 --- /dev/null +++ b/app/src/main/java/org/transitclock/api/data/ApiServiceId.java @@ -0,0 +1,25 @@ +/* (C)2023 */ +package org.transitclock.api.data; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * A short description of a serviceId. For when outputting list of block IDs for service. + */ +@Data +public class ApiServiceId { + + @JsonProperty + private String id; + + @JsonProperty + private List blockIds; + + public ApiServiceId(String serviceId, List blockIds) { + this.id = serviceId; + this.blockIds = blockIds; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/transitclock/api/data/ApiServiceIdResponse.java b/app/src/main/java/org/transitclock/api/data/ApiServiceIdResponse.java new file mode 100644 index 000000000..c0ee122ea --- /dev/null +++ b/app/src/main/java/org/transitclock/api/data/ApiServiceIdResponse.java @@ -0,0 +1,30 @@ +/* (C)2023 */ +package org.transitclock.api.data; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * For outputting simple list of unsorted service IDs with lists of sorted block IDs + */ +@Data +public class ApiServiceIdResponse { + + @JsonProperty("serviceIds") + private List apiServiceIds; + + /** + * Creates the API unsorted version of list of IDs. + * + * @param serviceIds + */ + public ApiServiceIdResponse(Map> serviceIds) { + apiServiceIds = new ArrayList<>(); + serviceIds.forEach((key, list) -> apiServiceIds + .add(new ApiServiceId(key, list))); + } +} \ No newline at end of file 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 740ad5b9f..e0d9a00da 100644 --- a/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java +++ b/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java @@ -18,6 +18,7 @@ import org.transitclock.api.data.ApiRoutesDetailsResponse; import org.transitclock.api.data.ApiSchedulesHorizStops; import org.transitclock.api.data.ApiSchedulesVertStopsResponse; +import org.transitclock.api.data.ApiServiceIdResponse; import org.transitclock.api.data.ApiTrip; import org.transitclock.api.data.ApiTripPatternsResponse; import org.transitclock.api.data.ApiTripWithTravelTimes; @@ -846,6 +847,23 @@ ResponseEntity getScheduleHorizStops( tags = {"base data", "serviceId"}) ResponseEntity getServiceIds(StandardParameters stdParameters); + /** + * Handles the "serviceIds" command. Returns list of all service IDs with assigned blocks. + * + * @param stdParameters + * + * @return + * + * @ + */ + @GetMapping(value = "/command/serviceIdsWithBlocks", + produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) + @Operation( + summary = "Retrives all service id with block ids.", + description = "Retrives all service id with block ids.", + tags = {"base data", "serviceId"}) + ResponseEntity getServiceIdsWithBlocks(StandardParameters stdParameters); + /** * Handles the currentServiceIds command. Returns list of service IDs that are currently active. * 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..d364ea1f3 100644 --- a/app/src/main/java/org/transitclock/api/resources/TransitimeResource.java +++ b/app/src/main/java/org/transitclock/api/resources/TransitimeResource.java @@ -24,6 +24,7 @@ import org.transitclock.api.data.ApiRoutesResponse; import org.transitclock.api.data.ApiSchedulesHorizStops; import org.transitclock.api.data.ApiSchedulesVertStopsResponse; +import org.transitclock.api.data.ApiServiceIdResponse; import org.transitclock.api.data.ApiTrip; import org.transitclock.api.data.ApiTripPatternsResponse; import org.transitclock.api.data.ApiTripWithTravelTimes; @@ -847,6 +848,20 @@ public ResponseEntity getServiceIds(StandardParameters stdParame } } + @Override + public ResponseEntity getServiceIdsWithBlocks(StandardParameters stdParameters) { + try { + // Get Vehicle data from server + Map> idsWithBlockIds = configService.getServiceIdsWithBlockIds(); + + ApiServiceIdResponse apiServiceIds = new ApiServiceIdResponse(idsWithBlockIds); + return stdParameters.createResponse(apiServiceIds); + } catch (Exception e) { + // If problem getting data then return a Bad Request + throw WebUtils.badRequestException(e); + } + } + @Override public ResponseEntity getCurrentServiceIds(StandardParameters stdParameters) { try { diff --git a/libs/core/src/main/java/org/transitclock/gtfs/DbConfig.java b/libs/core/src/main/java/org/transitclock/gtfs/DbConfig.java index 1ae5d4d45..d721b35c2 100644 --- a/libs/core/src/main/java/org/transitclock/gtfs/DbConfig.java +++ b/libs/core/src/main/java/org/transitclock/gtfs/DbConfig.java @@ -684,6 +684,23 @@ public int getBlockCount() { return blockCount; } + /** + * Returns sorted lists of block IDs what belong to all service IDs + * + * @return Map of all service IDs with belong to block IDs + */ + public Map> getBlockIdsForAllServiceIds() { + Map> serviceIdsWithBlocks = new HashMap<>(); + + blocksByServiceMap.forEach((key, element) -> { + List ids = new ArrayList<>(); + element.forEach((innerKey, block) -> ids.add(block.getId())); + Collections.sort(ids); + serviceIdsWithBlocks.put(key, ids); + }); + return serviceIdsWithBlocks; + } + /** * Returns blocks for the specified blockId for all service IDs. * 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..b6e0219ee 100644 --- a/libs/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java +++ b/libs/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java @@ -30,7 +30,9 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -372,4 +374,12 @@ public List getBlockIds(String serviceId) { .distinct() .collect(Collectors.toList()); } + + /* (non-Javadoc) + * @see org.transitclock.ipc.interfaces.ConfigInterface#getBlockIds() + */ + @Override + public Map> getServiceIdsWithBlockIds() { + return dbConfig.getBlockIdsForAllServiceIds(); + } } 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..cb922d09c 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 @@ -14,6 +14,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; /** * Defines the RMI interface for getting configuration data. @@ -52,7 +53,7 @@ IpcRoute getRoute(String routeIdOrShortName, String directionId, String stopId, /** * Obtains ordered list of route details * - * @param routeIdOrShortName + * @param routeIdsOrShortNames * @return */ List getRoutes(List routeIdsOrShortNames); @@ -176,4 +177,12 @@ IpcRoute getRoute(String routeIdOrShortName, String directionId, String stopId, * @return vehicle IDs */ List getBlockIds(String serviceId); + + + /** + * Returns sorted lists of block IDs what belong to all service IDs + * + * @return Map of service IDs with belong block IDs + */ + Map> getServiceIdsWithBlockIds(); } From f0b4adc30584d865d04d4813ae467484c1e1d3eb Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu Date: Sun, 9 Jun 2024 20:27:32 +0200 Subject: [PATCH 2/3] fix: name of field & change iteration to stream according to the #24 review --- .../api/data/ApiServiceIdResponse.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/transitclock/api/data/ApiServiceIdResponse.java b/app/src/main/java/org/transitclock/api/data/ApiServiceIdResponse.java index c0ee122ea..c225d4ec7 100644 --- a/app/src/main/java/org/transitclock/api/data/ApiServiceIdResponse.java +++ b/app/src/main/java/org/transitclock/api/data/ApiServiceIdResponse.java @@ -1,9 +1,9 @@ /* (C)2023 */ package org.transitclock.api.data; -import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @@ -14,17 +14,18 @@ @Data public class ApiServiceIdResponse { - @JsonProperty("serviceIds") - private List apiServiceIds; + @JsonProperty + private List serviceIds; /** * Creates the API unsorted version of list of IDs. * - * @param serviceIds + * @param services */ - public ApiServiceIdResponse(Map> serviceIds) { - apiServiceIds = new ArrayList<>(); - serviceIds.forEach((key, list) -> apiServiceIds - .add(new ApiServiceId(key, list))); + public ApiServiceIdResponse(Map> services) { + serviceIds = services.entrySet() + .stream() + .map(entry -> new ApiServiceId(entry.getKey(), entry.getValue())) + .collect(Collectors.toList()); } } \ No newline at end of file From cc36ca6df685da0b3f09c8063901e443bb725ac4 Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu <91431503+TsimurSh@users.noreply.github.com> Date: Tue, 9 Jul 2024 17:54:40 +0200 Subject: [PATCH 3/3] fix: comment's missing line --- .../java/org/transitclock/service/ConfigServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 63a9434f7..d2edc83ff 100644 --- a/libs/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java +++ b/libs/core/src/main/java/org/transitclock/service/ConfigServiceImpl.java @@ -375,6 +375,7 @@ public List getBlockIds(String serviceId) { .collect(Collectors.toList()); } + /* (non-Javadoc) * @see org.transitclock.ipc.interfaces.ConfigInterface#getRoutesByStopId() */ @Override @@ -390,11 +391,11 @@ public List getRoutesByStopId(String stopId) { .collect(Collectors.toList()); } - /* (non-Javadoc) - * @see org.transitclock.ipc.interfaces.ConfigInterface#getBlockIds() + /* (non-Javadoc) + * @see org.transitclock.ipc.interfaces.ConfigInterface#getServiceIdsWithBlockIds() */ @Override public Map> getServiceIdsWithBlockIds() { return dbConfig.getBlockIdsForAllServiceIds(); } -} \ No newline at end of file +}