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; public class UserGroup extends User { public static User find(String uri) { User user = null; String queryString = "DESCRIBE <" + uri + ">"; Query query = QueryFactory.create(queryString); Model modelPublic; Model modelPrivate; Statement statement; RDFNode object; QueryExecution qexecPrivate = QueryExecutionFactory.sparqlService( Collections.getCollectionsName(Collections.PERMISSIONS_SPARQL), query); modelPrivate = qexecPrivate.execDescribe(); if (!modelPrivate.isEmpty()) { user = new User(); user.setUri(uri); } StmtIterator stmtIteratorPrivate = modelPrivate.listStatements(); while (stmtIteratorPrivate.hasNext()) { statement = stmtIteratorPrivate.next(); if (!statement.getSubject().getURI().equals(uri)) { continue; } object = statement.getObject(); if (statement.getPredicate().getURI().equals("http://www.w3.org/2000/01/rdf-schema#comment")) { user.setComment(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://hadatac.org/ont/hadatac#isMemberOfGroup")) { if(object.toString().equals("Public") || object.toString().equals("")){ user.setImmediateGroupUri("Public"); } else{ user.setImmediateGroupUri(object.asResource().toString()); } } else if (statement.getPredicate().getURI().equals("http://xmlns.com/foaf/0.1/givenName")) { user.setGivenName(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://xmlns.com/foaf/0.1/familyName")) { user.setFamilyName(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://xmlns.com/foaf/0.1/name")) { user.setName(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://xmlns.com/foaf/0.1/mbox")) { user.setEmail(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://xmlns.com/foaf/0.1/homepage")) { String homepage = object.asLiteral().getString(); if(homepage.startsWith("<") && homepage.endsWith(">")){ homepage = homepage.replace("<", ""); homepage = homepage.replace(">", ""); } user.setHomepage(homepage); } } QueryExecution qexecPublic = QueryExecutionFactory.sparqlService(Collections.getCollectionsName(Collections.METADATA_SPARQL), query); modelPublic = qexecPublic.execDescribe(); if (!modelPublic.isEmpty()) { user = new User(); user.setUri(uri); } StmtIterator stmtIteratorPublic = modelPublic.listStatements(); while (stmtIteratorPublic.hasNext()) { statement = stmtIteratorPublic.next(); object = statement.getObject(); if (statement.getPredicate().getURI().equals("http://xmlns.com/foaf/0.1/name")) { user.setName(object.asLiteral().getString()); } else if (statement.getPredicate().getURI().equals("http://xmlns.com/foaf/0.1/mbox")) { user.setEmail(object.asLiteral().getString()); } } return user; } public static List<User> find() { List<User> users = new ArrayList<User>(); String queryString = "PREFIX prov: <http://www.w3.org/ns/prov#> " + "PREFIX foaf: <http://xmlns.com/foaf/0.1/> " + "SELECT ?uri WHERE { " + " ?uri a prov:Group . " + "} "; Query query = QueryFactory.create(queryString); QueryExecution qexec = QueryExecutionFactory.sparqlService( Collections.getCollectionsName(Collections.PERMISSIONS_SPARQL), query); ResultSet results = qexec.execSelect(); ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results); qexec.close(); while (resultsrw.hasNext()) { QuerySolution soln = resultsrw.next(); User user = find(soln.getResource("uri").getURI()); if(null != user){ users.add(user); } } java.util.Collections.sort((List<User>) users); return users; } public static List<User> findMembers(String group_uri) { System.out.println("findMembers(" + group_uri + ") is called."); List<User> users = new ArrayList<User>(); String queryString = "PREFIX prov: <http://www.w3.org/ns/prov#> " + "PREFIX foaf: <http://xmlns.com/foaf/0.1/> " + "PREFIX hadatac: <http://hadatac.org/ont/hadatac#> " + "SELECT ?uri WHERE { " + " ?uri a foaf:Person . " + " ?uri hadatac:isMemberOfGroup <" + group_uri + "> . " + "} "; Query query = QueryFactory.create(queryString); QueryExecution qexec = QueryExecutionFactory.sparqlService(Collections.getCollectionsName(Collections.PERMISSIONS_SPARQL), query); ResultSet results = qexec.execSelect(); ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results); qexec.close(); while (resultsrw.hasNext()) { QuerySolution soln = resultsrw.next(); User user = find(soln.getResource("uri").getURI()); users.add(user); } java.util.Collections.sort((List<User>) users); return users; } }