Package org.openrdf.query.algebra.evaluation.cursors

Source Code of org.openrdf.query.algebra.evaluation.cursors.StatementPatternCursor

/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2009.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.query.algebra.evaluation.cursors;

import org.openrdf.cursor.Cursor;
import org.openrdf.cursor.FilteringCursor;
import org.openrdf.model.Resource;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.query.algebra.StatementPattern;
import org.openrdf.query.algebra.Var;

/**
* The same variable might have been used multiple times in this
* StatementPattern, verify value equality in those cases.
*
* @author James Leigh
*/
public class StatementPatternCursor extends FilteringCursor<Statement> {

  private Var subjVar;

  private Var predVar;

  private Var objVar;

  private Var conVar;

  public StatementPatternCursor(Cursor<? extends Statement> delegate, StatementPattern sp) {
    super(delegate);
    subjVar = sp.getSubjectVar();
    predVar = sp.getPredicateVar();
    objVar = sp.getObjectVar();
    conVar = sp.getContextVar();
  }

  @Override
  protected boolean accept(Statement st) {
    Resource subj = st.getSubject();
    URI pred = st.getPredicate();
    Value obj = st.getObject();
    Resource context = st.getContext();

    if (subjVar != null) {
      if (subjVar.equals(predVar) && !subj.equals(pred)) {
        return false;
      }
      if (subjVar.equals(objVar) && !subj.equals(obj)) {
        return false;
      }
      if (subjVar.equals(conVar) && !subj.equals(context)) {
        return false;
      }
    }

    if (predVar != null) {
      if (predVar.equals(objVar) && !pred.equals(obj)) {
        return false;
      }
      if (predVar.equals(conVar) && !pred.equals(context)) {
        return false;
      }
    }

    if (objVar != null) {
      if (objVar.equals(conVar) && !obj.equals(context)) {
        return false;
      }
    }

    return true;
  }
}
TOP

Related Classes of org.openrdf.query.algebra.evaluation.cursors.StatementPatternCursor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.