public Integer call()

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;
  }