package eu.play_project.dcep;
import java.io.IOException;
import java.util.Arrays;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Test;
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.Syntax;
import com.hp.hpl.jena.sparql.serializer.PlaySerializer;
import eu.play_project.dcep.distributedetalis.EcConnectionManagerLocal;
import eu.play_project.dcep.distributedetalis.api.VariableBindings;
import eu.play_project.dcep.distributedetalis.join.Engine;
import eu.play_project.play_platformservices.api.BdplQuery;
import eu.play_project.play_platformservices.api.HistoricalData;
import eu.play_project.play_platformservices.api.QueryDetails;
import eu.play_project.play_platformservices_querydispatcher.bdpl.visitor.historic.QueryTemplateGenerator;
public class HistoricDataTest {
@Test
public void testHistoricData() throws IOException {
final String TEST_URI = "http://events.event-processing.org/ids/e5917518587088559184";
Engine historicData;
VariableBindings variableBindings;
HistoricalData values;
String queryFile = "patterns/play-bdpl-personalmonitoring.eprq";
String query = IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream(queryFile), "UTF-8");
String queryId = queryFile;
Query q;
q = QueryFactory.create(query, Syntax.syntaxBDPL);
// Add queryDetails
QueryDetails qd = new QueryDetails(queryId);
BdplQuery bdpl = BdplQuery.builder()
.details(qd)
.bdpl(query)
.ele("")
.historicalQueries(PlaySerializer.serializeToMultipleSelectQueries(q))
.constructTemplate(new QueryTemplateGenerator().createQueryTemplate(q))
.build();
variableBindings = new VariableBindings();
variableBindings.put("?tweetContent", Arrays.asList(new Object[] {"Tweettext 2", "bogus"}));
variableBindings.put("?id2", Arrays.asList(new Object[] {Node.createURI(TEST_URI)}));
//Get historical data to the given binding.
historicData = new Engine(new EcConnectionManagerLocal("historical-data/play-bdpl-personalmonitoring-historical-data.trig"));
values = historicData.get(bdpl.getHistoricalQueries(), variableBindings);
for (String varName : values.keySet()) {
System.out.format("Bindings for %s: %s\n", varName, values.get(varName));
}
Assert.assertTrue("A result including the specified binding was expected.", values.get("id2").contains(TEST_URI));
/*
* Do a second run, this time with an unmatchable binding (expecting empty results):
*/
variableBindings = new VariableBindings();
variableBindings.put("?tweetContent", Arrays.asList(new Object[] {"Tweettext 2", "bogus"}));
variableBindings.put("?id2", Arrays.asList(new Object[] {Node.createURI(TEST_URI + "error")}));
//Get historical data to the given binding.
historicData = new Engine(new EcConnectionManagerLocal("historical-data/play-bdpl-personalmonitoring-historical-data.trig"));
values = historicData.get(bdpl.getHistoricalQueries(), variableBindings);
for (String varName : values.keySet()) {
System.out.format("Bindings for %s: %s\n", varName, values.get(varName));
}
Assert.assertTrue("An empty result was expected for the specified bindings.", values.isEmpty());
}
}