package org.hadatac.entity.pojo;
import java.util.ArrayList;
import java.util.List;
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.Property;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
import org.apache.jena.rdf.model.StmtIterator;
import org.hadatac.utils.Collections;
import org.hadatac.utils.NameSpaces;
import play.Play;
public class Instrument implements Comparable<Instrument> {
private String uri;
private String localName;
private String label;
private String serialNumber;
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public String getLocalName() {
return localName;
}
public void setLocalName(String localName) {
this.localName = localName;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public static List<Instrument> find() {
//System.out.println("Inside Lits<Instrument>");
List<Instrument> instruments = new ArrayList<Instrument>();
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList() +
" SELECT ?uri WHERE { " +
" ?instModel rdfs:subClassOf+ vstoi:Instrument . " +
" ?uri a ?instModel ." +
"} ";
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();
while (resultsrw.hasNext()) {
QuerySolution soln = resultsrw.next();
Instrument instrument = find(soln.getResource("uri").getURI());
instruments.add(instrument);
}
java.util.Collections.sort((List<Instrument>) instruments);
return instruments;
}
public static List<Instrument> findAvailable() {
//System.out.println("Inside Lits<Instrument> findAvailable()");
List<Instrument> instruments = new ArrayList<Instrument>();
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList() +
" SELECT ?uri WHERE { " +
" { ?instModel rdfs:subClassOf+ vstoi:Instrument . " +
" ?uri a ?instModel ." +
" } MINUS { " +
" ?dep_uri a vstoi:Deployment . " +
" ?dep_uri hasneto:hasInstrument ?uri . " +
" FILTER NOT EXISTS { ?dep_uri prov:endedAtTime ?enddatetime . } " +
" } " +
"} " +
"ORDER BY DESC(?datetime) ";
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();
while (resultsrw.hasNext()) {
QuerySolution soln = resultsrw.next();
Instrument instrument = find(soln.getResource("uri").getURI());
instruments.add(instrument);
}
java.util.Collections.sort((List<Instrument>) instruments);
return instruments;
}
public static List<Instrument> findDeployed() {
//System.out.println("Inside Lits<Instrument> findAvailable()");
List<Instrument> instruments = new ArrayList<Instrument>();
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList() +
" SELECT ?uri WHERE { " +
" ?instModel rdfs:subClassOf+ vstoi:Instrument . " +
" ?uri a ?instModel ." +
" ?dep_uri a vstoi:Deployment . " +
" ?dep_uri hasneto:hasInstrument ?uri . " +
" FILTER NOT EXISTS { ?dep_uri prov:endedAtTime ?enddatetime . } " +
"} " +
"ORDER BY DESC(?datetime) ";
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();
while (resultsrw.hasNext()) {
QuerySolution soln = resultsrw.next();
Instrument instrument = find(soln.getResource("uri").getURI());
instruments.add(instrument);
}
java.util.Collections.sort((List<Instrument>) instruments);
return instruments;
}
public static Instrument find(String uri) {
Instrument instrument = null;
Model model;
Statement statement;
RDFNode object;
String queryString = "DESCRIBE <" + uri + ">";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(
Play.application().configuration().getString("hadatac.solr.triplestore")
+ Collections.METADATA_SPARQL, query);
model = qexec.execDescribe();
instrument = new Instrument();
StmtIterator stmtIterator = model.listStatements();
while (stmtIterator.hasNext()) {
statement = stmtIterator.next();
object = statement.getObject();
if (statement.getPredicate().getURI().equals("http://www.w3.org/2000/01/rdf-schema#label")) {
instrument.setLabel(object.asLiteral().getString());
} else if (statement.getPredicate().getURI().equals("http://hadatac.org/ont/vstoi#hasSerialNumber")) {
instrument.setSerialNumber(object.asLiteral().getString());
}
}
instrument.setUri(uri);
return instrument;
}
public static Instrument find(HADataC hadatac) {
Instrument instrument = null;
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList()
+ "SELECT ?instrument ?label WHERE {\n"
+ " <" + hadatac.getDeploymentUri() + "> hasneto:hasInstrument ?instrument .\n"
+ " OPTIONAL { ?instrument rdfs:label ?label . }\n"
+ "}";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(hadatac.getStaticMetadataSparqlURL(), query);
ResultSet results = qexec.execSelect();
ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results);
qexec.close();
if (resultsrw.size() >= 1) {
QuerySolution soln = resultsrw.next();
instrument = new Instrument();
instrument.setLocalName(soln.getResource("instrument").getLocalName());
instrument.setUri(soln.getResource("instrument").getURI());
if (soln.getLiteral("label") != null) { instrument.setLabel(soln.getLiteral("label").getString()); }
else { instrument.setLabel(soln.getResource("instrument").getLocalName()); }
}
return instrument;
}
@Override
public int compareTo(Instrument another) {
return this.getLabel().compareTo(another.getLabel());
}
}