package injection.sample5_SPARUL_Injection;

import injection.SampleBase;

import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.update.UpdateFactory;
import com.hp.hpl.jena.update.UpdateRequest;

public class Sample5code extends SampleBase{
	
	private final String FILE_PATH = "files/injection.owl";
	
	public String run(String name) throws Exception{
		String updateString = "PREFIX injection: <http://www.morelab.deusto.es/injection.owl#> " +
		"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> " +
		"DELETE {" +
		"	injection:Pablo injection:fullName ?name1 "+
		"} WHERE {" +
		"	injection:Pablo injection:fullName ?name1" +
		"}\n" +
		"INSERT {" +
		"	injection:Pablo injection:fullName '" + name + "'^^xsd:string" +
		"}";
		
		Model model = loadModel(FILE_PATH);
		UpdateRequest update = UpdateFactory.create(updateString);
		executeUpdate(update, model);
		
		return checkThatChanged(model);
	}

	private String checkThatChanged(Model model) {
		String queryString = 
			"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>" +
			"PREFIX injection: <http://www.morelab.deusto.es/injection.owl#> " +
			"SELECT ?p1 ?p2 " +
			"WHERE {" +
			"      ?p1 a injection:Person . " +
			"      ?p2 a injection:Person . " +
			"      ?p1 injection:fullName 'Pablo Ordunya'^^xsd:string . " +
			"      ?p1 injection:isFriendOf ?p2 . " +
			"}";
		Query query = QueryFactory.create(queryString);
		
		QueryExecution qe = QueryExecutionFactory.create(query, model);
		ResultSet results = qe.execSelect();
		String result = "";
		boolean thereWereResults = false;
		while(results.hasNext()){
			thereWereResults = true;
			QuerySolution solution = results.nextSolution();
			Resource res = solution.getResource("p1");
			Resource res2 = solution.getResource("p2");
			result += res.getURI() + "; " + res2.getURI() + "\n";
		}
		if(!thereWereResults){
			result = "no results available";
		}else{
			result = "Pablo & friends:\n" + result;
		}
		return result;
	}
	
	public static void main(String [] args) throws Exception{
		Sample5code code = new Sample5code();
		String result = code.run("Pablo Ordunya");
		System.out.println(result);
	}
}
