public void execute()

in baremaps-core/src/main/java/org/apache/baremaps/tasks/ExportVectorTiles.java [99:170]


  public void execute(WorkflowContext context) throws Exception {
    var configReader = new ConfigReader();
    var objectMapper = objectMapper();

    var tilesetObject = objectMapper.readValue(configReader.read(this.tileset), Tileset.class);
    var styleObject = objectMapper.readValue(configReader.read(this.style), Style.class);

    // Write the static files
    var directory = switch (format) {
      case FILE -> repository;
      case MBTILES -> repository.getParent();
      case PMTILES -> repository.getParent();
    };
    Files.createDirectories(directory);
    try (var html = this.getClass().getResourceAsStream("/static/server.html")) {
      Files.write(
          directory.resolve("index.html"),
          html.readAllBytes(),
          StandardOpenOption.CREATE,
          StandardOpenOption.TRUNCATE_EXISTING);
    }
    Files.write(
        directory.resolve("tiles.json"),
        objectMapper.writeValueAsBytes(tilesetObject),
        StandardOpenOption.CREATE,
        StandardOpenOption.TRUNCATE_EXISTING);
    Files.write(
        directory.resolve("style.json"),
        objectMapper.writeValueAsBytes(styleObject),
        StandardOpenOption.CREATE,
        StandardOpenOption.TRUNCATE_EXISTING);

    var datasource = context.getDataSource(tilesetObject.getDatabase());

    try (var sourceTileStore = sourceTileStore(tilesetObject, datasource);
        var targetTileStore = targetTileStore(tilesetObject)) {

      var envelope = tilesetObject.getBounds().size() == 4
          ? new Envelope(
              tilesetObject.getBounds().get(0), tilesetObject.getBounds().get(2),
              tilesetObject.getBounds().get(1), tilesetObject.getBounds().get(3))
          : new Envelope(-180, 180, -85.0511, 85.0511);

      var count = TileCoord.count(envelope, tilesetObject.getMinzoom(), tilesetObject.getMaxzoom());
      var start = System.currentTimeMillis();

      var tileCoordIterator =
          TileCoord.iterator(envelope, tilesetObject.getMinzoom(), tilesetObject.getMaxzoom());
      var tileCoordStream =
          StreamUtils.stream(tileCoordIterator).peek(new ProgressLogger<>(count, 5000));

      var bufferedTileEntryStream = StreamUtils.bufferInCompletionOrder(tileCoordStream, tile -> {
        try {
          return new TileEntry<>(tile, sourceTileStore.read(tile));
        } catch (TileStoreException e) {
          throw new WorkflowException(e);
        }
      }, 1000);

      var partitionedTileEntryStream = StreamUtils.partition(bufferedTileEntryStream, 1000);
      partitionedTileEntryStream.forEach(batch -> {
        try {
          targetTileStore.write(batch);
        } catch (TileStoreException e) {
          throw new WorkflowException(e);
        }
      });

      var stop = System.currentTimeMillis();
      logger.info("Exported {} tiles in {}s", count, (stop - start) / 1000);
    }
  }