package eu.play_project.play_platformservices_querydispatcher.bdpl.visitor.realtime;
import java.util.Iterator;
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.graph.NodeVisitor;
import com.hp.hpl.jena.sparql.core.TriplePath;
import com.hp.hpl.jena.sparql.syntax.ElementEventGraph;
import com.hp.hpl.jena.sparql.syntax.ElementGroup;
import com.hp.hpl.jena.sparql.syntax.ElementPathBlock;
import com.hp.hpl.jena.sparql.syntax.ElementVisitor;
public class EventTypeVisitor extends GenericVisitor implements ElementVisitor, NodeVisitor {
private String eventType;
@Override
public void visit(ElementPathBlock el) {
eventType = null;
// Test if event type is defined.
Iterator<TriplePath> iter = el.patternElts();
while (iter.hasNext()) {
TriplePath tmpTriplePath = iter.next();
if(tmpTriplePath.getObject().isURI()){
if (tmpTriplePath.getPredicate().equals(Node.createURI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"))){
if(tmpTriplePath.getObject().isURI()){
eventType = "'" + tmpTriplePath.getObject().getURI() + "'";
}else{
throw new RuntimeException("Event type must be a URI");
}
}
}
}
if(eventType == null){
eventType = "'simple'"; // If no type is defined use simple.
}
}
@Override
public void visit(ElementGroup el) {
// Visit all group elements
for(int i=0; i<el.getElements().size(); i++){
el.getElements().get(i).visit(this);
}
}
@Override
public void visit(ElementEventGraph el) {
// Visit triples
el.getElement().visit(this);
}
public String getEventType(){
return eventType;
}
}