package org.hadatac.metadata.loader;
import org.apache.jena.query.DatasetAccessor;
import org.apache.jena.query.DatasetAccessorFactory;
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.ModelFactory;
import org.apache.jena.riot.RiotNotFoundException;
import org.apache.jena.shared.NotFoundException;
import org.apache.jena.update.UpdateExecutionFactory;
import org.apache.jena.update.UpdateFactory;
import org.apache.jena.update.UpdateProcessor;
import org.apache.jena.update.UpdateRequest;
import org.hadatac.utils.Collections;
import org.hadatac.utils.Feedback;
import org.hadatac.utils.NameSpaces;
import play.Play;
import play.libs.ws.*;
import play.mvc.Call;
public class PermissionsContext implements RDFContext {
String username = null;
String password = null;
boolean verbose = false;
String processMessage = "";
String loadFileMessage = "";
public PermissionsContext(String un, String pwd, String kb, boolean ver) {
username = un;
password = pwd;
verbose = ver;
}
public static Long playTotalTriples() {
PermissionsContext permissions = new PermissionsContext(
"user", "password",
Play.application().configuration().getString("hadatac.solr.permissions"),
false);
return permissions.totalTriples();
}
public Long totalTriples() {
try {
String queryString = NameSpaces.getInstance().printSparqlNameSpaceList() +
"SELECT (COUNT(*) as ?tot) WHERE { ?s ?p ?o . }";
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();
QuerySolution soln = resultsrw.next();
return Long.valueOf(soln.getLiteral("tot").getValue().toString()).longValue();
} catch (Exception e) {
e.printStackTrace();
return (long) -1;
}
}
public String clean(int mode) {
String message = "";
message += Feedback.println(mode," Triples before [clean]: " + totalTriples());
message += Feedback.println(mode, " ");
String queryString = "";
queryString += NameSpaces.getInstance().printSparqlNameSpaceList();
queryString += "DELETE WHERE { ?s ?p ?o . } ";
UpdateRequest req = UpdateFactory.create(queryString);
UpdateProcessor processor = UpdateExecutionFactory.createRemote(req,
Collections.getCollectionsName(Collections.PERMISSIONS_UPDATE));
processor.execute();
message += Feedback.println(mode, " ");
message += Feedback.println(mode, " ");
message += Feedback.print(mode, " Triples after [clean]: " + totalTriples());
return message;
}
public String getLang(String contentType) {
if (contentType.contains("turtle")) {
return "TTL";
} else if (contentType.contains("rdf+xml")) {
return "RDF/XML";
} else {
return "";
}
}
/*
* contentType correspond to the mime type required for curl to process the data provided. For example, application/rdf+xml is
* used to process rdf/xml content.
*
*/
public Long loadLocalFile(int mode, String filePath, String contentType) {
Model model = ModelFactory.createDefaultModel();
DatasetAccessor accessor = DatasetAccessorFactory.createHTTP(
Collections.getCollectionsName(Collections.PERMISSIONS_GRAPH));
loadFileMessage = "";
Long total = totalTriples();
try {
model.read(filePath, getLang(contentType));
accessor.add(model);
} catch (NotFoundException e) {
System.out.println("NotFoundException: file " + filePath);
System.out.println("NotFoundException: " + e.getMessage());
} catch (RiotNotFoundException e) {
System.out.println("RiotNotFoundException: file " + filePath);
System.out.println("RiotNotFoundException: " + e.getMessage());
} catch (Exception e) {
System.out.println("Exception: file " + filePath);
System.out.println("Exception: " + e.getMessage());
}
Long newTotal = totalTriples();
return (newTotal - total);
}
}