in baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java [90:153]
public Integer call() throws Exception {
var objectMapper = objectMapper();
var configReader = new ConfigReader();
var caffeineSpec = CaffeineSpec.parse(cache);
var tileset = objectMapper.readValue(configReader.read(tilesetPath), Tileset.class);
var datasource = PostgresUtils.createDataSourceFromObject(tileset.getDatabase());
var postgresVersion = PostgresUtils.getPostgresVersion(datasource);
try (
var tileStore = new PostgresTileStore(datasource, tileset, postgresVersion);
var tileCache = new VectorTileCache(tileStore, caffeineSpec)) {
var tileStoreSupplier = (Supplier<TileStore<ByteBuffer>>) () -> tileCache;
var style = objectMapper.readValue(configReader.read(stylePath), Style.class);
var styleSupplier = (Supplier<Style>) () -> style;
var tileJSON = objectMapper.readValue(configReader.read(tilesetPath), TileJSON.class);
var tileJSONSupplier = (Supplier<TileJSON>) () -> tileJSON;
var serverBuilder = Server.builder();
serverBuilder.http(port);
var jsonResponseConverter = new JacksonResponseConverterFunction(objectMapper);
serverBuilder.annotatedService("/tiles", new VectorTileResource(tileStoreSupplier),
jsonResponseConverter);
serverBuilder.annotatedService(new StyleResource(styleSupplier), jsonResponseConverter);
serverBuilder.annotatedService(new TileJSONResource(tileJSONSupplier), jsonResponseConverter);
serverBuilder.annotatedService(new SearchResource(datasource), jsonResponseConverter);
var index = HttpFile.of(ClassLoader.getSystemClassLoader(), "/static/server.html");
serverBuilder.service("/", index.asService());
serverBuilder.serviceUnder("/",
FileService.of(ClassLoader.getSystemClassLoader(), "/static"));
if (assetsPath != null) {
serverBuilder.serviceUnder("/assets", FileService.of(assetsPath));
}
serverBuilder.decorator(CorsService.builderForAnyOrigin()
.allowRequestMethods(HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE,
HttpMethod.OPTIONS, HttpMethod.HEAD)
.allowRequestHeaders(HttpHeaderNames.ORIGIN, HttpHeaderNames.CONTENT_TYPE,
HttpHeaderNames.ACCEPT, HttpHeaderNames.AUTHORIZATION)
.allowCredentials()
.exposeHeaders(HttpHeaderNames.LOCATION)
.newDecorator());
serverBuilder.serviceUnder("/docs", new DocService());
serverBuilder.disableServerHeader();
serverBuilder.disableDateHeader();
var server = serverBuilder.build();
var startFuture = server.start();
startFuture.join();
var shutdownFuture = server.closeOnJvmShutdown();
shutdownFuture.join();
}
return 0;
}