package org.yamcs.artemis; import org.apache.activemq.artemis.api.core.client.ClientMessage; import org.yamcs.yarch.Tuple; import org.yamcs.yarch.TupleDefinition; import com.google.protobuf.ByteString; import org.yamcs.api.YamcsApiException; import org.yamcs.api.artemis.Protocol; import org.yamcs.protobuf.Yamcs.TmPacketData; import org.yamcs.tctm.TmProviderAdapter; /** * Translates between tuples as defined in {@link TmProviderAdapter} and ActiveMQ messages containing TmPacketData * @author nm * */ public class TmTupleTranslator implements TupleTranslator { @Override public ClientMessage buildMessage(ClientMessage msg, Tuple tuple) { byte[] tmbody=(byte[])tuple.getColumn(TmProviderAdapter.PACKET_COLUMN); long recTime=(Long)tuple.getColumn(TmProviderAdapter.RECTIME_COLUMN); long genTime=(Long)tuple.getColumn(TmProviderAdapter.GENTIME_COLUMN); int seqNum = (Integer)tuple.getColumn(TmProviderAdapter.SEQNUM_COLUMN); TmPacketData tm=TmPacketData.newBuilder().setPacket(ByteString.copyFrom(tmbody)) .setReceptionTime(recTime).setGenerationTime(genTime).setSequenceNumber(seqNum).build(); Protocol.encode(msg, tm); return msg; } @Override public Tuple buildTuple(TupleDefinition tdef, ClientMessage msg) { try { TmPacketData tm=(TmPacketData)Protocol.decode(msg, TmPacketData.newBuilder()); Tuple t=new Tuple(tdef, new Object[]{tm.getGenerationTime(), tm.getSequenceNumber(), tm.getReceptionTime(), tm.getPacket().toByteArray() }); return t; } catch (YamcsApiException e) { throw new IllegalArgumentException(e.toString()); } } }