public Integer call()

in baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java [70:116]


  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.createDataSource(tileset.getDatabase());
    var tileStoreSupplierType = new TypeLiteral<Supplier<TileStore>>() {};
    var tileStore = new PostgresTileStore(datasource, tileset);
    var tileCache = new TileCache(tileStore, caffeineSpec);
    var tileStoreSupplier = (Supplier<TileStore>) () -> tileCache;

    var styleSupplierType = new TypeLiteral<Supplier<Style>>() {};
    var style = objectMapper.readValue(configReader.read(stylePath), Style.class);
    var styleSupplier = (Supplier<Style>) () -> style;

    var tileJSONSupplierType = new TypeLiteral<Supplier<TileJSON>>() {};
    var tileJSON = objectMapper.readValue(configReader.read(tilesetPath), TileJSON.class);
    var tileJSONSupplier = (Supplier<TileJSON>) () -> tileJSON;

    var application =
        new ResourceConfig()
            .register(CorsFilter.class)
            .register(TileResource.class)
            .register(StyleResource.class)
            .register(TilesetResource.class)
            .register(ClassPathResource.class)
            .register(newContextResolver(objectMapper))
            .register(new AbstractBinder() {
              @Override
              protected void configure() {
                bind("assets").to(String.class).named("directory");
                bind("server.html").to(String.class).named("index");
                bind(tileStoreSupplier).to(tileStoreSupplierType);
                bind(styleSupplier).to(styleSupplierType);
                bind(tileJSONSupplier).to(tileJSONSupplierType);
              }
            });

    var httpService = new HttpJerseyRouterBuilder().buildBlockingStreaming(application);
    var serverContext = HttpServers.forPort(port).listenBlockingStreamingAndAwait(httpService);

    logger.info("Listening on {}", serverContext.listenAddress());

    serverContext.awaitShutdown();
    return 0;
  }