package ru.semiot.services.tsdbservice.wamp;
import static ru.semiot.services.tsdbservice.ServiceConfig.CONFIG;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.ResultSet;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFLanguages;
import rx.Observer;
import java.io.StringReader;
public abstract class RDFMessageObserver implements Observer<String> {
private Lang messageFormat;
public RDFMessageObserver() {
this(null);
}
public RDFMessageObserver(Lang messageFormat) {
this.messageFormat = messageFormat != null ? messageFormat
: RDFLanguages.nameToLang(CONFIG.wampMessageFormat());
}
@Override
public void onCompleted() {
}
@Override
public void onNext(String message) {
try {
Model model = ModelFactory.createDefaultModel()
.read(new StringReader(message), null, messageFormat.getName());
onNext(model);
} catch (Throwable e) {
onError(e);
}
}
public abstract void onNext(Model model);
protected ResultSet query(Model model, String query) {
return query(model, QueryFactory.create(query));
}
protected ResultSet query(Model model, Query query) {
return QueryExecutionFactory.create(query, model).execSelect();
}
}