package org.basex.query.item;
import java.io.IOException;
import java.io.InputStream;
import org.basex.io.IO;
import org.basex.query.QueryException;
import org.basex.query.util.Err;
import org.basex.util.InputInfo;
import org.basex.util.Util;
/**
* Streamable base64 item.
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
public final class B64Stream extends B64 {
/** File reference. */
private final IO input;
/** Error message. */
private final Err error;
/**
* Constructor.
* @param in input
* @param err error message to be thrown
*/
public B64Stream(final IO in, final Err err) {
input = in;
error = err;
}
@Override
public boolean eq(final InputInfo ii, final Item it)
throws QueryException {
return type == it.type ? input.eq(((B64Stream) it).input) :
super.eq(ii, it);
}
@Override
protected byte[] val(final InputInfo ii) throws QueryException {
if(data == null) {
try {
data = input.read();
} catch(final IOException ex) {
error.thrw(ii, ex);
}
}
return data;
}
@Override
public InputStream input(final InputInfo ii) throws QueryException {
try {
return input.buffer();
} catch(final IOException ex) {
throw error.thrw(ii, ex);
}
}
@Override
public String toString() {
return Util.info("\"%\"", input.name());
}
}