package org.basex.query.up.primitives;
import static org.basex.query.util.Err.*;
import org.basex.data.Data;
import org.basex.query.QueryException;
import org.basex.query.item.DBNode;
import org.basex.query.item.QNm;
import org.basex.query.up.NamePool;
import org.basex.util.InputInfo;
import org.basex.util.Util;
/**
* Rename node primitive.
*
* @author BaseX Team 2005-12, BSD License
* @author Lukas Kircher
*/
public final class RenameNode extends ValueUpdate {
/** New name. */
private final QNm name;
/**
* Constructor.
* @param p pre
* @param d data
* @param i input info
* @param nm new QName
*/
public RenameNode(final int p, final Data d, final InputInfo i,
final QNm nm) {
super(PrimitiveType.RENAMENODE, p, d, i);
name = nm;
}
@Override
public void apply() {
data.update(pre, data.kind(pre), name.string(), name.uri());
}
@Override
public void merge(final UpdatePrimitive p) throws QueryException {
UPMULTREN.thrw(input, targetNode());
}
@Override
public void update(final NamePool pool) {
final DBNode node = targetNode();
pool.add(name, node.type);
pool.remove(node);
}
@Override
public String toString() {
return Util.name(this) + '[' + targetNode() + ", " + name + ']';
}
@Override
public int size() {
return 1;
}
}