package org.yamcs.xtceproc; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import org.yamcs.ContainerExtractionResult; import org.yamcs.parameter.ParameterValueList; import org.yamcs.utils.TimeEncoding; import org.yamcs.xtce.CriteriaEvaluator; /** * Keeps track of where we are when processing a packet. * @author nm * */ public class ContainerProcessingContext { final ProcessorData pdata; final ContainerProcessingPosition position; //Keeps track of the absolute offset of the container where the processing takes place. //Normally 0, but if the processing takes place inside a subcontainer, it reflects the offset of that container with respect to the primary container where the processing started int containerAbsoluteByteOffset; Subscription subscription; ContainerProcessingResult result; //if set to true, out of packet parameters will be silently ignored, otherwise an exception will be thrown final boolean ignoreOutOfContainerEntries; public final SequenceContainerProcessor sequenceContainerProcessor=new SequenceContainerProcessor(this); public final SequenceEntryProcessor sequenceEntryProcessor=new SequenceEntryProcessor(this); public final DataEncodingDecoder dataEncodingProcessor=new DataEncodingDecoder(this); public final ValueProcessor valueProcessor=new ValueProcessor(this); public final CriteriaEvaluator criteriaEvaluator; public ContainerProcessingContext(ProcessorData pdata, ContainerProcessingPosition position, ContainerProcessingResult result, Subscription subscription, boolean ignoreOutOfContainerEntries) { this.pdata = pdata; this.position = position; this.subscription = subscription; this.criteriaEvaluator = new CriteriaEvaluatorImpl(result.params); this.ignoreOutOfContainerEntries = ignoreOutOfContainerEntries; this.result = result; } static class ContainerProcessingPosition { ByteBuffer bb; int containerAbsoluteByteOffset; int bitPosition; public ContainerProcessingPosition(ByteBuffer bb, int containerAbsoluteByteOffset, int bitPosition) { this.bb = bb; this.containerAbsoluteByteOffset = containerAbsoluteByteOffset; this.bitPosition = bitPosition; } } static class ContainerProcessingResult { ParameterValueList params = new ParameterValueList(); List<ContainerExtractionResult> containers = new ArrayList<>(); long acquisitionTime; long generationTime; ProcessingStatistics stats; long expirationTime = TimeEncoding.INVALID_INSTANT ; public ContainerProcessingResult(long aquisitionTime, long generationTime, ProcessingStatistics stats) { this.acquisitionTime = aquisitionTime; this.generationTime = generationTime; this.stats = stats; } } }