package org.basex.query.func;
import org.basex.query.QueryContext;
import org.basex.query.QueryException;
import org.basex.query.expr.Expr;
import org.basex.query.item.ANode;
import org.basex.query.item.Item;
import org.basex.query.iter.ItemCache;
import org.basex.query.iter.Iter;
import org.basex.query.util.http.HTTPClient;
import org.basex.util.InputInfo;
/**
* HTTP Client Module.
* @author BaseX Team 2005-12, BSD License
* @author Rositsa Shadura
*/
public final class FNHttp extends StandardFunc {
/**
* Constructor.
* @param ii input info
* @param f function definition
* @param e arguments
*/
public FNHttp(final InputInfo ii, final Function f, final Expr[] e) {
super(ii, f, e);
}
@Override
public Iter iter(final QueryContext ctx) throws QueryException {
checkAdmin(ctx);
// get request node
final ANode request = expr[0].item(ctx, input) == null ? null :
checkNode(expr[0].item(ctx, input));
// get HTTP URI
final byte[] href = expr.length >= 2 ?
checkEStr(expr[1].item(ctx, input)) : null;
// get parameter $bodies
ItemCache cache = null;
if(expr.length == 3) {
final Iter bodies = expr[2].iter(ctx);
cache = new ItemCache();
for(Item i; (i = bodies.next()) != null;) cache.add(i);
}
// send HTTP request
return new HTTPClient(input, ctx.context.prop).sendRequest(
href, request, cache);
}
@Override
public boolean uses(final Use u) {
return u == Use.NDT || super.uses(u);
}
}