blob: 7c569e3138e08cd9c618a3219842b22bdd0ca044 [file] [log] [blame]
package edu.uci.ics.asterix.dataflow.data.nontagged.printers;
import java.io.PrintStream;
import edu.uci.ics.asterix.formats.nontagged.AqlPrinterFactoryProvider;
import edu.uci.ics.asterix.om.types.ATypeTag;
import edu.uci.ics.asterix.om.types.AUnionType;
import edu.uci.ics.asterix.om.types.BuiltinType;
import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
import edu.uci.ics.hyracks.algebricks.data.IPrinter;
import edu.uci.ics.hyracks.algebricks.data.IPrinterFactory;
public class ANullableFieldPrinterFactory implements IPrinterFactory {
private static final long serialVersionUID = 1L;
private AUnionType unionType;
public ANullableFieldPrinterFactory(AUnionType unionType) {
this.unionType = unionType;
}
@Override
public IPrinter createPrinter() {
return new IPrinter() {
private IPrinter nullPrinter;
private IPrinter fieldPrinter;
@Override
public void init() throws AlgebricksException {
nullPrinter = (AqlPrinterFactoryProvider.INSTANCE.getPrinterFactory(BuiltinType.ANULL)).createPrinter();
fieldPrinter = (AqlPrinterFactoryProvider.INSTANCE.getPrinterFactory(unionType.getUnionList().get(1)))
.createPrinter();
}
@Override
public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
fieldPrinter.init();
if (b[s] == ATypeTag.NULL.serialize())
nullPrinter.print(b, s, l, ps);
else
fieldPrinter.print(b, s, l, ps);
}
};
}
}