/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.query.algebra;
import java.util.Set;
/**
* A generalized projection (allowing the bindings to be renamed) on a tuple
* expression.
*/
public class Projection extends UnaryTupleOperator {
/*-----------*
* Variables *
*-----------*/
private ProjectionElemList projElemList = new ProjectionElemList();
/*--------------*
* Constructors *
*--------------*/
public Projection() {
}
public Projection(TupleExpr arg) {
super(arg);
}
public Projection(TupleExpr arg, ProjectionElemList elements) {
this(arg);
setProjectionElemList(elements);
}
/*---------*
* Methods *
*---------*/
public ProjectionElemList getProjectionElemList() {
return projElemList;
}
public void setProjectionElemList(ProjectionElemList projElemList) {
this.projElemList = projElemList;
projElemList.setParentNode(this);
}
@Override
public Set<String> getBindingNames() {
return projElemList.getTargetNames();
}
public <X extends Exception> void visit(QueryModelVisitor<X> visitor)
throws X
{
visitor.meet(this);
}
@Override
public <X extends Exception> void visitChildren(QueryModelVisitor<X> visitor)
throws X
{
projElemList.visit(visitor);
super.visitChildren(visitor);
}
@Override
public void replaceChildNode(QueryModelNode current, QueryModelNode replacement)
{
if (projElemList == current) {
setProjectionElemList((ProjectionElemList)replacement);
}
else {
super.replaceChildNode(current, replacement);
}
}
@Override
public Projection clone() {
Projection clone = (Projection)super.clone();
clone.setProjectionElemList(getProjectionElemList().clone());
return clone;
}
}