public Integer call()

in baremaps-cli/src/main/java/org/apache/baremaps/cli/dem/Serve.java [55:122]


  public Integer call() throws Exception {
    // Initialize the tile stores
    var geoTiffReader = new GeoTiffReader(path);
    var rasterElevationTileStore = new TerrariumTileStore(geoTiffReader);
    var rasterHillshadeTileStore =
        new RasterHillshadeTileStore(
            geoTiffReader,
            ElevationUtils::terrariumToElevation);
    var vectorHillshadeTileStore =
        new VectorHillshadeTileStore(
            geoTiffReader);
    var vectorContourTileStore =
        new VectorContourTileStore(geoTiffReader);

    // Initialize the server
    var objectMapper = objectMapper();
    var jsonResponseConverter = new JacksonResponseConverterFunction(objectMapper);
    var serverBuilder = Server.builder();
    serverBuilder.http(port);

    // Register the services
    serverBuilder.annotatedService(
        "/raster/elevation",
        new BufferedImageResource(() -> rasterElevationTileStore),
        jsonResponseConverter);
    serverBuilder.annotatedService(
        "/raster/hillshade",
        new BufferedImageResource(() -> rasterHillshadeTileStore),
        jsonResponseConverter);
    serverBuilder.annotatedService(
        "/vector/contour",
        new VectorTileResource(() -> vectorContourTileStore),
        jsonResponseConverter);
    serverBuilder.annotatedService(
        "/vector/hillshade",
        new VectorTileResource(() -> vectorHillshadeTileStore),
        jsonResponseConverter);

    var index = HttpFile.of(ClassLoader.getSystemClassLoader(), "/dem/index.html");
    serverBuilder.service("/", index.asService());

    serverBuilder.decorator(CorsService.builderForAnyOrigin()
        .allowAllRequestHeaders(true)
        .allowRequestMethods(
            HttpMethod.GET,
            HttpMethod.POST,
            HttpMethod.PUT,
            HttpMethod.DELETE,
            HttpMethod.OPTIONS,
            HttpMethod.HEAD)
        .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;
  }