package org.yamcs.web.rest; import java.io.IOException; import java.util.List; import org.yamcs.api.MediaType; import org.yamcs.parameter.ParameterValueWithId; import org.yamcs.protobuf.Pvalue.ParameterData; import org.yamcs.protobuf.Pvalue.ParameterValue; import org.yamcs.protobuf.SchemaPvalue; import org.yamcs.web.HttpException; import com.fasterxml.jackson.core.JsonGenerator; import io.netty.buffer.ByteBufOutputStream; import io.protostuff.JsonIOUtil; /** * Facilitates working with chunked transfer of gpb parameters */ public class ParameterReplayToChunkedProtobufEncoder extends ParameterReplayToChunkedTransferEncoder { public ParameterReplayToChunkedProtobufEncoder(RestRequest req) throws HttpException { super(req, req.deriveTargetContentType(), null); } @Override public void processParameterData(List<ParameterValueWithId> params, ByteBufOutputStream bufOut) throws IOException { if (MediaType.PROTOBUF.equals(contentType)) { ParameterData.Builder pd = ParameterData.newBuilder(); for (ParameterValueWithId pvalid : params) { ParameterValue pval = pvalid.toGbpParameterValue(); pd.addParameter(pval); } pd.build().writeDelimitedTo(bufOut); } else { for (ParameterValueWithId pvalid : params) { ParameterValue pval = pvalid.toGbpParameterValue(); JsonGenerator generator = req.createJsonGenerator(bufOut); JsonIOUtil.writeTo(generator, pval, SchemaPvalue.ParameterValue.WRITE, false); generator.close(); } } } }