package org.aksw.sparqlify.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.aksw.sparqlify.core.test.ResourceComparator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
public class TestBundleReaderCsv
{
private static final Logger logger = LoggerFactory.getLogger(TestBundleReaderCsv.class);
private static final Comparator<Resource> resourceComparator = new ResourceComparator();
private static final PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
private String testsBasePath = "/org/aksw/sparqlify/csv/tests/";
public List<TestBundleCsv> getTestBundles() throws IOException {
List<TestBundleCsv> result = new ArrayList<TestBundleCsv>();
Resource[] resources = resolver.getResources(testsBasePath + "*");
Arrays.sort(resources, resourceComparator);
for (Resource r : resources) {
List<TestBundleCsv> tmp = process(r);
result.addAll(tmp);
}
return result;
}
// Note treat file pattern r2rml(*).ttl
public List<TestBundleCsv> process(Resource r) throws IOException {
//System.out.println(basePath + r.getFilename() + "/create.sql");
List<TestBundleCsv> result = new ArrayList<TestBundleCsv>();
String testPathStr = testsBasePath + r.getFilename() + "/";
Resource testPathRes = resolver.getResource(testPathStr);
if(!testPathRes.exists()) {
logger.warn("Resource does not exist " + testPathRes);
return result;
}
Resource csv = resolver.getResource(testPathStr + "data.csv");
//Pattern pattern = Pattern.compile("r2rml(.*).ttl");
Pattern pattern = Pattern.compile("sparqlify(.*).txt");
//Resource[] r2rmls = resolver.getResources(testBaseSpy + "r2rml*.ttl");
Resource[] r2rmls = resolver.getResources(testPathStr + "sparqlify*.txt");
Arrays.sort(r2rmls, resourceComparator);
for(Resource mapping : r2rmls) {
//System.out.println("Got resource: " + m.getURI());
String name = mapping.getFilename();
Matcher matcher = pattern.matcher(name);
boolean isFind = matcher.find();
if(!isFind) {
throw new RuntimeException("Should not happen"); // The regex pattern must match the resource pattern
}
String subTest = matcher.group(1);
String configStr = testPathStr + "config" + subTest + ".properties";
Resource config = resolver.getResource(configStr);
// get the expected result
String mappingStr = testPathStr + "mapped" + subTest + ".nq";
Resource expected = resolver.getResource(mappingStr);
if(!expected.exists()) {
logger.warn("No expected result found for " + name + " skipping test");
continue;
}
// System.out.println(" " + expected.getFilename());
//
// System.out.println(" " + m.getFilename());
TestBundleCsv bundle = new TestBundleCsv(csv, config, mapping, expected);
result.add(bundle);
}
return result;
//System.out.println(createRes.getURI());
//System.out.println(createRes.getFilename());
//System.out.println("create exists? " + createRes.exists());
}
}