Skip to content

Commit 2a8d33e

Browse files
authored
Merge pull request #309 from entur/feature/stop-place-by-scheduled-stop-point
2 parents 21a6670 + 6bebe5c commit 2a8d33e

File tree

4 files changed

+52
-12
lines changed

4 files changed

+52
-12
lines changed

src/main/java/no/entur/mummu/config/SwaggerConfiguration.java

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,29 @@
55
import com.fasterxml.jackson.databind.SerializationFeature;
66
import io.swagger.v3.core.converter.ModelConverters;
77
import io.swagger.v3.core.jackson.ModelResolver;
8+
import io.swagger.v3.core.util.Json;
89
import io.swagger.v3.oas.models.OpenAPI;
910
import io.swagger.v3.oas.models.servers.Server;
11+
import org.springdoc.core.customizers.SpringDocCustomizers;
12+
import org.springdoc.core.properties.SpringDocConfigProperties;
13+
import org.springdoc.core.providers.ObjectMapperProvider;
1014
import org.springframework.beans.factory.annotation.Value;
1115
import org.springframework.context.annotation.Bean;
1216
import org.springframework.context.annotation.Configuration;
13-
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
1417

1518
import java.util.List;
1619

1720
@Configuration
1821
public class SwaggerConfiguration {
1922

23+
static {
24+
// Configure swagger-core's global JSON mapper for OpenAPI serialization
25+
// This must be done in a static block to run before any OpenAPI processing
26+
ObjectMapper globalMapper = Json.mapper();
27+
globalMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
28+
globalMapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
29+
}
30+
2031
@Value("${no.entur.mummu.swagger.host.url}")
2132
private String hostUrl;
2233

@@ -26,24 +37,28 @@ public SwaggerConfiguration() {
2637
objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
2738
objectMapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
2839

40+
// Configure swagger-core's JSON mapper for schema generation
2941
ModelConverters.getInstance().addConverter(new ModelResolver(objectMapper));
3042
ModelConverters.getInstance().addConverter(new CustomConverters());
3143
}
3244

33-
@Bean
34-
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
35-
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
36-
builder.featuresToEnable(
37-
SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS,
38-
MapperFeature.SORT_PROPERTIES_ALPHABETICALLY
39-
);
40-
return builder;
41-
}
42-
4345
@Bean
4446
public OpenAPI customOpenAPI() {
4547
Server server = new Server();
4648
server.setUrl(hostUrl);
4749
return new OpenAPI().servers(List.of(server));
4850
}
51+
52+
@Bean
53+
public ObjectMapperProvider springDocObjectMapperProvider() {
54+
return new ObjectMapperProvider(new SpringDocConfigProperties()) {
55+
@Override
56+
public ObjectMapper jsonMapper() {
57+
ObjectMapper mapper = super.jsonMapper();
58+
mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
59+
mapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
60+
return mapper;
61+
}
62+
};
63+
}
4964
}

src/main/java/no/entur/mummu/resources/RestResource.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,4 +466,14 @@ public ScheduledStopPoint getScheduledStopPointById(@PathVariable String id) {
466466
public JAXBElement<ScheduledStopPoint> getJAXBElementScheduledStopPointById(@PathVariable String id) {
467467
return netexObjectFactory.createScheduledStopPoint(netexEntitiesService.getScheduledStopPoint(id));
468468
}
469+
470+
@GetMapping(value = "/scheduled-stop-points/{id}/stop-place", produces = "application/json")
471+
public StopPlace getStopPlaceByScheduledStopPointId(@PathVariable String id) {
472+
return netexEntitiesService.getStopPlaceByScheduledStopPointId(id);
473+
}
474+
475+
@GetMapping(value = "/scheduled-stop-points/{id}/stop-place", produces = "application/xml")
476+
public JAXBElement<StopPlace> getJAXBElementStopPlacesByScheduledStopPointId(@PathVariable String id) {
477+
return netexObjectFactory.createStopPlace(netexEntitiesService.getStopPlaceByScheduledStopPointId(id));
478+
}
469479
}

src/main/java/no/entur/mummu/services/NetexEntitiesService.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.ArrayList;
3030
import java.util.Collection;
3131
import java.util.List;
32+
import java.util.Objects;
3233
import java.util.Optional;
3334
import java.util.stream.Collectors;
3435

@@ -336,4 +337,18 @@ public Collection<ScheduledStopPoint> getScheduledStopPointsForStopPlaceWithId(S
336337
public ScheduledStopPoint getScheduledStopPoint(String id) {
337338
return netexEntitiesIndex.getScheduledStopPointIndex().getLatestVersion(id);
338339
}
340+
341+
public StopPlace getStopPlaceByScheduledStopPointId(String id) {
342+
return netexEntitiesIndex.getPassengerStopAssignmentsByStopPointRefIndex().get(id).stream()
343+
.filter(Objects::nonNull)
344+
.filter(passengerStopAssignment -> passengerStopAssignment.getStopPlaceRef() != null)
345+
.map(
346+
passengerStopAssignment ->
347+
netexEntitiesIndex.getStopPlaceIndex().getVersion(
348+
passengerStopAssignment.getStopPlaceRef().getRef(),
349+
passengerStopAssignment.getStopPlaceRef().getVersion()
350+
)
351+
352+
).findFirst().orElseThrow(NotFoundException::new);
353+
}
339354
}

src/main/resources/public/openapi.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)