package com.hp.hpl.jena.sparql.serializer;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.jena.atlas.io.IndentedLineBuffer;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.sparql.util.NodeToLabelMapBNode;
import eu.play_project.play_platformservices.api.HistoricalQuery;
public class PlaySerializer extends Serializer{
/**
* Generate historical querys dependent on the destination cloud Id.
* @return Key: CloudID, Value: String representation of historical select query.
*/
public static List<HistoricalQuery> serializeToMultipleSelectQueries(Query query){
// For the query pattern
SerializationContext cxt1 = new SerializationContext(query, new NodeToLabelMapBNode("b", false) ) ;
// For the construct pattern
SerializationContext cxt2 = new SerializationContext(query, new NodeToLabelMapBNode("c", false) ) ;
IndentedLineBuffer writer = new IndentedLineBuffer() ;
HistoricalGraphFormaterElement e = new HistoricalGraphFormaterElement(writer, cxt1);
serializeARQ(query, writer,
e,
new FmtExprSPARQL(writer, cxt1),
new FmtTemplate(writer, cxt2)) ;
// TODO make it more efficient.
List<HistoricalQuery> result = new LinkedList<HistoricalQuery>();
HistoricalQuery hq = new HistoricalQuery();
Map<String, String> queries = e.getHistoricalCloudQueries();
List<String> vars = query.getResultVars(); // FIXME different values for historical query.
vars.add("firstEvent");
String selectString = null;
// Add select variables
for (String key : queries.keySet()) {
hq = new HistoricalQuery();
// Add preifix
selectString = e.getPrefixNames() + "\n";
selectString += "SELECT DISTINCT ";
// Variables in current query.
for (String var : vars) {
if (queries.get(key).contains("?" + var)) {
selectString += " ?" + var;
//Set variables.
hq.getVariables().add("?" + var);
}
}
// Set values.
hq.setQuery(selectString +" \n WHERE { \n" + queries.get(key) + "} ");
hq.setCloudId(key);
result.add(hq);
}
return result;
}
}