/******************************************************************************* * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * All rights reserved. This program and the accompanying materials are made available under * the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package gov.redhawk.ide.snapshot.capture; import gov.redhawk.sca.util.SubMonitor; import org.eclipse.core.runtime.IProgressMonitor; import BULKIO.PrecisionUTCTime; import BULKIO.StreamSRI; /** * */ public class CorbaNumSamplesReceiver extends CorbaDataReceiver { private long samples; private long currentSamples; private SubMonitor subMonitor; public void setSamples(long samples) { this.samples = samples; } @Override protected void processSamples(IProgressMonitor monitor) { if (samples > Integer.MAX_VALUE) { subMonitor = SubMonitor.convert(monitor, "Capturing Samples...", IProgressMonitor.UNKNOWN); } else { subMonitor = SubMonitor.convert(monitor, "Capturing Samples...", (int) samples); } setProcessing(true); while (isProcessing() && !monitor.isCanceled()) { try { Thread.sleep(500); } catch (InterruptedException e) { // PASS } } subMonitor.done(); subMonitor = null; } private void incrementCurrentSamples(int samplesProcessed) { if (this.subMonitor != null) { this.subMonitor.worked(samplesProcessed); this.currentSamples += samplesProcessed; if (this.currentSamples >= this.samples) { setProcessing(false); } } } @Override public int getSamplesToProcess(int length, PrecisionUTCTime time) { StreamSRI streamSri = getStreamSRI(); if (streamSri != null) { int sampleSize = (streamSri.mode == 1) ? 2 : 1; int receivedSamples = length / sampleSize; int samplesToProcess = (int) Math.min(receivedSamples, this.samples - currentSamples); return samplesToProcess * sampleSize; } else { return 0; } } @Override protected void postPushPacket(int samplesProcessed, PrecisionUTCTime time) { super.postPushPacket(samplesProcessed, time); incrementCurrentSamples(samplesProcessed); } }