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 Entity implements HADatAcClass, Comparable<Entity> { private String uri; private String superUri; private String localName; private String label; public String getUri() { return uri; } public void setUri(String uri) { this.uri = uri; } public String getSuperUri() { return superUri; } public void setSuperUri(String superUri) { this.superUri = superUri; } 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 static List<Entity> find() { List<Entity> entities = new ArrayList<Entity>(); String queryString = NameSpaces.getInstance().printSparqlNameSpaceList() + " SELECT ?uri WHERE { " + " ?uri rdfs:subClassOf* sio:Object . " + "} "; //System.out.println("Query: " + queryString); 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(); Entity entity = find(soln.getResource("uri").getURI()); entities.add(entity); } java.util.Collections.sort((List<Entity>) entities); return entities; } public static Entity find(String uri) { Entity entity = 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(); entity = new Entity(); 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")) { entity.setLabel(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://www.w3.org/2000/01/rdf-schema#subClassOf")) { entity.setSuperUri(object.asResource().getURI()); } } entity.setUri(uri); entity.setLocalName(uri.substring(uri.indexOf('#') + 1)); //System.out.println(uri + " " + entity.getLocalName() + " " + entity.getSuperUri()); return entity; } @Override public int compareTo(Entity another) { if (this.getLabel() != null && another.getLabel() != null) { return this.getLabel().compareTo(another.getLabel()); } return this.getLocalName().compareTo(another.getLocalName()); } }