package org.hadatac.entity.pojo;
import org.apache.jena.query.DatasetAccessor;
import org.apache.jena.query.DatasetAccessorFactory;
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.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.ResourceFactory;
import org.apache.jena.rdf.model.Statement;
import org.hadatac.metadata.loader.ValueCellProcessing;
import org.hadatac.utils.Collections;
import org.hadatac.utils.NameSpaces;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
public class Subject {
public String uri = "";
public String type = "";
public String label = "";
public String ofStudy = "";
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getOfStudy() {
return ofStudy;
}
public void setOfStudy(String ofStudy) {
this.ofStudy = ofStudy;
}
public static boolean isPlatform(String subject_uri) {
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList()
+ "SELECT ?cohort WHERE {\n"
+ " <" + subject_uri + "> a hasco:SubjectPlatform . \n"
+ " <" + subject_uri + "> hasco:isSubjectOf ?cohort . \n"
+ "}";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(
Collections.getCollectionsName(Collections.METADATA_SPARQL), query);
ResultSet results = qexec.execSelect();
ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results);
qexec.close();
if (resultsrw.size() >= 1) {
return true;
}
return false;
}
public static Subject findSubject(String study_uri, String subject_id) {
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList()
+ "SELECT ?uri WHERE {\n"
+ " ?uri hasco:originalID \"" + subject_id + "\" .\n"
+ " ?uri hasco:isSubjectOf ?cohort .\n"
+ " ?cohort hasco:isCohortOf " + study_uri + " .\n"
+ "}";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(
Collections.getCollectionsName(Collections.METADATA_SPARQL), query);
ResultSet results = qexec.execSelect();
ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results);
qexec.close();
if (resultsrw.size() >= 1) {
Subject subject = new Subject();
QuerySolution soln = resultsrw.next();
subject.setUri(soln.getResource("uri").getURI());
return subject;
}
return null;
}
public static String findSampleUri(String study_uri, String sample_id) {
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList()
+ "SELECT ?sampleUri WHERE {\n"
+ " ?sampleUri hasco:originalID \"" + sample_id + "\" .\n"
+ " ?sampleUri hasco:isSampleOf ?subjectUri .\n"
+ " ?subjectUri hasco:isSubjectOf ?cohort .\n"
+ " ?cohort hasco:isCohortOf " + study_uri + " .\n"
+ "}";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(
Collections.getCollectionsName(Collections.METADATA_SPARQL), query);
ResultSet results = qexec.execSelect();
ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results);
qexec.close();
if (resultsrw.size() >= 1) {
QuerySolution soln = resultsrw.next();
return soln.getResource("sampleUri").getURI();
}
return null;
}
public static String findCodeValue(String attr_uri, String code) {
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList()
+ " SELECT ?codeValue WHERE {"
+ " ?uri hasco:hasReference <" + attr_uri + ">."
+ " ?value hasco:isPossibleValueOf ?uri . "
+ " ?value hasco:hasCode \"" + code + "\" . "
+ " OPTIONAL { ?value hasco:hasCodeValue ?codeValue . }"
+ " }";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(
Collections.getCollectionsName(Collections.METADATA_SPARQL), query);
ResultSet results = qexec.execSelect();
ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results);
qexec.close();
if (resultsrw.size() > 0) {
QuerySolution soln = resultsrw.next();
if (null != soln.getLiteral("codeValue")) {
String codeValue = soln.getLiteral("codeValue").toString();
if (!codeValue.equals("")) {
return codeValue;
}
}
}
return null;
}
public static String checkObjectUri(String obj_uri, String attr_uri) {
attr_uri = ValueCellProcessing.replacePrefixEx(attr_uri);
String objUri = obj_uri;
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList()
+ " SELECT ?s ?o WHERE {"
+ " ?ar hasco:hasReference <" + attr_uri + "> . "
+ " ?ar rdfs:label ?l ."
+ " ?s hasco:hasAssociatedObject ?o . "
+ " ?s rdfs:label ?l . "
+ " }";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(
Collections.getCollectionsName(Collections.METADATA_SPARQL), query);
ResultSet results = qexec.execSelect();
ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results);
qexec.close();
//System.out.println("resultsrw.size(): " + resultsrw.size());
if (resultsrw.size() > 0) {
QuerySolution soln = resultsrw.next();
if (null != soln.getResource("o")) {
String attributeAssociation = soln.getResource("o").toString();
//System.out.println("attributeAssociation: " + attributeAssociation);
if (attributeAssociation.equals(ValueCellProcessing.replacePrefixEx("chear-kb:ObjectTypeMother"))) {
String motherUri = obj_uri + "-mother";
Model model = ModelFactory.createDefaultModel();
DatasetAccessor accessor = DatasetAccessorFactory.createHTTP(
Collections.getCollectionsName(Collections.METADATA_GRAPH));
model.add(model.createResource(motherUri),
model.createProperty("rdf:type"),
model.createResource(ValueCellProcessing.replacePrefixEx("sio:Human")));
model.add(model.createResource(motherUri),
model.createProperty(ValueCellProcessing.replacePrefixEx("chear:Mother")),
model.createResource(obj_uri));
accessor.add(model);
objUri = motherUri;
//System.out.println("================================== Changed to: " + motherUri);
}
}
}
return objUri;
}
}