package org.hadatac.console.controllers.metadataacquisition; import java.io.UnsupportedEncodingException; import org.hadatac.entity.pojo.Subject; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import play.mvc.Controller; import play.mvc.Result; import org.hadatac.console.views.html.metadataacquisition.*; 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.Literal; import org.hadatac.console.controllers.AuthApplication; import org.hadatac.console.controllers.deployments.*; import org.hadatac.console.http.DeploymentQueries; import org.hadatac.console.models.DeploymentForm; import org.hadatac.console.models.SparqlQueryResults; import org.hadatac.console.models.TripleDocument; import org.hadatac.entity.pojo.DataAcquisition; import org.hadatac.entity.pojo.Deployment; import org.hadatac.utils.Collections; import org.hadatac.utils.NameSpaces; import org.hadatac.utils.State; import be.objectify.deadbolt.java.actions.Group; import be.objectify.deadbolt.java.actions.Restrict; public class ViewSample extends Controller { public static Map<String, String> findSampleIndicators(String sample_uri) { String indicatorQuery=NameSpaces.getInstance().printSparqlNameSpaceList() //"PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> PREFIX case: <http://hadatac.org/ont/case#>PREFIX chear: <http://hadatac.org/ont/chear#>" + "SELECT ?sampleIndicator ?label ?comment WHERE { ?sampleIndicator rdfs:subClassOf chear:SampleIndicator . ?sampleIndicator rdfs:label ?label . ?sampleIndicator rdfs:comment ?comment . }"; QueryExecution qexecInd = QueryExecutionFactory.sparqlService(Collections.getCollectionsName(Collections.METADATA_SPARQL), indicatorQuery); ResultSet indicatorResults = qexecInd.execSelect(); ResultSetRewindable resultsrwIndc = ResultSetFactory.copyResults(indicatorResults); qexecInd.close(); Map<String, String> indicatorMap = new HashMap<String, String>(); String indicatorLabel = ""; while (resultsrwIndc.hasNext()) { QuerySolution soln = resultsrwIndc.next(); indicatorLabel = soln.get("label").toString(); indicatorMap.put(soln.get("sampleIndicator").toString(),indicatorLabel); } Map<String, String> indicatorMapSorted = new TreeMap<String, String>(indicatorMap); Map<String, String> indicatorValues = new HashMap<String, String>(); for(Map.Entry<String, String> entry : indicatorMapSorted.entrySet()){ //System.out.println("Key : " + entry.getKey() + " and Value: " + entry.getValue() + "\n"); String label = entry.getValue().toString().replaceAll(" ", "").replaceAll(",", "").toString() + "Label"; String indvIndicatorQuery = NameSpaces.getInstance().printSparqlNameSpaceList() //"PREFIX cmo: <http://purl.obolibrary.org/obo/cmo#> PREFIX chebi: <http://purl.obolibrary.org/obo/CHEBI_> PREFIX hadatac-sn: <http://hadatac.org/ont/hadatac-sn#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX vstoi: <http://hadatac.org/ont/vstoi#> PREFIX case-kb: <http://hadatac.org/kb/case#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX chear-kb: <http://hadatac.org/kb/chear#> PREFIX dct: <http://purl.org/dc/terms/> PREFIX sio: <http://semanticscience.org/resource/> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX uo: <http://purl.obolibrary.org/obo/uo#> PREFIX hasneto: <http://hadatac.org/ont/hasneto#> PREFIX prov: <http://www.w3.org/ns/prov#> PREFIX hadatac: <http://hadatac.org/ont/hadatac#> PREFIX hasco: <http://hadatac.org/ont/hasco/> PREFIX uberon: <http://purl.obolibrary.org/obo/uberon.owl#> PREFIX chear: <http://hadatac.org/ont/chear#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>" + "SELECT DISTINCT ?sindi WHERE { ?sindi rdfs:subClassOf chear:SampleIndicator . }"; //System.out.println(indvIndicatorQuery + "\n"); QueryExecution qexecIndvInd = QueryExecutionFactory.sparqlService(Collections.getCollectionsName(Collections.METADATA_SPARQL), indvIndicatorQuery); ResultSet indvIndResults = qexecIndvInd.execSelect(); ResultSetRewindable resultsrwIndvInd = ResultSetFactory.copyResults(indvIndResults); qexecIndvInd.close(); String indvIndicatorString=""; while (resultsrwIndvInd.hasNext()) { QuerySolution soln = resultsrwIndvInd.next(); //System.out.println("Solution: " + soln); if(soln.contains(label)){ indvIndicatorString += soln.get(label).toString() + ", "; } //System.out.println("Indicator String: " + indvIndicatorString); } if (indvIndicatorString != ""){ indvIndicatorString = indvIndicatorString.substring(0, indvIndicatorString.length()-2); indicatorValues.put(entry.getValue().toString(),indvIndicatorString); } } return indicatorValues; } public static Map<String, List<String>> findBasic(String sample_uri) { String sampleQueryString = ""; sampleQueryString = NameSpaces.getInstance().printSparqlNameSpaceList() + /*"PREFIX sio: <http://semanticscience.org/resource/>" + "PREFIX chear: <http://hadatac.org/ont/chear#>" + "PREFIX chear-kb: <http://hadatac.org/kb/chear#>" + "PREFIX prov: <http://www.w3.org/ns/prov#>" + "PREFIX hasco: <http://hadatac.org/ont/hasco/>" + "PREFIX hasneto: <http://hadatac.org/ont/hasneto#>" + "PREFIX dcterms: <http://purl.org/dc/terms/>" + "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>" + "PREFIX skos: <http://www.w3.org/2004/02/skos/core#>" + "PREFIX foaf: <http://xmlns.com/foaf/0.1/>" + */ "SELECT ?sampleUri ?subjectUri ?subjectLabel ?sampleType ?sampleLabel ?freezeThaw ?storageTemp ?storageTempUnit ?cohortLabel ?object ?samplingVolume ?samplingVolumeUnit ?comment" + "WHERE { ?subjectUri hasco:isSubjectOf* ?cohort ." + " ?sampleUri hasco:isSampleOf ?subjectUri ." + " ?sampleUri rdfs:comment ?comment . " + " ?sampleUri hasco:isObjectOf ?object . " + " ?sampleUri hasco:hasSamplingVolume ?samplingVolume . " + " ?sampleUri hasco:hasSamplingVolumeUnit ?samplingVolumeUnit . " + " ?sampleUri hasco:hasStorageTemperature ?storageTemp . " + " ?sampleUri hasco:hasStorageTemperatureUnit ?storageTempUnit . " + " ?sampleUri hasco:hasNumFreezeThaw ?freezeThaw . " + " ?sampleUri rdfs:comment ?comment . " + " ?cohort rdfs:label ?cohortLabel . " + " OPTIONAL { ?subjectUri rdfs:label ?subjectLabel } . " + " OPTIONAL { ?sampleUri rdfs:label ?sampleLabel } . " + " OPTIONAL { ?sampleUri a ?sampleType } . " + " FILTER (?sampleUri = " + sample_uri + " ) . " + " }"; /* String basicQueryString = ""; basicQueryString = "PREFIX prov: <http://www.w3.org/ns/prov#> " + " PREFIX chear-kb: <http://hadatac.org/kb/chear#> " + "SELECT * " + "WHERE { " + subject_uri + " ?p ?o }"; */ //Query basicQuery = QueryFactory.create(basicQueryString); Query basicQuery = QueryFactory.create(sampleQueryString); QueryExecution qexec = QueryExecutionFactory.sparqlService(Collections.getCollectionsName(Collections.METADATA_SPARQL), basicQuery); ResultSet results = qexec.execSelect(); ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results); qexec.close(); Map<String, List<String>> sampleResult = new HashMap<String, List<String>>(); List<String> values = new ArrayList<String>(); while (resultsrw.hasNext()) { QuerySolution soln = resultsrw.next(); System.out.println("HERE IS THE RAW SOLN*********" + soln.toString()); values = new ArrayList<String>(); values.add("Label: " + soln.get("sampleLabel").toString()); values.add("Type: " + soln.get("sampleType").toString()); values.add("Sample Of: " + soln.get("subjectLabel").toString()); values.add("Measured Object Of: " + soln.get("object").toString()); values.add("Sample Volume: " + soln.get("samplingVolume").toString()); values.add("Sample Volume Unit: " + soln.get("samplingVolumeUnit").toString()); values.add("Storage Temperature: " + soln.get("storageTemp").toString()); values.add("Storage Temperature Unit: " + soln.get("storageTempUnit").toString()); values.add("Freeze Thaw Count: " + soln.get("freezeThaw").toString()); //values.add("Comment: " + soln.get("comment").toString()); sampleResult.put(soln.get("sampleUri").toString(),values); System.out.println("THIS IS SUBROW*********" + sampleResult); } return sampleResult; } // for /metadata HTTP GET requests @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result index(String sample_uri) { Map<String, String> indicatorValues = findSampleIndicators(sample_uri); Map<String, List<String>> sampleResult = findBasic(sample_uri); return ok(viewSample.render(sampleResult,indicatorValues)); }// /index() // for /metadata HTTP POST requests @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result postIndex(String sample_uri) { return index(sample_uri); } }