Package edu.mit.simile.backstage.model

Source Code of edu.mit.simile.backstage.model.TupleQueryBuilder

package edu.mit.simile.backstage.model;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.openrdf.model.Value;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.algebra.And;
import org.openrdf.query.algebra.Filter;
import org.openrdf.query.algebra.Join;
import org.openrdf.query.algebra.Projection;
import org.openrdf.query.algebra.ProjectionElem;
import org.openrdf.query.algebra.ProjectionElemList;
import org.openrdf.query.algebra.TupleExpr;
import org.openrdf.query.algebra.ValueExpr;
import org.openrdf.query.algebra.Var;
import org.openrdf.query.algebra.helpers.QueryModelTreePrinter;
import org.openrdf.query.parser.ParsedTupleQuery;
import org.openrdf.repository.sail.SailRepositoryConnection;

import edu.mit.simile.backstage.util.MyTupleQuery;

public class TupleQueryBuilder {
    private List<TupleExpr> _tupleExprs = new ArrayList<TupleExpr>();
    private List<ValueExpr> _conditions = new ArrayList<ValueExpr>();
   
    private int _varCount = 0;
   
    public void addTupleExpr(TupleExpr p) {
        if (p != null) {
            _tupleExprs.add(p);
        }
    }
   
    public void addCondition(ValueExpr e) {
        if (e != null) {
            _conditions.add(e);
        }
    }
   
    public Var makeVar(String prefix) {
        return new Var(prefix + _varCount++);
    }
   
    public Var makeVar(String prefix, Value value) {
        return new Var(prefix + _varCount++, value);
    }
   
    public TupleExpr joinTupleExpressions() {
        Iterator<TupleExpr> i = _tupleExprs.iterator();
        TupleExpr result = i.hasNext() ? i.next() : null;
       
        while (i.hasNext()) {
            result = new Join(result, i.next());
        }
        return result;
    }
   
    public ValueExpr joinConditions() {
        ValueExpr expr = null;
       
        for (ValueExpr ve : _conditions) {
            expr = (expr == null) ? ve : new And(expr, ve);
        }
       
        return expr;
    }
   
    public TupleExpr makeFilterTupleExpr() {
        TupleExpr tupleExprs = joinTupleExpressions();
        ValueExpr conditions = joinConditions();
       
        return (conditions == null) ?
                tupleExprs :
                new Filter(tupleExprs, conditions);
    }
   
    public Projection makeProjection(Var var) {
        return makeProjection(new ProjectionElemList(new ProjectionElem(var.getName())));
    }
   
    public Projection makeProjection(ProjectionElemList projectionElements) {
        return new Projection(
            makeFilterTupleExpr(),
            projectionElements
        );
    }
   
    public TupleQuery makeTupleQuery(Var var, SailRepositoryConnection connection) {
        return makeTupleQuery(new ProjectionElemList(new ProjectionElem(var.getName())), connection);
    }
   
    public TupleQuery makeTupleQuery(ProjectionElemList projectionElements, SailRepositoryConnection connection) {
        return new MyTupleQuery(
            new ParsedTupleQuery(makeProjection(projectionElements)),
            connection
        );
    }
   
    public String getStringSerialization() {
      StringBuffer sb = new StringBuffer();
     
      boolean first = true;
      for (TupleExpr tupleExpr : _tupleExprs) {
        if (first) {
          first = false;
        } else {
          sb.append(';');
        }
        sb.append(QueryModelTreePrinter.printTree(tupleExpr));
      }
     
      for (ValueExpr valueExpr : _conditions) {
        if (first) {
          first = false;
          sb.append('|');
        } else {
          sb.append(';');
        }
        sb.append(QueryModelTreePrinter.printTree(valueExpr));
      }
     
      return sb.toString();
    }
}
TOP

Related Classes of edu.mit.simile.backstage.model.TupleQueryBuilder

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.