SPARQLXLSXTupleTest.java
/*******************************************************************************
* Copyright (c) 2025 Eclipse RDF4J contributors.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Distribution License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*******************************************************************************/
package org.eclipse.rdf4j.query.resultio.sparqlxml;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
import org.eclipse.rdf4j.query.BindingSet;
import org.eclipse.rdf4j.query.impl.MapBindingSet;
import org.eclipse.rdf4j.query.impl.TupleQueryResultBuilder;
import org.eclipse.rdf4j.query.resultio.sparqlxslx.SPARQLResultsXLSXWriter;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
/**
* @author Jerven Bolleman
*/
public class SPARQLXLSXTupleTest {
@Test
void simpleCase(@TempDir Path dir) throws IOException {
Files.createDirectories(dir);
Path tf = dir.resolve("test.xlsx");
// Path tf = Paths.get("/home/jbollema/test.xlsx");
TupleQueryResultBuilder b = new TupleQueryResultBuilder();
b.startQueryResult(List.of("boolean", "iri", "int"));
MapBindingSet bs = new MapBindingSet();
bs.setBinding("boolean", SimpleValueFactory.getInstance().createLiteral(true));
bs.setBinding("iri", SimpleValueFactory.getInstance().createIRI("https://example.org/iri"));
bs.setBinding("int", SimpleValueFactory.getInstance().createLiteral(1));
b.handleSolution(bs);
MapBindingSet bs2 = new MapBindingSet();
bs2.setBinding("boolean", SimpleValueFactory.getInstance().createLiteral(false));
bs2.setBinding("iri", SimpleValueFactory.getInstance().createIRI("https://example.org/iri/test"));
bs2.setBinding("int", SimpleValueFactory.getInstance().createLiteral(-9));
b.handleSolution(bs2);
MapBindingSet bs3 = new MapBindingSet();
bs3.setBinding("iri", SimpleValueFactory.getInstance().createIRI("http://purl.uniprot.org/taxonomy/9606"));
bs3.setBinding("int", SimpleValueFactory.getInstance().createLiteral(-9));
b.handleSolution(bs3);
List<String> links = List.of("http://example.org/link1");
b.handleLinks(links);
try (var out = Files.newOutputStream(tf)) {
SPARQLResultsXLSXWriter writer = new SPARQLResultsXLSXWriter(out);
writer.handleNamespace("taxon", "http://purl.uniprot.org/taxonomy/");
writer.handleLinks(links);
writer.startQueryResult(new ArrayList<>(bs.getBindingNames()));
Iterator<BindingSet> iterator = b.getQueryResult().iterator();
while (iterator.hasNext())
writer.handleSolution(iterator.next());
writer.endQueryResult();
}
assertTrue(Files.size(tf) > 0);
try (XSSFWorkbook wb = new XSSFWorkbook(Files.newInputStream(tf))) {
XSSFSheet raw = wb.getSheet("raw");
assertNotNull(raw);
assertNotNull(wb.getSheet("nice"));
XSSFRow headerRow = raw.getRow(0);
assertEquals("boolean", headerRow.getCell(0).getStringCellValue());
assertEquals("iri", headerRow.getCell(1).getStringCellValue());
assertEquals("int", headerRow.getCell(2).getStringCellValue());
}
}
}