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.RDFNode; 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 Platform implements Comparable<Platform> { private String uri; private String localName; private String label; private String location; private String firstCoordinate; private String secondCoordinate; private String thirdCoordinate; private String elevation; private String serialNumber; public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public String getElevation() { return elevation; } public void setElevation(String elevation) { this.elevation = elevation; } 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 getFirstCoordinate() { return firstCoordinate; } public void setFirstCoordinate(String firstCoordinate) { this.firstCoordinate = firstCoordinate; } public String getSecondCoordinate() { return secondCoordinate; } public void setSecondCoordinate(String secondCoordinate) { this.secondCoordinate = secondCoordinate; } public String getThirdCoordinate() { return thirdCoordinate; } public void setThirdCoordinate(String thirdCoordinate) { this.thirdCoordinate = thirdCoordinate; } public String getSerialNumber() { return serialNumber; } public void setSerialNumber(String serialNumber) { this.serialNumber = serialNumber; } public static Platform find(String uri) { Platform platform = 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(); platform = new Platform(); 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")) { platform.setLabel(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://hadatac.org/ont/vstoi#hasSerialNumber")) { platform.setSerialNumber(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://hadatac.org/ont/hasneto#hasFirstCoordinate")) { platform.setFirstCoordinate(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://hadatac.org/ont/hasneto#hasSecondCoordinate")) { platform.setSecondCoordinate(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://hadatac.org/ont/hasneto#hasThirdCoordinate")) { platform.setThirdCoordinate(object.asLiteral().getString()); } } platform.setUri(uri); return platform; } public static List<Platform> find() { List<Platform> platforms = new ArrayList<Platform>(); String queryString = NameSpaces.getInstance().printSparqlNameSpaceList() + " SELECT ?uri WHERE { " + " ?platModel rdfs:subClassOf+ vstoi:Platform . " + " ?uri a ?platModel ." + "} "; 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(); Platform platform = find(soln.getResource("uri").getURI()); platforms.add(platform); } java.util.Collections.sort((List<Platform>) platforms); return platforms; } public static Platform find(HADataC hadatac) { Platform platform = null; String queryString = NameSpaces.getInstance().printSparqlNameSpaceList() + "SELECT ?platform ?label ?lat ?lon ?ele WHERE {\n" + " <" + hadatac.getDeploymentUri() + "> vstoi:hasPlatform ?platform .\n" + " OPTIONAL { ?platform rdfs:label ?label . }\n" + " OPTIONAL { ?platform <http://hadatac.org/ont/hasneto#hasFirstCoordinate> ?lat . }\n" + " OPTIONAL { ?platform <http://hadatac.org/ont/hasneto#hasSecondCoordinate> ?lon . }\n" + " OPTIONAL { ?platform <http://hadatac.org/ont/hasneto#hasThirdCoordinate> ?ele . }\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(); platform = new Platform(); platform.setLocalName(soln.getResource("platform").getLocalName()); platform.setUri(soln.getResource("platform").getURI()); if (soln.getLiteral("label") != null) { platform.setLabel(soln.getLiteral("label").getString()); } else { platform.setLabel(soln.getResource("platform").getLocalName()); } if(soln.getLiteral("lat") != null) { platform.setFirstCoordinate(soln.getLiteral("lat").getString()); } if(soln.getLiteral("lon") != null) { platform.setSecondCoordinate(soln.getLiteral("long").getString()); } if(soln.getLiteral("ele") != null) { platform.setThirdCoordinate(soln.getLiteral("ele").getString()); platform.setLocation("(" + platform.getFirstCoordinate() + ", " + platform.getSecondCoordinate() + ", " + platform.getThirdCoordinate() + ")"); } if (soln.getLiteral("ele") != null) { platform.setElevation(soln.getLiteral("ele").getString()); } } return platform; } @Override public int compareTo(Platform another) { return this.getLabel().compareTo(another.getLabel()); } }