package org.yamcs.web.rest;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import org.yamcs.api.MediaType;
import org.yamcs.parameter.ParameterValueWithId;
import org.yamcs.protobuf.Pvalue.ParameterValue;
import org.yamcs.protobuf.Yamcs.NamedObjectId;
import org.yamcs.utils.ParameterFormatter;
import org.yamcs.web.HttpException;
import io.netty.buffer.ByteBufOutputStream;
/**
* Facilitates working with chunked csv transfer of parameter data.
* Wrap every ByteBufOutputStream with a ParameterFormatter
*/
public class ParameterReplayToChunkedCSVEncoder extends ParameterReplayToChunkedTransferEncoder {
private ParameterFormatter formatter;
public ParameterReplayToChunkedCSVEncoder(RestRequest req, List<NamedObjectId> idList) throws HttpException {
super(req, MediaType.CSV, idList);
formatter.setWriteHeader(true);
}
@Override
protected void resetBuffer() {
super.resetBuffer();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(bufOut));
formatter = new ParameterFormatter(bw, idList, '\t');
formatter.setWriteHeader(false);
}
@Override
public void processParameterData(List<ParameterValueWithId> params, ByteBufOutputStream bufOut) throws IOException {
List<ParameterValue> pvlist = new ArrayList<>();
for(ParameterValueWithId pvalid: params) {
pvlist.add(pvalid.toGbpParameterValue());
}
formatter.writeParameters(pvlist);
}
@Override
protected void closeBufferOutputStream() throws IOException {
formatter.close();
}
}