package org.hadatac.data.loader;
import java.io.File;
import java.lang.String;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.csv.CSVRecord;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.QuerySolution;
import org.apache.jena.query.ResultSet;
import org.apache.jena.query.ResultSetFactory;
import org.apache.jena.query.ResultSetRewindable;
import org.apache.jena.sparql.engine.http.QueryExceptionHTTP;
import org.hadatac.console.controllers.metadata.DynamicFunctions;
import org.hadatac.utils.Collections;
import org.hadatac.utils.NameSpaces;
public class SampleSubjectMapper extends BasicGenerator {
public SampleSubjectMapper(File file) {
super(file);
}
@Override
void initMapping() {
mapCol.clear();
mapCol.put("originalPID", "patient_id");
mapCol.put("originalSID", "specimen_id");
}
private String getSampleUri(CSVRecord rec) {
String sampleUri = "";
String sampleQueryString = NameSpaces.getInstance().printSparqlNameSpaceList() +
"SELECT ?s WHERE {" +
"?s hasco:originalID \"" + rec.get(mapCol.get("originalSID")) + "\"." +
"}";
try {
Query sampleQuery = QueryFactory.create(sampleQueryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(
Collections.getCollectionsName(Collections.METADATA_SPARQL), sampleQuery);
ResultSet results = qexec.execSelect();
ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results);
qexec.close();
if(resultsrw.hasNext()) {
QuerySolution soln = resultsrw.next();
if(soln.contains("s")){
sampleUri = DynamicFunctions.replaceURLWithPrefix(soln.get("s").toString());
}
}
} catch (QueryExceptionHTTP e) {
e.printStackTrace();
}
System.out.println("Sample:" + sampleUri);
return sampleUri;
}
private String getSubjectUri(CSVRecord rec) {
String subjectUri = "";
String subjectQueryString = NameSpaces.getInstance().printSparqlNameSpaceList() +
"SELECT ?s WHERE {" +
"?s hasco:originalID \"" + rec.get(mapCol.get("originalPID")) + "\"." +
"}";
try {
Query subjectQuery = QueryFactory.create(subjectQueryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(
Collections.getCollectionsName(Collections.METADATA_SPARQL), subjectQuery);
ResultSet results = qexec.execSelect();
ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results);
qexec.close();
if(resultsrw.hasNext()) {
QuerySolution soln = resultsrw.next();
if(soln.contains("s")){
subjectUri = DynamicFunctions.replaceURLWithPrefix(soln.get("s").toString());
}
}
} catch (QueryExceptionHTTP e) {
e.printStackTrace();
}
System.out.println("Subject:" + subjectUri);
return subjectUri;
}
@Override
Map<String, Object> createRow(CSVRecord rec) {
Map<String, Object> row = new HashMap<String, Object>();
row.put("hasURI", getSampleUri(rec));
row.put("hasco:isSampleOf", getSubjectUri(rec));
return row;
}
}