Search in sources :

Example 1 with ResponseType

use of com.inova8.intelligentgraph.sail.IntelligentGraphSail.ResponseType in project com.inova8.intelligentgraph by peterjohnlawrence.

the class IntelligentGraphEvaluator method nextTuple.

/**
 * Next tuple.
 *
 * @return the binding set
 * @throws QueryEvaluationException the query evaluation exception
 */
@SuppressWarnings("deprecation")
private BindingSet nextTuple() throws QueryEvaluationException {
    BindingSet nextBindingSet = getEvaluator().next();
    // Iterations.asSet(evaluator)
    QueryBindingSet modifiedBindingSet = new QueryBindingSet();
    for (Binding bindingValue : nextBindingSet) {
        // Only add bindings that were in the original projection
        String modifiedBindingValueName = requiredElement(bindingValue);
        if (modifiedBindingValueName != null) {
            if (bindingValue.getValue().isLiteral()) {
                SimpleLiteral literalValue = (SimpleLiteral) (bindingValue.getValue());
                if (Evaluator.getEngineNames().containsKey(literalValue.getDatatype())) {
                    String bindingValueName = bindingValue.getName();
                    List<StatementPattern> statementPatterns = SubjectPredicateCollector.process(getTupleExpr(), bindingValueName);
                    if (!statementPatterns.isEmpty()) {
                        // TODO not all variables need be in projection list so will not match, need the full list of variables to complete this
                        StatementPattern boundStatement = findBound(statementPatterns, nextBindingSet);
                        if (boundStatement != null) {
                            Value subject = getSubjectValue(boundStatement, nextBindingSet);
                            IRI predicate = getPredicateValue(boundStatement, nextBindingSet);
                            ResponseType responseType = getResponseType(bindingValueName);
                            customQueryOptions = getCustomQueryOptions(nextBindingSet);
                            EvaluationContext evaluationContext = new EvaluationContext(customQueryOptions, getDataset());
                            switch(responseType) {
                                case VALUE:
                                    Thing subjectThing = Thing.create(getSource(), subject, evaluationContext);
                                    try {
                                        // TODOcom.inova8.intelligentgraph.model.Resource fact = subjectThing.getFact(predicate,	literalValue,customQueryOptions);
                                        com.inova8.intelligentgraph.model.Resource fact = IntelligentEvaluator.processFactObjectValue(subjectThing, predicate, literalValue, customQueryOptions);
                                        Binding modifiedBindingValue = new SimpleBinding(modifiedBindingValueName, fact.getValue());
                                        modifiedBindingSet.addBinding(modifiedBindingValue);
                                    } catch (Exception e) {
                                        Binding modifiedBindingValue = new SimpleBinding(modifiedBindingValueName, literal(StringEscapeUtils.escapeEcmaScript(e.getMessage())));
                                        modifiedBindingSet.addBinding(modifiedBindingValue);
                                    }
                                    break;
                                case SCRIPT:
                                    modifiedBindingSet.addBinding(bindingValue);
                                    break;
                                case TRACE:
                                    evaluationContext.setTracing(true);
                                    Thing subjectThingTrace = Thing.create(getSource(), subject, evaluationContext);
                                    try {
                                        // TODO subjectThingTrace.getFact(predicate,literalValue,customQueryOptions);
                                        IntelligentEvaluator.processFactObjectValue(subjectThingTrace, predicate, literalValue, customQueryOptions);
                                        Binding modifiedBindingValueTrace = new SimpleBinding(modifiedBindingValueName, literal(evaluationContext.getTracer().getTrace().asHTML()));
                                        modifiedBindingSet.addBinding(modifiedBindingValueTrace);
                                    } catch (Exception e) {
                                        Binding modifiedBindingValueTrace = new SimpleBinding(modifiedBindingValueName, literal(evaluationContext.getTracer().getTrace().asHTML()));
                                        modifiedBindingSet.addBinding(modifiedBindingValueTrace);
                                    }
                                    break;
                            }
                        } else {
                            modifiedBindingSet.addBinding(bindingValue);
                        }
                    } else {
                        EvaluationContext evaluationContext = new EvaluationContext(getCustomQueryOptions(nextBindingSet), getDataset());
                        Thing subjectThing = Thing.create(getSource(), SCRIPT.ANONTHING, evaluationContext);
                        try {
                            // TODO com.inova8.intelligentgraph.model.Resource fact = subjectThing.getFact(	SCRIPT.ANONPREDICATE,literalValue,null);
                            com.inova8.intelligentgraph.model.Resource fact = IntelligentEvaluator.processFactObjectValue(subjectThing, SCRIPT.ANONPREDICATE, literalValue, customQueryOptions);
                            Binding modifiedBindingValue = new SimpleBinding(bindingValue.getName(), fact.getValue());
                            modifiedBindingSet.addBinding(modifiedBindingValue);
                        } catch (Exception e) {
                            Binding modifiedBindingValue = new SimpleBinding(modifiedBindingValueName, literal(StringEscapeUtils.escapeEcmaScript(e.getMessage())));
                            modifiedBindingSet.addBinding(modifiedBindingValue);
                        }
                    }
                } else {
                    modifiedBindingSet.addBinding(bindingValue);
                }
            } else {
                if (bindingValue.getName().equals(modifiedBindingValueName))
                    modifiedBindingSet.addBinding(bindingValue);
                else {
                    Binding modifiedBindingValue = new SimpleBinding(modifiedBindingValueName, bindingValue.getValue());
                    modifiedBindingSet.addBinding(modifiedBindingValue);
                }
            }
        }
    }
    return modifiedBindingSet;
}
Also used : Binding(org.eclipse.rdf4j.query.Binding) SimpleBinding(org.eclipse.rdf4j.query.impl.SimpleBinding) QueryBindingSet(org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet) BindingSet(org.eclipse.rdf4j.query.BindingSet) IRI(org.eclipse.rdf4j.model.IRI) Resource(com.inova8.intelligentgraph.model.Resource) SimpleBinding(org.eclipse.rdf4j.query.impl.SimpleBinding) QueryBindingSet(org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet) QueryEvaluationException(org.eclipse.rdf4j.query.QueryEvaluationException) NoSuchElementException(java.util.NoSuchElementException) ResponseType(com.inova8.intelligentgraph.sail.IntelligentGraphSail.ResponseType) StatementPattern(org.eclipse.rdf4j.query.algebra.StatementPattern) Value(org.eclipse.rdf4j.model.Value) SimpleLiteral(org.eclipse.rdf4j.model.impl.SimpleLiteral) EvaluationContext(com.inova8.intelligentgraph.evaluator.EvaluationContext) Thing(com.inova8.intelligentgraph.model.Thing)

Aggregations

EvaluationContext (com.inova8.intelligentgraph.evaluator.EvaluationContext)1 Resource (com.inova8.intelligentgraph.model.Resource)1 Thing (com.inova8.intelligentgraph.model.Thing)1 ResponseType (com.inova8.intelligentgraph.sail.IntelligentGraphSail.ResponseType)1 NoSuchElementException (java.util.NoSuchElementException)1 IRI (org.eclipse.rdf4j.model.IRI)1 Value (org.eclipse.rdf4j.model.Value)1 SimpleLiteral (org.eclipse.rdf4j.model.impl.SimpleLiteral)1 Binding (org.eclipse.rdf4j.query.Binding)1 BindingSet (org.eclipse.rdf4j.query.BindingSet)1 QueryEvaluationException (org.eclipse.rdf4j.query.QueryEvaluationException)1 StatementPattern (org.eclipse.rdf4j.query.algebra.StatementPattern)1 QueryBindingSet (org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet)1 SimpleBinding (org.eclipse.rdf4j.query.impl.SimpleBinding)1