public record CreateIplocIndex()

in baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/CreateIplocIndex.java [34:69]


public record CreateIplocIndex(
    Path geonamesIndexPath,
    List<Path> nicPaths,
    Path targetIplocIndexPath) implements Task {

  private static final Logger logger = LoggerFactory.getLogger(CreateIplocIndex.class);

  @Override
  public void execute(WorkflowContext context) throws Exception {
    try (var directory = MMapDirectory.open(geonamesIndexPath);
        var searcherManager = new SearcherManager(directory, new SearcherFactory())) {

      logger.info("Creating the Iploc database");
      var jdbcUrl = String.format("JDBC:sqlite:%s", targetIplocIndexPath);

      var config = new SQLiteConfig();
      var dataSource = new SQLiteDataSource(config);
      dataSource.setUrl(jdbcUrl);

      var ipLocRepository = new IpLocRepository(dataSource);
      ipLocRepository.dropTable();
      ipLocRepository.createTable();
      ipLocRepository.createIndex();

      var ipLocReader = new IpLocReader(searcherManager);
      nicPaths.parallelStream().forEach(path -> {
        try (InputStream inputStream = new BufferedInputStream(Files.newInputStream(path))) {
          var ipLocStream = ipLocReader.read(inputStream);
          ipLocRepository.save(ipLocStream);
        } catch (IOException e) {
          throw new StreamException(e);
        }
      });
    }
  }
}