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